2012-05-10 30 views
2

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

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

我也想过产生它的客户端,但由于现场的复杂性,可能会花费我很多天才能获得页面的适当代表(因为所有的定位值,需要重新计算到分) ,它必须是一个通用的解决方案。

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

+0

你在服务器上运行什么? –

+0

这是一个与MySQL的Apache,应用程序本身是纯粹的JavaScript写在ExtJs –

+1

啊,我在.Net上运行DynamicPDF和Aspose,但我不认为这对你有很大帮助。 –

回答

2

我已经看过几种工具来完成服务器端PDF生成。

有一个叫做Web SuperGoo的abcPDF(.net),我尝试过使用,但是我一直有问题,不能正常工作。

还有另外一种似乎可以更好地工作的称为iText的版本,可以在.net和Java版本中找到。根据您使用的版本,它可用于AGPL,LGPL和商业许可证。

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

+0

从我在过去两天能够学到的东西我得出同样的结论:/ –

1

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

+0

很酷的工具,但我的要求是从浏览器窗口中生成pdf –

+0

@mike_hornbeck PDFCreator可以通过通常的'File>打印......你的浏览器。但是,也许你的意思是通过**在网页中集成了一个按钮? –

+0

是的,抱歉,我不是很确切。强迫用户在服务器上安装东西是一回事,告诉他们安装第三方应用程序是一个完全不同的故事:/ –

1

POST如何使用Ajax将整个DOM绑定到服务器,并将其作为PDF (使用phantomjs),在JSON响应中发送服务器URL(和随机数)?然后,您可以创建一个下载链接或自动启动下载。这会起作用吗?

+0

我以前用两种不同的方法尝试过这种方式 - phantomjs服务器对POST请求进行监听,但是这种方法根本无法工作,并且没有真正的调试方法。然后我试过从PHP运行它:http://stackoverflow.com/questions/10651320/starting-phantomjs-server-from-php-and-waiting-for-its-response但这也失败了。现在我正在创建一个临时html页面vie php,使用phantomjs从它们生成pdf,最后将所有内容与pdftk合并。 –

相关问题