我希望这个问题能成为用 Java 处理和呈现 PDF 的综合指南。通过将多个开源库拼接在一起,我有一个相当全面的实现,我想对其进行改进。
背景
我的要求和当前的实现:
- 检查现有 PDF 文档的特定条件(PDF 版本、密码保护、字体嵌入、交叉引用表等)- 未实现。
- 允许通过页面坐标或其他机制定义 Acroform 字段。 - 未实现
- 提供迭代 PDF 中的表单字段、检查字段类型并用数据填充它的功能 - iText v 2.0.8
- 以不同的分辨率/DPI 将 PDF 渲染为图像 - 两种实现方式(pdfrenderer 和 IcePDF)
- 将 HTML/XHTML 文件呈现为 PDF - Flying Saucer xhtmlrenderer
- 在 Java 服务器环境中以库的方式完成上述所有工作(暗示线程安全)
我不喜欢什么
我对以下内容不满意:
- iText 许可:iText 的新版本在 AGPL 许可下,这对我的项目(以及一般的商业项目?)来说不是启动器。商业许可证的费用是不小的(从基于使用情况的文档几美分到站点许可证的数万美元),如果我要支付软件的许可证费用,我想做一个完整的市场搜索最好的产品。 iText 的 2.x 版本工作正常,但其中有足够多的错误。
- PDF 版本一致性:这些库中的字体嵌入、交叉引用表等方面存在奇怪的一致性问题,造成了一定程度的损失。
- 渲染输出质量:从这些文件渲染到 PNG 的质量在嵌入字体、图像和图层方面存在一些问题。
我所希望的
我希望从用户和研究过 PDF 库的人那里得到一些反馈。为了完整性和后代,请尽可能多地包含以下信息。
- 您的回答/评论是基于使用或研究
- 名称、库版本和许可证(如果是商业许可证,请尽可能包含费用)
- 你用图书馆做什么
- 你喜欢它的什么地方/它有什么好处
- 你不喜欢它的什么地方/它有什么不好的地方
- 您的总体印象如何
最佳答案
我们的 BFO PDF 库位于 http://bfo.com可以很容易地完成大部分工作——加载 PDF 并确定其属性、创建、迭代和填充表单字段以及将 PDF 渲染为位图都是标准的东西。从 HTML 或 XHTML 转换有点棘手,但我们有一个配套产品 BFO 报告生成器,它将使用与 XHTML+CSS 非常相似的 XML 语法来完成此操作。
我不确定您所说的“PDF 版本一致性”是什么意思 - 如果您遇到特定问题,您可能想对此进行扩展,否则我不会太在意 PDF 中的实际版本号- 除了极少数异常(exception),PDF 功能几乎是向后和向前兼容的(较新的功能通常会被不理解它们的读者忽略)。
将 PDF 光栅化为位图是一大堆问题 - 正确地完成它意味着编写您自己的字体和图像格式解析器(一项艰巨的工作:Type 1 字体需要 PostScript 解析器),并击败 PDF 渲染的方钉模型放入圆孔即为AWT模型。它还取决于 PDF 创建软件能否正确完成这项工作。因此,无论您使用哪种软件,如果文件无法正确呈现,请将其通过电子邮件发送给支持团队 - 我们总是在为我们的 Collection 寻找麻烦的 PDF。
我们的网站有更多信息和可供下载的试用版,如果您需要有关许可费用的信息,请给我们留言。
干杯......迈克(CTO @ BFO)
关于Java PDF 操作和渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4962371/