我正在使用Django创建报告网站。报告是动态生成的,它们还包括一些SVG图表。我想创建一个PDF文件,该文件基于用户正在查看的当前报告,但具有额外的页眉和页脚。我遇到了Phantomjs,虽然有两个问题,首先是页面需要用户登录,所以如果我将url发送到服务器,phantomjs会为日志页面创建pdf;第二,报告是使用ajax生成的,因此即使是相同的网址也会有不同的报告。有没有更好的方法呢?
答案 0 :(得分:1)
Wkhtmtopdf是将html转换为pdf及其python Lib
的好工具答案 1 :(得分:1)
问题一般是如何通过Web服务器进行身份验证。对于WKHTMLTOPDF和PHANTOMJS,我通过将身份验证令牌传递给他们并将其传递回cookie中的服务器来完成此操作。
因此,对于WKHTMLTOPDF,这变为:
wkhtmltopdf --cookie=LtpaToken2=<sometoken>
这适用于传递身份验证令牌的Java Web服务器。我不太了解django,但它必须使用类似的基于cookie的机制进行身份验证。你需要:
对于AJAX,最好的方法是延迟。同样,两者都有配置延迟的机制。在WKHTMLTOPDF的情况下,您可以在命令行参数中指定它,phantomjs可以在windows.setTimeOut中指定。在呈现页面之前,为Ajax提供足够的延迟。
答案 2 :(得分:0)
答案 3 :(得分:0)
好的,经过大量的谷歌搜索,我找不到任何东西。所以我想出了两个hackish解决方案。
在用户正在查看的页面上,创建一个带有隐藏文本区域的表单,提交按钮被命名为“生成PDF”,在呈现页面后,我使用JavaScript获取div中的所有html想要并将它们放入文本区域。单击该按钮时,html将传递到服务器端,然后我使用python在本地创建一个html文件,并使用Phantomjs根据html文件创建PDF。
创建一个url呈现用户正在查看的完全相同的页面,但不需要用户登录。因此必须配置Apache或Nginx,以便本地主机只能访问url。所以Phantomjs可以毫无问题地访问网址并生成PDF。