【问题标题】:How to generate page running on server as a PDF如何将在服务器上运行的页面生成为 PDF
【发布时间】:2012-05-19 03:10:03
【问题描述】:

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

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

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

还有其他解决方法吗?

【问题讨论】:

  • 你在服务器上运行什么?
  • 它是一个带有mysql的apache,app本身是用ExtJs编写的纯javascript
  • 啊,我在 .Net 上运行 DynamicPDF 和 Aspose,但我认为这对你没有多大帮助。

标签: javascript html pdf pdf-generation phantomjs


【解决方案1】:

我查看了几种工具来完成服务器端 PDF 生成。

我尝试使用来自 Web SuperGoo 的一个名为 abcPDF (.net) 的文件,但我一直遇到无法正常工作的问题。

还有一个似乎工作得更好的称为 iText,在 .net 和 Java 版本中都可用。根据您使用的版本,它适用于 AGPL、LGPL 和商业许可证。

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

【讨论】:

  • 根据我在过去两天所学到的知识,我得出了同样的结论:/
【解决方案2】:

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

【讨论】:

  • 很酷的工具,但我的要求是从浏览器窗口生成pdf
  • @mike_hornbeck PDFCreator 可以通过浏览器的常用File > Print... 调用。但也许您的意思是通过一个集成在网页中的按钮?
  • 是的,抱歉我说的不准确。强迫用户在服务器上安装东西是一回事,告诉他们安装第三方应用程序是完全不同的故事:/
  • @mike_hornbeck 完全同意你的看法。很抱歉没有理解您的要求...
【解决方案3】:

POST使用 Ajax 将整个 DOM 发送到服务器,将其作为 PDF(使用 phantomjs)在那里渲染,在 JSON 响应中发回服务器 URL(和 nonce)怎么样?然后,您可以创建一个下载链接或自动启动下载。这行得通吗?

【讨论】:

  • 我之前尝试过两种不同的方法——phantomjs 服务器监听 POST 请求,但这根本不起作用,也没有真正的调试方法。然后我尝试从 php 运行它:stackoverflow.com/questions/10651320/… 但这也失败了。现在我正在创建一个临时 html 页面 vie php,使用 phantomjs 从它们生成 pdf,最后将所有内容与 pdftk 合并。
猜你喜欢
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多