Java PDF 操作和渲染

标签 java pdf pdf-generation itext

我希望这个问题能成为用 Java 处理和呈现 PDF 的综合指南。通过将多个开源库拼接在一起,我有一个相当全面的实现,我想对其进行改进。

背景

我的要求和当前的实现:

  1. 检查现有 PDF 文档的特定条件(PDF 版本、密码保护、字体嵌入、交叉引用表等)- 未实现。
  2. 允许通过页面坐标或其他机制定义 Acroform 字段。 - 未实现
  3. 提供迭代 PDF 中的表单字段、检查字段类型并用数据填充它的功能 - iText v 2.0.8
  4. 以不同的分辨率/DPI 将 PDF 渲染为图像 - 两种实现方式(pdfrenderer 和 IcePDF)
  5. 将 HTML/XHTML 文件呈现为 PDF - Flying Saucer xhtmlrenderer
  6. 在 Java 服务器环境中以的方式完成上述所有工作(暗示线程安全)

我不喜欢什么

我对以下内容不满意:

  1. iText 许可:iText 的新版本在 AGPL 许可下,这对我的项目(以及一般的商业项目?)来说不是启动器。商业许可证的费用是不小的(从基于使用情况的文档几美分到站点许可证的数万美元),如果我要支付软件的许可证费用,我想做一个完整的市场搜索最好的产品。 iText 的 2.x 版本工作正常,但其中有足够多的错误。
  2. PDF 版本一致性:这些库中的字体嵌入、交叉引用表等方面存在奇怪的一致性问题,造成了一定程度的损失。
  3. 渲染输出质量:从这些文件渲染到 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/

相关文章:

java - 如何根据以下字符/单词匹配 URI 字符串的特定部分

java - Java 适合这个应用程序吗?

java - 需要sql语句支持搜索数据库,一直出现no database shown的错误提示

pdf - 向 pdf 添加条形码

file - 在哪里可以了解 pdf 文件的结构?

java - 用循环显示 Swing 组件

c++ - 是否有 C++ 库可以从 PDF 文件(如 Java 的 PDFBox)中提取文本?

java - 依次执行打印和保存作业

pdf - Grails:从外部位置渲染pdf

pdf - 将代码跟踪到 PDF 或 PostScript 文件中