使用Python将HTML转换为PDF

2024-04-19 23:40:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Django中将HTML转换成PDF文档,但没有成功。

我试过使用wkhtmltopf0.9.9,但是Apache抛出了一个wkhtmltopf无法连接到服务器的错误。当我直接使用wkhtmltoppdf时,它运行得非常好,并将HTML转换为PDF文档。

我也尝试过使用unoconv,但是呈现的PDF文件没有应用任何CSS。我也试过使用xhtml2pdf。我再次面临同样的问题;呈现的PDF文件没有应用任何CSS样式。我今天和昨晚花了大部分时间试图解决这个问题,但我仍然离解决这个问题不远了。

如果你需要更多的信息请告诉我


Tags: 文件django文档服务器pdfapachehtml错误
3条回答

为Django配置Pisa不应该是too hard

网络上有很多例子向你展示了如何做到这一点 解释如何链接到模板中的外部资源:

在您的情况下,您应该尝试在第一篇博客文章中提到的链接回调函数:

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")

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

我建议你使用pisa,pypdf和html5lib的组合,这对我很有用。

相关问题 更多 >