我正在尝试将PDF转换为PDF / A. 目前,我可以使用OpenOffice pdf viewer plugin和Jodconverter 2一起执行此操作。但这样做非常麻烦。
有没有人知道我可以使用的任何开源/免费Java库?
到目前为止,我找到了这些开源库,但没有一个支持将PDF转换为PDF / A
iText
gnujpdf
PDF Box
FOP
JFreeReport
PJX
JPedal
PDFjet
jPod
PDF Renderer
更新
似乎Apache FOP能够将文档(不是PDF文档)转换为PDF / A
答案 0 :(得分:14)
这是您最初提到的问题的答案。
对于一个不涉及潜在有损重新渲染的解决方案,请看一下http://www.opensubscriber.com/message/itext-questions@lists.sourceforge.net/8027900.html,看来Foris Zoltan能够得到一些东西(并非详尽无遗,但可能已经足够对于大多数PDF来说,使用iText而不会重新渲染。
如果Zoltan的解决方案根据您的要求不可接受/足够,那么您将无法重新渲染。您可以坚持使用OpenOffice / JODConverter ,或者通过优先使用GhostScript (所有人的母亲)来减少开销,将pdf2ps
重新加入{{3 }}
其他受访者建议使用Apache FOP,其中在PDF到PDF / A转换的背景下具有以下优点和缺点:
ps2pdf
或以其他方式呈现给FOP(需要更多编码和/或集成工作),而OpenOffice / JODCOnverter和Ghostscript可能需要更少的额外编码。但是,如果我没有弄错的话,你似乎使用PDF作为中间格式,即你想要实现的是 XHTML到PDF到PDF / A的转换即可。通过直接从XHTML转换为PDF / A,过程将更快,将使用更少的资源(例如内存),并且不会不必要地降低输出质量(如重新渲染解决方案所能)或需要对PDF格式的深入了解(作为Zoltan的解决方案)一样。)
在这种情况下,直接从XHTML转换为PDF / A 将是一个理想的解决方案, XSL-FO (该示例使用iTextSharp,.Net) iText的端口,但是对于Java来说是相同的,或者像其他人所建议的那样使用Apache FOP(在输出到PDF时也会在内部使用iText,虽然它比直接使用iText更加臃肿,设置效率低且复杂,但它可能产生比iText示例更好的结果 - 只有一种方法可以解决这个问题,即您必须在一些XHTML文件上尝试将其作为样本。:))
答案 1 :(得分:6)
Seam PDF只是为使用Seam的项目提供便利。没有什么可以阻止你使用Apache FOP和Seam生成PDF文件。
我个人使用Apache FOP在Web应用程序中生成PDF / A文件,它工作正常。正如Liggy已经给出的链接所说,它就像
一样简单userAgent.getRendererOptions()。把( “PDF的一个模式”, “PDF / A-1B”);
所以我的建议是直接使用Apache FOP而不是处理转换(也有性能问题)
<强>更新强>
Apache FOP网站包含有关如何通过Java代码使用它的示例列表。 http://xmlgraphics.apache.org/fop/0.95/embedding.html
这是一个将XML转换为PDF的minimal command line应用程序
另一种专门处理XHTML(而不仅仅是XML)的方法是使用Antenna的xhtml2fo样式表。
这是一个例子: http://blog.platinumsolutions.com/node/216
只需在创建“FOP”对象之前添加以下两行,就可以了。
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
foUserAgent.getRendererOptions().put("pdf-a-mode","PDF/A-1b");
答案 2 :(得分:1)
您在API列表中提到了Apache FOP,但是从这个页面 - http://xmlgraphics.apache.org/fop/trunk/pdfa.html它提到 对PDF / A的一些支持:
PDF / A-1b的实施程度是FOP支持创建ISO 19005-1中描述的元素。
PDF / A-1a基于PDF-A-1b并增加了辅助功能(如标记PDF)。此格式在“辅助功能”页面中描述的限制范围内可用。
没有特别提及PDF到PDF / A的任何内容,但它可能是一个开源替代品。
答案 3 :(得分:0)
有一个在gitHub pdf2htmlEX中托管的项目值得一看。它的开源是用C ++编写的。
答案 4 :(得分:0)
我们刚刚发布了jPDFPreflight,一个可以将PDF文件转换为PDF / A的Java库。在可转换的文档类型的第一版中存在一些限制。