【问题标题】:How to turn fully rendered html page using Django into PDF如何使用 Django 将完全呈现的 html 页面转换为 PDF
【发布时间】:2015-02-03 03:56:07
【问题描述】:

我创建了一个应用程序,它使用 Google 地图 API 对地址进行地理编码并向地图添加标记。在我看来,它也与 Postgis 有一些交互。那里一切正常。

我遇到的问题是如何从完全呈现的 HTML 文件创建 PDF,以便所有上下文数据和谷歌地图都可以呈现为 pdf。我需要与网络应用程序交互的人通过电子邮件发送 pdf 以进行地理编码。因此,最终结果是将结果 pdf 并附加到电子邮件中。

我查看了 Reportlab,它只能通过视图创建 pdf(对此非常有用,但不适用于我的需要)。

我也看过wkhtmltopdf,乍一看似乎只能从视图中渲染,除非我遗漏了什么。

问:是否可以从呈现的网页(包括在客户端创建的 Google 地图)创建 pdf?如果可能的话,一个简单的例子将不胜感激。

谢谢

编辑:添加工作流程以尝试澄清问题所在

  1. 在索引页面上有一个文本框,有人可以在其中添加地址 在提交时,有一个谷歌地理编码器功能将表单数据中的纬度和经度发送回视图
  2. 在视图中,经纬度用于查找 3 个最近的位置(在我的 Postgis 数据库中)并呈现到 HTML 结果页面
  3. 在结果页面上,使用 Google 地图 API 创建了 3 个单独的 Google 地图

我需要将完全呈现的网页转换为 PDF。 Reportlab(例如)在第 2 点之后调用,在第 3 点呈现网页之前,因此它无法创建包含这 3 个 Google 地图的 PDF。

【问题讨论】:

  • 等等...您想在客户端创建 PDF 吗?是的,有一个简单的答案:打印到 PDF。还是我错过了什么?
  • @dylrei 最终,我希望员工只需按下“创建和发送 pdf”按钮,而不是打印到 pdf、保存到他们的桌面、附加到电子邮件然后从他们的文件中删除文件电脑。如果不可能,我只需要看看打印到 PDF 选项是否有效。

标签: python django pdf wkhtmltopdf


【解决方案1】:

首先,根据模型-视图-控制器范式,可下载的 PDF 视图 - 请查看Django PDF documentation

如果您希望在 PDF 中包含 Google 地图,有 3 个选项:

  1. 在客户端上渲染,让它们打印成 PDF。这取决于用户是否知道如何执行此操作。
  2. 使用无头浏览器使用 Javascript 预渲染页面,将其返回给 Django,然后导出为 PDF。这会很困难,具体取决于服务器。
  3. 使用Google Maps Static Map API 生成图像并在Pisa 之类的工具中使用它。它的功能比完整的 API 少,但非常适合制作可打印的静态图像。 这样做。

As stated in the bottom of the Django Docs on generating PDFs, Pisa 通过获取 HTML 页面然后从中创建 PDF 来工作,我以前使用过它,这意味着您可以使用 Django 模板来构建页面,然后运行而不是返回它它通过 HTML 到 PDF 处理器。您只需捕获此生成的 PDF 并根据需要将其附加到电子邮件中。


附录以匹配编辑。

上述内容仍然有效,除了关于 PDF 是视图的部分。无论如何,静态地图 API 应该为您提供需要包含在您转换为 PDF 的原始 HTML 中的图像。

【讨论】:

  • @Lego Stormtroopr,感谢您的意见。对于您的建议#3,您能否详细说明这将如何工作?我不清楚何时何地(在视图中?)我会生成图像,以及将其包含在原始 HTML 中的过程。我会在这个工作流程中使用 Reportlab 还是 wkhtmltopdf?
  • 感谢您的可靠回答和澄清。我明天去比萨看看。
【解决方案2】:

查看 HTML2Canvas (http://html2canvas.hertzen.com/) 是否适用于您的页面。如果是这样,您可以将画布导出为 png,然后将 if 发送到您的服务器。

您的服务器可以将该 png 转换为 pdf,然后返回该 pdf,因此系统会提示用户下载它。

另一个选项是 xhtml2pdf (http://www.xhtml2pdf.com/),但它可能无法正常工作,具体取决于地图的渲染方式。不过值得一试。

【讨论】:

    猜你喜欢
    • 2014-07-09
    • 1970-01-01
    • 2014-10-28
    • 2016-07-10
    • 2011-01-13
    • 2011-07-01
    • 1970-01-01
    • 2013-04-29
    相关资源
    最近更新 更多