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

Javascript 如何生成在服务器上以PDF格式运行的页面,javascript,html,pdf,pdf-generation,phantomjs,Javascript,Html,Pdf,Pdf Generation,Phantomjs,这项任务并不容易,因为我需要在单击按钮后创建一个PDF版本的页面。它有一个复杂的dom结构,有许多元素是绝对/相对定位的,数据是动态加载的。我曾考虑使用Phantom.js服务器来完成这项任务,因为它可以生成PDF,但这会带来一些问题 phantomjs可以从控制台运行(此处不可能,因为生成PDF必须在UNIX和WIN系统上都可用,并且只能从页面运行shell脚本),也可以使用内置服务器 服务器与运行页面的服务器具有不同的域,因此可能会出现同源策略问题。我曾考虑使用带有phantomjs服务器

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

  • phantomjs可以从控制台运行(此处不可能,因为生成PDF必须在UNIX和WIN系统上都可用,并且只能从页面运行shell脚本),也可以使用内置服务器
  • 服务器与运行页面的服务器具有不同的域,因此可能会出现同源策略问题。我曾考虑使用带有phantomjs服务器地址的iframe作为src和我的页面html传入的参数,但参数太长,返回413错误。JSONP将不起作用,因为它是为GET请求构建的,同样的问题也会出现,参数太长
我还考虑在客户端生成它,但由于网站的复杂性,我可能需要很多天才能获得页面的正确表示(因为所有定位值都需要重新计算到pts),而且它必须是一个通用解决方案


还有其他解决方法吗?

我已经介绍了几种用于生成服务器端PDF的工具

有一个叫abcPDF(.net)的来自websupergoo的工具,我试着用它,但我一直都有问题,它不能工作

还有一个似乎工作得更好的工具叫做iText,可以在.net和Java版本中使用。根据您使用的版本,它可以与AGPL、LGPL和商业许可证一起使用


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

我已经介绍了几种用于生成服务器端PDF的工具

有一个叫abcPDF(.net)的来自websupergoo的工具,我试着用它,但我一直都有问题,它不能工作

还有一个似乎工作得更好的工具叫做iText,可以在.net和Java版本中使用。根据您使用的版本,它可以与AGPL、LGPL和商业许可证一起使用



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

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

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

如何使用Ajax将整个DOM发布到服务器上,将其呈现为PDF格式(使用phantomjs),并在JSON响应中发回服务器URL(和nonce)?然后,您可以创建一个下载链接或自动启动下载。这行吗?

如何
使用Ajax将整个DOM发布到服务器,将其呈现为PDF格式(使用phantomjs),并在JSON响应中发送回服务器URL(和nonce)?然后,您可以创建一个下载链接或自动启动下载。这行得通吗?

根据我在过去两天学到的知识,我得出了相同的结论:/根据我在过去两天学到的知识,我得出了相同的结论:/你在服务器上运行的是什么?这是一个带有mysql的apache,应用程序本身是用ExtJsAh编写的纯javascript,我在.Net上运行DynamicPDF和Aspose,但我认为这对你没有多大帮助。你在服务器上运行什么?它是一个带有mysql的apache,应用程序本身是用ExtJsAh编写的纯javascript,我在.Net上运行DynamicPDF和Aspose,但我认为这对你没有多大帮助。很酷的工具,但我的要求是从浏览器生成pdfwindow@mike_hornbeckPDFCreator可以通过浏览器的常规
文件>打印…
调用。但也许你的意思是通过网页中集成的按钮?是的,对不起,我不准确。强迫用户在服务器上安装东西是一回事,告诉他们安装第三方应用程序则是另一回事:/@mike_hornbeck完全同意你的观点。很抱歉不理解您的要求…很酷的工具,但我的要求是从浏览器生成pdfwindow@mike_hornbeckPDFCreator可以通过浏览器的常规
文件>打印…
调用。但也许你的意思是通过网页中集成的按钮?是的,对不起,我不准确。强迫用户在服务器上安装东西是一回事,告诉他们安装第三方应用程序则是另一回事:/@mike_hornbeck完全同意你的观点。很抱歉,我没有理解您的需求…我以前尝试过两种不同的方法-phantomjs服务器侦听POST请求,但这根本不起作用,也没有真正的调试方法。然后我试着从php运行它:但这也失败了。现在,我正在创建一个临时html页面vie php,使用phantomjs从中生成pdf,最后使用pdftk合并所有内容。我以前尝试过两种不同的方法-phantomjs服务器侦听POST请求,但这根本不起作用,也没有真正的调试方法。然后我试着从php运行它:但这也失败了。现在,我正在创建一个临时html页面vie php,用phantomjs从中生成pdf,最后用pdftk合并所有内容。