django 使用Python将HTML转换为PDF

sczxawaw  于 2023-05-19  发布在  Go
关注(0)|答案(4)|浏览(224)

我尝试在Django中将HTML转换为PDF文档,但没有成功。
我试过使用wkhtmltopdf 0.9.9,但是Apache抛出一个错误,wkhtmltopdf无法连接到服务器。当我直接使用wkhtmltopdf时,它运行得非常好,并将HTML转换为PDF文档。
我也试过使用unoconv,但是渲染的PDF文件没有任何CSS应用到它。我也试过使用xhtml 2 pdf。我再次面临同样的问题;呈现的PDF文件没有应用任何CSS样式。我花了今天和昨晚的大部分时间试图解决这个问题,但我仍然没有解决这个问题。
如果你需要更多的信息就告诉我

093gszye

093gszye1#

为Django配置Pisa应该不会太难。
网上有几个例子向你展示了如何做到这一点,并解释了如何在你的模板中链接到外部资源:

在你的情况下,你应该尝试第一篇博客文章中提到的link-callback-function:

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
然后在render-method中相应地使用fetch resources

pdf = pisa.pisaDocument(StringIO.StringIO(
        html.encode("UTF-8")), 
        result, 
        link_callback=fetch_resources,
        encoding="utf-8")
23c0lvtd

23c0lvtd2#

我建议你使用比萨,pypdf和html5lib的组合,它为我工作。

qq24tv8q

qq24tv8q3#

一个可能的,但不是那么优雅的解决方案是运行一个小脚本,通过一个无头浏览器组件(Linux上的webkit/xvfb)呈现html,然后将其保存为pdf。

rjjhvcjd

rjjhvcjd4#

您可以使用pyhtml2pdf模块将HTML页面转换为pdf

#if your using website URL
from pyhtml2pdf import converter
url = 'https://.....'
converter.convert(url, 'sample.pdf')

# if have the html file saved 
import os
from pyhtml2pdf import converter
path = os.path.abspath('abcd.html')
converter.convert(f'file:///{path}', 'sample.pdf')

Source代码

相关问题