如何使用Java(而非pdfbox)从pdf中提取图像

7
我一直在研究如何从一个大于300MB的PDF文件中提取图像。我正在使用pdfbox,但由于某些特定原因,我无法弄清楚其中的问题,有些页面无法正确提取。
我正在使用pdfbox的PDFToImage类作为我的代码基础。
所以,你知道其他可能帮助我完成此操作的库吗?我知道可以使用iText,但我读到它不能用于商业产品。
我已经安装了xpdf和xpdf-utils包,并且名为pdfimages的实用程序运行得很完美。但我需要从Java解决这个问题,并且它应该是可移植的。

你可以将xpdf-utils移植到Java。 - erjiang
1
iText在未购买商业许可证的情况下属于GPL。 - Thorbjørn Ravn Andersen
我会尝试使用版本小于5的软件,因为我认为许可条款的更改是从版本大于等于5开始的。 - Claudio Acciaresi
那些没有正确提取出来的图片出了什么问题? - Mark Storer
在两个特定的页面中,由不同嵌入式图像组成,每个页面的输出都是错误的...很难描述...不同的嵌入式图像是字母,最终页面之间有像字母之间的空洞。 - Claudio Acciaresi
3个回答

7
我认为你在谈论两件不同的事情:从PDF提取图像和将PDF页面转换为图像。 PDFToImage 将输出每个页面的一个图像,而pdfimages则提取所有嵌入的图像(例如文本文档没有图像)。请查看org.apache.pdfbox.tools.ExtractImages (源代码),看看它是否符合您的要求。

是的,你说得对,我正在尝试将PDF页面转换为图像,而不是提取所有嵌入的图像。问题在于,在这种特殊情况下,我使用的PDF每页只有一张图片。抱歉造成了误解。我也尝试了ExtractImages,但没有成功。 - Claudio Acciaresi
我最终使用了pdfbox,问题在于pdfbox无法正确提取带有未识别字体或CMYK色彩空间的PDF图像。对于没有这些问题的PDF,该库运行良好。 - Claudio Acciaresi

0
最有可能的原因是处理300 Mb的PDF时内存不足。如果对于较小的PDF文件可以正常工作,那么应该仔细检查为什么会失败。

0

你尝试过 icepdf 或者 JPedal 吗?它们都是纯Java的。


不,我没有。我可以在商业产品中使用它们中的任何一个吗? - Claudio Acciaresi
它们都有LGPL和商业版本。您可以在商业产品中使用任何一个。 - mark stephens
我已经测试了Icepdf,页面可以正确提取,但现在出现了字体问题:(。我正在使用这个作为指南:http://wiki.icefaces.org/display/PDF/Converting+PDF+Page+Renderings - Claudio Acciaresi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接