如何使用Django将完全呈现的html页面转换为PDF

时间:2015-02-03 03:56:07

标签: python django pdf wkhtmltopdf

我创建了一个应用程序,该应用程序使用Google maps api对地址进行地理编码并将标记添加到地图中。它在我的观点中也与Postgis有一些互动。一切都很好。

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

我查看了Reportlab,它只能通过视图创建pdf(对此很有效,但不能满足我的需求)。

我也看过wkhtmltopdf,乍一看它似乎只能从视图中呈现,除非我遗漏了一些东西。

问:是否可以从呈现的网页创建pdf(包括客户端创建的Google地图)?如果可能的话,一个简单的例子将非常受欢迎。

由于

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

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

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

2 个答案:

答案 0 :(得分:2)

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

如果您正在考虑在PDF中添加Google地图,则有3个选项:

  1. 在客户端上呈现,将它们打印为PDF。这依赖于用户实际知道如何执行此操作。
  2. 使用无头浏览器使用Javascript预渲染页面,将其返回到Django,然后导出为PDF。根据服务器的不同,这将很困难。
  3. 使用Google Maps Static Map API生成图片,并在Pisa等工具中使用该图片。这比完整的API具有更少的功能,但是非常适合制作可打印的静态图像。 这样做。
  4. As stated in the bottom of the Django Docs on generating PDFsPisa通过获取HTML页面,然后从中创建PDF,我之前使用过它,这意味着您可以使用Django模板构建页面,然后而不是返回它,通过HTML到PDF处理器运行它。您需要捕获此生成的PDF并根据需要将其附加到电子邮件中。


    与编辑匹配的附录。

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

答案 1 :(得分:1)

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

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

另一个选项是xhtml2pdf(http://www.xhtml2pdf.com/),但根据地图的渲染方式,它可能无效。值得一试。