3

我正在尝试将 HTML 转换为 Django 中的 PDF 文档,但没有成功。

我曾尝试使用 wkhtmltopdf 0.9.9,但是 Apache 抛出 wkhtmltopdf 无法连接到服务器的错误。当我直接使用 wkhtmltopdf 时,它运行得非常好,并将 HTML 转换为 PDF 文档。

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

如果您需要更多信息,请告诉我

4

3 回答 3

4

为 Django 配置 Pisa 应该不会太难

网上确实有几个示例向您展示了如何执行此操作并解释了如何链接到模板中的外部资源:

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

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")
于 2011-09-28T14:17:27.613 回答
0

我建议你使用 pisa、pypdf 和 html5lib 组合,它对我有用。

于 2011-09-28T14:13:46.373 回答
0

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

于 2011-09-28T14:26:40.240 回答