pdfbox2.0.x版本如何获取PDF中的图片和字体?
各位前辈,我最近在做PDF的文本提取和分析。使用的是PDFBox这个工具。在这个工具1.0.8版本中,可以获取到图片,但是获取不到文本,代码如下:
public static void readPDF(String filename){
File file = new File(filename);
FileInputStream in = null;
try {
in = new FileInputStream(filename);
PDFParser parser = new PDFParser(in);
parser.parse();
PDDocument pdDocument = parser.getPDDocument();
PDFTextStripper stripper = new PDFTextStripper();
String result = stripper.getText(pdDocument);
System.out.println("PDF文件" + file.getAbsolutePath()+"内容如下:");
System.out.println(result);
} catch (IOException e) {
//e.printStackTrace();
}
}
在getText这一步,报错了,错误信息:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.fontbox.afm.AFMParser.parse()V
at org.apache.pdfbox.pdmodel.font.PDFont.addAdobeFontMetric(PDFont.java:146)
at org.apache.pdfbox.pdmodel.font.PDFont.getAdobeFontMetrics(PDFont.java:114)
at org.apache.pdfbox.pdmodel.font.PDFont.<clinit>(PDFont.java:106)
at org.apache.pdfbox.pdmodel.font.PDFontFactory.createFont(PDFontFactory.java:108)
at org.apache.pdfbox.pdmodel.PDResources.getFonts(PDResources.java:203)
at org.apache.pdfbox.util.PDFStreamEngine.getFonts(PDFStreamEngine.java:604)
at org.apache.pdfbox.util.operator.SetTextFont.process(SetTextFont.java:54)
at org.apache.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:554)
at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:268)
at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:235)
at org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:215)
at org.apache.pdfbox.util.PDFTextStripper.processPage(PDFTextStripper.java:455)
at org.apache.pdfbox.util.PDFTextStripper.processPages(PDFTextStripper.java:379)
at org.apache.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:335)
at org.apache.pdfbox.util.PDFTextStripper.getText(PDFTextStripper.java:254)
at edu.scut.testapi.pdf.PDFReader.readPDF(PDFReader.java:164)
at edu.scut.testapi.pdf.PDFReader.main(PDFReader.java:321)
打开源码发现,源码没有对应的parse()方法。把版本回退到任意1.0.X中,仍然报错。
在1.8.13版本中可以通过如下代码获取到PDF的图片:
//打开pdf文件流
FileInputStream fis = new FileInputStream(file);
//加载 pdf 文档,获取PDDocument文档对象
PDDocument document = PDDocument.load(fis);
/** 文档页面信息 **/
//获取PDDocumentCatalog文档目录对象
PDDocumentCatalog catalog = document.getDocumentCatalog();
//获取文档页面PDPage列表
List pages = catalog.getAllPages();
int count = 1;
int pageNum = pages.size(); //文档页数
//遍历每一页
for (int i = 0; i < pageNum; i++) {
//取得第i页
PDPage page = (PDPage) pages.get(i);
if (null != page) {
PDResources resource = page.findResources();
//获取页面图片信息
Map<String, PDXObjectImage> imgs = resource.getImages();
for (Map.Entry<String, PDXObjectImage> me : imgs.entrySet()) {
//System.out.println(me.getKey());
PDXObjectImage img = me.getValue();
//保存图片,会自动添加图片后缀类型
img.write2file(imgSavePath + count);
count++;
}
}
}
在2.0.8版本中,可以完美获取到文本。但是2.0.8版本中无法获取到图片,因为没有了PDXObjectImage这个类,改为了PDImageXObject这个类,并且网上没有相关的使用方法。
请问哪位前辈会使用PDFBox这个工具,我想提取PDF的文本以及对应的字体、PDF图片。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论