Pisa (XHTML - ›PDF) в Django не отображает изображения в формате PDF

Для начала, я видел другие темы по этому поводу, и я перепробовал почти все, чтобы попытаться исправить это, но ...

При использовании Pisa для рендеринга HTML-страницы в PDF изображения в указанном HTML-коде явно пропадают. То есть, когда страница отображается в HTML, все просто шикарно, но когда я переключаю вывод в PDF с помощью Пизы, изображения исчезают.

Чаще всего мне приходилось создавать функцию обратного вызова ссылки следующим образом:

def fetch_resources(uri, rel):
    path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
    return path

def my_view(request, variable1):
    html = render_to_string('template_goes_here.html', dict, context_instance=RequestContext(request))
    result = StringIO()
    pdf = pisa.pisaDocument(StringIO(html.encode("UTF-8")), dest=result, link_callback=fetch_resources)
    if not pdf.err:
        return HttpResponse(result.getvalue(), mimetype='application/pdf')
    return HttpResponse('Pisa hates you! %s' % cgi.escape(html))

Однако это не работает. PDF-файл открывается, отлично, но изображения отсутствуют.

Я также прочитал предложение в другом потоке о написании HTML в mkstemp, преобразовании его в PDF через командную строку, а затем выводе HTML, и там тоже безуспешно.

Я даже попытался установить PIL 1.1.16 вместо 1.1.17 из-за того, что у кого-то была аналогичная проблема - без кубиков.

Кто-нибудь знает, где я здесь ошибаюсь?


person JEEND0    schedule 02.09.2011    source источник
comment
Не используйте Пизу, используйте xhtml2pdf, который является продолжением проекта.   -  person Chris Morgan    schedule 03.09.2011
comment
Я тоже столкнулся с той же проблемой, Мкстемп тоже не помог. Пиза не отображает изображения, когда мы установили размеры изображений в html. Поэтому попробуйте сгенерировать pdf из html только с изображением. Затем продолжайте добавлять другое содержимое html. Я использовал HTMLTODOC для создания PDF в конце - ›htmldoc.org   -  person Abhaya    schedule 09.12.2011


Ответы (2)


Я давно не смотрел на это, но думаю, вам нужно использовать лямбда или функтоолы.

e.g.

links = lambda uri, rel: os.path.join(settings.MEDIA_ROOT, 
    uri.replace(settings.MEDIA_URL, ''))


pdf = pisa.pisaDocument(StringIO(html.encode("UTF-8")),
    dest=result, link_callback=links)
person Cole Maclean    schedule 19.03.2012
comment
На второй взгляд, нет никаких причин, по которым это должно быть по-другому. Не уверен, почему приведенный пример не работает. - person Cole Maclean; 09.11.2015

Думаю, это может помочь. В моем случае виновным было использование слэшей в Windows. https://stackoverflow.com/a/12644633/1236599

person Krazzzeee    schedule 12.10.2012