如何在服务器上生成以PDF格式运行的页面

时间:2012-05-10 14:09:35

标签: javascript html pdf pdf-generation phantomjs

这项任务并不容易,因为我需要在点击按钮后创建页面的PDF版本。它具有复杂的dom结构,许多元素绝对/相对定位,并且数据是动态加载的。我考虑过使用Phantom.js服务器执行此任务,因为它可以生成PDF,但这会带来一些问题;

  • phantomjs可以从控制台运行(这里不可能,因为生成的PDF必须在UNIX和WIN系统上都可用,并且只能从页面运行shell脚本)或使用它的内置服务器
  • 服务器具有与运行页面的服务器不同的域,因此相同的原始策略问题是相同的。我正在考虑使用iframe和phantomjs服务器地址作为src和我的页面html在参数中传递,但参数太长并返回413错误。 JSONP不起作用,因为它是为GET请求而构建的,并且出现了太长参数的相同问题。

我还想过在客户端生成它,但由于网站的复杂性,我可能需要很多天才能正确表示页面(因为所有的定位值都需要重新计算到pts),并且它必须是一个通用的解决方案。

任何其他想法如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

我已经研究了几种实现服务器端PDF生成的工具。

有一个名为abcPDF(.net)来自我试图使用的Web SuperGoo,但我一直有问题,它没有工作。

还有另外一个似乎更好的称为iText,可用于.net和Java版本。根据您使用的版本,可以使用AGPL,LGPL和商业许可证。

我希望我能以不同的方式告诉您,但我不知道有什么方法可以轻松地从HTML转换为PDF。这些库中的每一个都有一个API,您必须编写该API以描述文档的外观。

答案 1 :(得分:1)

使用PDF打印机怎么样?根据您的系统,可能有内置的PDF打印机,或者如果使用Windows,您可以查看PDFCreator

答案 2 :(得分:1)

使用Ajax {{1}将整个DOM发送到服务器,将其作为PDF(使用phantomjs)转发,在JSON响应中发回服务器URL(和nonce)怎么样?然后,您可以创建下载链接或自动启动下载。那会有用吗?