Конвертировать HTML в PDF, используя Python - PullRequest
3 голосов
/ 28 сентября 2011

Я пытаюсь преобразовать HTML в документ PDF в Django и не увенчался успехом.

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

Я также пытался использовать unoconv, однако к отрендеренному файлу PDF к нему не применяется CSS.Я также пытался использовать xhtml2pdf.Снова я сталкиваюсь с той же самой проблемой;к отрендеренному файлу PDF не применены стили CSS.Я потратил лучшую часть сегодняшнего и вчерашнего вечера, пытаясь решить эту проблему, и я все еще не приблизился к решению проблемы.

Дайте мне знать, если вам нужна дополнительная информация

Ответы [ 3 ]

4 голосов
/ 28 сентября 2011

Настройка Пизы для Джанго не должна быть слишком сложной .

В сети действительно есть несколько примеров, которые показывают вам, как это сделать, и объясните, как ссылаться на внешние ресурсы в ваших шаблонах:

В вашем случае вы должны попробовать функцию link-callback, упомянутую в первом сообщении в блоге:

def fetch_resources(uri, rel):
    """
    Callback to allow pisa/reportlab to retrieve Images,Stylesheets, etc.
    `uri` is the href attribute from the html link element.
    `rel` gives a relative path, but it's not used here.

    """
    path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
    return path

Для более новой Django-версии вам, вероятно, следует использовать STATIC_ROOT вместо MEDIA_ROOT

Затем используйте fetch resources соответственно в вашем методе рендеринга:

pdf = pisa.pisaDocument(StringIO.StringIO(
        html.encode("UTF-8")), 
        result, 
        link_callback=fetch_resources,
        encoding="utf-8")
0 голосов
/ 28 сентября 2011

Возможное, но не очень элегантное решение - запустить небольшие сценарии, которые отображают html через компонент браузера без головы (webkit / xvfb в Linux), а затем сохраняют его в формате pdf.

0 голосов
/ 28 сентября 2011

Я предлагаю вам использовать комбинацию pisa, pypdf и html5lib, у меня это сработало.

...