当前位置:  开发笔记 > 编程语言 > 正文

将HTML文件转换为PDF

如何解决《将HTML文件转换为PDF》经验,为你挑选了3个好方法。

我需要从现有的(X)HTML文档自动生成PDF文件.输入文件(报告)使用相当简单的基于表格的布局,因此可能不需要支持真正花哨的JavaScript/CSS内容.

由于我习惯于使用Java,因此最好能够在java项目中轻松使用.但它只需要在Windows系统上工作.

一种方法是可行的,但不能产生高质量的输出(至少开箱即用)是使用CSS2XSLFO和Apache FOP来创建PDF文件.我遇到的问题是,虽然很好地转换了CSS属性,但表格布局非常混乱,文本流出表格单元格.

我还快速浏览了Jrex,这是一个使用Gecko渲染引擎的Java-API.

有没有办法从Internet Explorer渲染引擎中获取渲染页面并自动将其发送到PDF-Printer工具?我没有windows中的OLE编程经验,所以我不知道什么是可能的,什么不是.

你有好主意吗?

编辑:FlyingSaucer/iText看起来很有前途.我会尽力去做.

感谢所有的答案



1> Mark..:

该飞碟 XHTML渲染项目具有输出XHTML到PDF的支持.看看这里的一个例子.


fly sauser的真正问题在于它使用itext来呈现PDF,这是一个AGPL v3许可的lib
Flying Saucer使用的itext版本是2.0.8,可在LGPL下获得.只有版本号为5或更高的版本才具有更严格的许可证.http://stackoverflow.com/questions/2692000/can-i-use-a-previous-version-of-itextsharp-under-the-lgpl
我想说Flying Flying的真正问题在于它需要一个结构良好且有效的XML文档.通过在HTML中包含诸如&符号之类的内容,或者使您呈现的HTML不严格XHTML的一些javascript代码,很容易在不知不觉中破坏PDF呈现.虽然这可以通过自动化测试或涉及XML验证的某些过程来缓解.
@LateralFractal据我所知,Flying Saucer 9.0.8(最新版本,我认为)使用iText 2.1.7,这是最后一个具有许可许可证的iText版本--- LGPL.http://mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-pdf/9.0.8
@JonathanCrosmer是的.有两个用于PDF的FlyingSaucer软件包,一个用于iText v2,另一个用于iText v5.假设两者具有相同的功能; AGPL风险可以是侧面步骤.

2> Mic..:

你尝试过WKHTMLTOPDF吗?

它是一个简单的shell实用程序,是WebKit的开源实现.两者都是免费的.

我们在这里设置了一个小教程

编辑(2017):

如果今天要建造一些东西,我就不会再去那条路了.
但是请改用http://pdfkit.org/.
可能会剥夺其所有nodejs依赖项,以便在浏览器中运行.


对于直接的html-page-to-pdf转换,这比我见过的任何其他内容,免费或商业更好.

3> fred-o..:

看看iText ; 它是一个纯Java PDF工具包,支持从HTML读取数据.我最近在一个项目中使用它,当我需要从CMS中提取内容并导出为PDF文件时,这一切都非常简单.对CSS和样式标记的支持非常有限,但它确实呈现表没有任何问题(我从未设法设置列宽).

从HTML创建PDF是这样的:

Document doc = new Document(PageSize.A4);
PdfWriter.getInstance(doc, out);
doc.open();
HTMLWorker hw = new HTMLWorker(doc);
hw.parse(new StringReader(html));
doc.close();


@Eran,只需使用最后一个非AGPL版本(com.lowagie:在Maven中使用itext:2.1.7).
它是AGPL,似乎比GPL更糟糕,即使您只是提供PDF而iText是服务器端,您也需要是开源的.
推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有