Java PDF操作和呈现
Java PDF操作和呈现,java,pdf,pdf-generation,itext,Java,Pdf,Pdf Generation,Itext,我希望这个问题能够成为Java中PDF操作和渲染的全面指南。通过将多个开源库拼接在一起,我有一个相当全面的实现,我希望对其进行改进
背景
我的要求和目前的执行情况:
检查现有PDF文档的特定条件(PDF版本、密码保护、字体嵌入、交叉引用表等)-未实施
允许通过页面坐标或其他机制定义Acroform字段。-未实施
提供在PDF中迭代表单字段、检查字段类型并用数据填充的功能-
以不同分辨率/DPI将PDF呈现为图像-两种实现(PDFRender和)
将HTML/XHTML文件呈现为PDF格式-飞碟x
我希望这个问题能够成为Java中PDF操作和渲染的全面指南。通过将多个开源库拼接在一起,我有一个相当全面的实现,我希望对其进行改进
背景
我的要求和目前的执行情况:
检查现有PDF文档的特定条件(PDF版本、密码保护、字体嵌入、交叉引用表等)-未实施
允许通过页面坐标或其他机制定义Acroform字段。-未实施
提供在PDF中迭代表单字段、检查字段类型并用数据填充的功能-
以不同分辨率/DPI将PDF呈现为图像-两种实现(PDFRender和)
将HTML/XHTML文件呈现为PDF格式-飞碟xhtmlrenderer
在Java服务器环境中作为库执行上述所有操作(意味着线程安全)
我不喜欢什么
我对以下几点感到不满:
iText许可证:iText的新版本在AGPL许可证下,这对于我的项目(以及一般的商业项目?)来说是不可能的。商业许可证的费用是不小的(基于使用的价格从一个文档几美分到网站许可证的数万美元不等),如果我要支付软件的许可证费用,我想做一次最好产品的全面市场搜索。iText的2.x版本工作正常,但有足够的bug
PDF版本一致性:在这些库中的字体嵌入、交叉引用表等方面存在奇怪的一致性问题,会造成相当程度的痛苦
渲染输出质量:从这些文件渲染为PNG的质量在嵌入字体、图像和图层方面存在一些问题
我所希望的
我希望从用户和研究过PDF库的人那里得到一些反馈。为了完整和后代,请尽可能多地提供以下信息
- 你的回答/评论是基于使用还是基于研究
- 库的名称、版本和许可证(如果是商业许可证,请尽可能包括成本)
- 你用图书馆做什么
- 你喜欢它的什么/它有什么优点
- 你不喜欢它的什么/它对你有什么不好
- 你的总体印象是什么
只有当你真正从你使用的产品中赚钱时,iText才会让你花钱。大多数人都认为公平。你拿它和什么作比较
iText通过StackOverflow为非付费用户提供支持。以及对付费客户的高级支持。我们的BFO PDF库可以非常轻松地完成大部分工作-加载PDF并确定其属性、创建、迭代和填充表单字段以及将PDF呈现为位图都是标准的工作。从HTML或XHTML转换有点棘手,但我们有一个配套产品BFO Report Generator,它将使用与XHTML+CSS非常相似的XML语法来实现这一点
我不确定你所说的“PDF版本一致性”是什么意思——如果你有具体的问题,你可能想在这方面进行扩展,但否则我不会太在意PDF中的实际版本号——除了极少数例外,PDF功能非常向后和向前兼容(不了解新功能的读者通常会忽略它们)
将PDF光栅化为位图是一个棘手的问题——正确地做这件事意味着编写自己的字体和图像格式解析器(一项艰巨的工作:类型1字体需要PostScript解析器),并将PDF渲染模型的方形钉打到AWT模型的圆形孔中。这还取决于PDF创建软件是否正确完成工作。因此,无论您选择哪种软件,如果文件渲染不正确,请将其发送给支持团队-我们总是在为我们的收藏寻找麻烦的PDF
我们的网站有更多信息和一个可供下载的试用版,如果您想了解许可费用的信息,请给我们留言
干杯!Mike(CTO@BFO)还有一个ghostscript,可以在各种DPI中呈现pdf
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m -r300x300 -sOutputFile=page_%d.png doc.pdf
既然只允许2个链接,我想你把iText的定价列得有点高。当然是数千,但数万?@mark storer我所报的价格在一个典型的SaaS部署中使用了数万。公平地说,iText确实有基于使用情况的定价。我相应地更新了这个问题。我认为应该是这样的社区维基百科这个问题主要是基于观点的。唯一能让您100%兼容的是最新版本的Acrobat,它使用的PDF文件仅由最新版本的Acrobat创建,因为规范在许多方面都不明确。许多人仍在使用1.3版,所以只有在您需要最新版本时,您才真正需要最新版本最新功能。PDF版本一致性主要是围绕渲染器未正确处理1.5和1.6功能中的某些功能。忽略它们或尊重它们都是有效的处理方式-在意外功能上死亡不是:-)。e、 PDF渲染器阻塞了交叉引用表,这是一个长期存在的错误。