2012-01-22 2 views
0

У меня была проблема, прежде чем там, где китайские символы не будут отображаться, даже если я указал @font-face на использование шрифта UTF-8. Оказывается, я тоже не могу отображать изображения ... поэтому мне кажется, что я не могу получить какие-либо файлы, вложенные в мой pdf.Не удалось загрузить изображения/файлы pisa pdf Django python

Это код, я использую:

def render_to_pdf(template_src, context_dict): 
    """Function to render html template into a pdf file""" 
    template = get_template(template_src) 
    context = Context(context_dict) 
    html = template.render(context) 
    result = StringIO.StringIO() 

    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), 
              dest=result, 
              encoding='UTF-8', 
              link_callback=fetch_resources) 
    if not pdf.err: 
     response = http.HttpResponse(result.getvalue(), mimetype='application/pdf') 

     return response 

    return HttpResponse('We had some errors<pre>%s</pre>' % escape(html)) 

def fetch_resources(uri, rel): 
    import os.path 
    from django.conf import settings 
    path = os.path.join(
      settings.STATIC_ROOT, 
      uri.replace(settings.STATIC_URL, "")) 
    return path 

HTML

<img src="/static/images/bc_logo_bw_pdf.png" /> 

и

@font-face { 
     font-family: "Wingdings"; 
     src: url("/static/fonts/wingdings.ttf"); 
    } 

Я посмотрел на другие задания на SO, но это не было никакой помощи. Также нет исключений в двух функциях. Также в функции fetch_resources возвращаемый путь был правильным полным путем к файлу, то есть /home/<user>/project/static/images/bc_logo_bw_pdf.png и /home/<user>/project/static/fonts/wingdings.ttf, и я не согласен с тем, что не так.

UPDATE Everytime создать PDF-файл, я получаю это сообщение на консоли

No handlers could be found for logger "ho.pisa" 

это могло быть связано?

UPDATE # 2

Шрифт работает теперь я сделал тупую ошибку ... Шрифт я использовал не имел китайский Юникода. Но я все еще не могу вставлять изображения в pdf, будь то jpeg, gif или png.

+2

Вы уверены, что у вашего шрифта действительно есть иероглифы? Fount может быть unicode, но все еще не хватает некоторых символов. –

+0

Вопрос 'logger' не связан (и безвреден) – plaes

+0

Спасибо за отзыв. Шрифты работают сейчас, но изображение все еще не работает – zentenk

ответ

-2

У меня такая же проблема здесь. Не отказывайтесь от XHTML2PDF Пизы.
Pisa использует PIL для генерации PDF и использует lib zip-декодер для вставки изображений.
Вы должны проверить, если ваш PIL уже установлен должным образом с почтовым декодером, шрифты и несколько компонентов

меня решить эту проблему путем установки PIL с почтовым декодером.
http://obroll.com/install-python-pil-python-image-library-on-ubuntu-11-10-oneiric/

Если вам нужна более подробную информацию, вы можете прочитать мою статью здесь: http://obroll.com/how-to-load-images-files-style-css-in-pdf-using-pisa-xhtml2pdf-on-django/

+0

пробовал инструкции на вашем сайте, все еще не работает :( – zentenk

+0

это тоже не работает. –

3

я, наконец, решить эту проблему у меня был ... оказывается, что это не работает, если я изложу высота body с помощью css ... после того, как я удалил эту строку, изображение было загружено отлично ...

0

Для меня (django 1.4, python 2.7 pisa == 3.0.33), Если я поместил полный путь образ вместо относительного, он работает для меня. Попробуйте сделать то же самое.

0

Все выглядит лучше. Попробуйте один раз с файлом изображения JPG. В моем случае файл PNG также не работал.

<img src="/static/images/<name>.jpg" /> 
0

без width и height атрибутов изображения не будет работать. добавьте атрибут width и height.

<img src="{% static 'images/logo.png' %}" alt="image" width="200" height="150" /> 

Это исправление работает для меня.

Смежные вопросы