HTML5到PDF服务器端

HTML5到PDF服务器端,html,pdf,css,printing,creation,Html,Pdf,Css,Printing,Creation,我正在寻找一种从HTML5/CSS3文档服务器端生成PDF的解决方案 我知道有很多方法可以创建PDF(比如FOP、iText…),但我需要确保它看起来与HTML页面100%相同。所以,我不想像FOP或iText那样逐个创建PDF元素 事实上,有些东西应该存在,因为当您从浏览器以PDF格式打印时,您就是这样做的。 理想情况下,解决方案应该嵌入一个web浏览器引擎(webkit或gecko)。我试过wkHtmlToPdf。。。但结果一点也不好(HTML5画布甚至没有打印出来…) 如果有人有任何解决方

我正在寻找一种从HTML5/CSS3文档服务器端生成PDF的解决方案

我知道有很多方法可以创建PDF(比如FOP、iText…),但我需要确保它看起来与HTML页面100%相同。所以,我不想像FOP或iText那样逐个创建PDF元素

事实上,有些东西应该存在,因为当您从浏览器以PDF格式打印时,您就是这样做的。 理想情况下,解决方案应该嵌入一个web浏览器引擎(webkit或gecko)。我试过wkHtmlToPdf。。。但结果一点也不好(HTML5画布甚至没有打印出来…)

如果有人有任何解决方案的想法,不管是否免费,任何语言。。。我会非常感激的!
谢谢

您在服务器端使用什么语言

创建页面截图,然后将图像转换为pdf可能会给你最好的结果。它将显示与浏览器呈现的页面完全相同的页面

有一些截图即服务工具,比如。看一下和


或者你可以使用你的工具。这是一个很好的项目。

取决于您可以使用的HTML的复杂性,这是一个由iText开发人员开发的项目,使用iText。

我使用PhantomJS从网页生成png图像,它也可以生成PDF,质量通常很好。该属性称为屏幕捕获并进行了描述。支持的格式有PNG、JPEG、GIF和PDF

转换为PDF时,页面的文本将保留为文本

在测试了其他几个库或程序后,发现PhantomJS是最完美的解决方案。PhantomJS使用WebKit,一个真正的布局和渲染引擎

这方面的例子很少。在“渲染/光栅化”一节中,提到了在该过程中帮助您的以下脚本:

rasterize.js rasterizes a web page to image or PDF
说:

可以生成PDF输出,例如从维基百科文章:

phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf
或在创建打印机就绪备忘单时:

phantomjs rasterize.js http://www.nihilogic.dk/labs/webgl_cheat_sheet/WebGL_Cheat_Sheet.htm webgl.pdf
我测试了几个页面的pdf生成,若页面符合标准,它会产生良好的结果。文本是可选择的,可以高质量打印,但在某些页面上,pdf格式的布局与png格式的布局并不完全相同。以下是使用命令生成的两个屏幕截图:

$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.png

$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.pdf 

我也做了测试。pdf和png非常相似,下面是一个pdf样本,我将其光栅化为5641px宽,并裁剪了一个区域。在前面的PDF示例中,文本在PDF中是可选择的,正如您所看到的,文本是尖锐的(没有反别名!)

安装

我首先尝试在Centos5上安装Qt库和PhantomJS,从源代码处编译,但没有成功。然后在Ubuntu11.10上,这个过程是无痛的:

我下载并使用

tar -xjvf phantomjs-1.7.0-linux-x86_64.tar.bz2
然后将phantomjs可执行文件复制到系统的bin dir:

$ cp phantomjs-1.7.0-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
phantomjs已经准备好运行了

如果生成的PDF不好,您可以尝试更新Webkit,但我认为结果应该足够了。PhantomJS有很好的更新周期,所以bug应该在合理的时间内修复


也有很好的可能性信息。

谢谢你的回答。我在服务器端使用Java,但我愿意在这一代PDF中使用其他东西。不幸的是,屏幕截图不是一个选项,因为生成的pdf对于专业打印机来说应该是一个真正的pdf(例如,文本应该是文本,而不是一些像素)。将图像转换为pdf是一个非常糟糕的主意-你会丢失所有文本,因此它不会很好地缩放,也不会被复制/粘贴或搜索。它还将使PDF文件比需要的大。如果您使用wkHtmlToPdf或phantomJs或普通浏览器的打印选项,文本将作为文本进入PDF,任何矢量图形也将作为矢量进入,以避免这些问题。为什么仍然关闭此选项??每一个问题都会引发比这更多的“征求辩论、争论、投票或扩展讨论”。wkhtml2pdf现在呈现画布。。。请参阅wkhtmltopdf.org。为wkhtml2pdf竖起大拇指。。。只有一个可执行文件而不是处理7000多个fop java类,这简直太棒了