135

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

由于我习惯于在 Java 中工作,因此可以在 java 项目中轻松使用的解决方案是更可取的。不过,它只需要在 Windows 系统上工作。

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

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

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

你有想法吗?

4

8 回答 8

77

Flying Saucer XHTML 渲染器项目支持将 XHTML 输出为 PDF 。看看这里的一个例子。

于 2009-03-11T09:22:44.007 回答
52

你试过WKHTMLTOPDF吗?

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

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

编辑(2017):

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

于 2009-08-31T20:45:49.650 回答
47

查看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();
于 2009-03-11T09:32:24.267 回答
4

如果你有资金,没有什么比这个视频显示的Prince XML更好了

于 2009-03-11T09:17:10.277 回答
3

有没有办法从 Internet Explorer 渲染引擎中获取渲染页面并将其自动发送到 PDF-Printer 工具?

这就是ActivePDF 的工作方式,这很好意味着您知道您会得到什么,而且它实际上具有合理的样式支持。

它也是我发现的少数几个真正支持各种分页 CSS 命令的包之一(几年前)。


不幸的是,ActivePDF 软件非常令人沮丧——因为它必须在后台启动 IE 浏览器才能进行转换,它可能非常慢,而且也不是特别稳定。

目前有一个新版本在 Beta 中,它应该会更好,但我实际上没有机会尝试它,所以不知道它有多大的改进。

于 2009-03-11T09:47:05.713 回答
2

您可以使用带有扩展名的无头 Firefox。跑步很烦人,但确实会产生很好的效果。

查看此答案以获取更多信息。

于 2009-03-11T09:22:21.357 回答
0

如果您查看问题的侧栏,您会看到许多相关问题...

在您的上下文中,更简单的方法可能是安装 PDF 打印驱动程序(如PDFCreator)并将页面打印到此输出。

于 2009-03-11T09:34:18.443 回答
0

Amyuni WebkitPDF可以与 JNI 一起用于仅 Windows 的解决方案。这是一个 HTML 到 PDF/XAML 的转换库,可免费用于商业和非商业用途。

如果不立即需要输出文件,为了更好的可伸缩性,最好有一个队列和一些后台进程从那里获取项目,转换它们并存储在数据库或文件系统上。

通常的免责声明适用

于 2012-09-26T18:13:48.840 回答