Невозможно загрузить изображения/файлы pisa pdf Django python

Раньше у меня была проблема, когда китайские символы не отображались, даже когда я указывал @font-face для использования шрифта UTF-8. Оказывается, я также не могу отображать изображения ... поэтому мне кажется, что я не могу получить ни один из файлов, встроенных в мой PDF-файл.

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

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, и я не понимаю, что не так.

ОБНОВЛЕНИЕ Каждый раз, когда я создаю PDF-файл, я получаю это сообщение на консоли

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

это может быть связано?

ОБНОВЛЕНИЕ №2

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


person zentenk    schedule 22.01.2012    source источник
comment
Вы уверены, что в вашем шрифте действительно есть китайские иероглифы? Фон может быть юникодным, но по-прежнему не хватает некоторых символов.   -  person Roman Susi    schedule 22.01.2012
comment
logger проблема не имеет отношения к делу (и безобидна)   -  person plaes    schedule 22.01.2012
comment
Спасибо за ответ. Шрифты теперь работают, но изображение по-прежнему не работает   -  person zentenk    schedule 22.01.2012
comment
zentenk, я вижу, что мой код тебе помогает. Не забудьте проголосовать за мой пост на ваш предыдущий ответ;) Также сообщаю вам, что: 1) этот код работает для меня и протестирован с изображениями. 2) после того, как я потратил много времени на Pisa, я переместил свои отчеты в pod   -  person dani herrera    schedule 22.01.2012
comment
Я думаю, вам стоит однажды попробовать файл изображения jpg.   -  person Anil Kumar Arya    schedule 02.04.2014


Ответы (5)


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

person zentenk    schedule 12.02.2012

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

person Vinay Chittora    schedule 18.03.2013

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

<img src="/static/images/<name>.jpg" />
person Anil Kumar Arya    schedule 02.04.2014

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

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

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

person SAFEER N    schedule 07.05.2014

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

Я решил эту проблему, установив PIL с zip-декодером.
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/

person yodi    schedule 10.02.2012