用于将现有PDF转换为PDF / A的免费Java库

时间:2010-03-17 11:39:49

标签: java pdf pdfa jodconverter

我正在尝试将PDF转换为PDF / A. 目前,我可以使用OpenOffice pdf viewer pluginJodconverter 2一起执行此操作。但这样做非常麻烦。

有没有人知道我可以使用的任何开源/免费Java库?

到目前为止,我找到了这些开源库,但没有一个支持将PDF转换为PDF / A

iText
gnujpdf
PDF Box
FOP
JFreeReport
PJX
JPedal
PDFjet
jPod
PDF Renderer

更新

似乎Apache FOP能够将文档(不是PDF文档)转换为PDF / A

5 个答案:

答案 0 :(得分:14)

从PDF转换为PDF / A

这是您最初提到的问题的答案。

对于一个不涉及潜在有损重新渲染的解决方案,请看一下http://www.opensubscriber.com/message/itext-questions@lists.sourceforge.net/8027900.html,看来Foris Zoltan能够得到一些东西(并非详尽无遗,但可能已经足够对于大多数PDF来说,使用iText而不会重新渲染。

如果Zoltan的解决方案根据您的要求不可接受/足够,那么您将无法重新渲染。您可以坚持使用OpenOffice / JODConverter ,或者通过优先使用GhostScript (所有人的母亲)来减少开销,将pdf2ps重新加入{{3 }}

Apache FOP

其他受访者建议使用Apache FOP,其中在PDF到PDF / A转换的背景下具有以下优点和缺点:

  • 优势比OpenOffice / JODCOnverter组合更少“移动部件”(例如,将进程内FOP与守护OO进行比较)
  • 缺点:您负责将PDF转换为PDF/A-enabled 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库。在可转换的文档类型的第一版中存在一些限制。