JAVA实现使用PdfBox读取PDF的文本信息和图片信息
【摘要】 针对某些特殊情况,需要从pdf中获取指定的数据,便于进行数据的计算。本次主要介绍如何使用pdfbox获取文本内容和图片内容。1.依赖<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.24</version></dependency><d...
针对某些特殊情况,需要从pdf中获取指定的数据,便于进行数据的计算。本次主要介绍如何使用pdfbox获取文本内容和图片内容。
1.依赖
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.24</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.24</version>
</dependency>
2.代码实现
代码仅做演示,代码规范,细节自行调整
package com.example.pdf.util;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.UUID;
import javax.imageio.ImageIO;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.text.PDFTextStripper;
public class PdfboxReadTextAndImage {
public static void main(String[] args) {
readTextAndImage();
}
/**
* 读取pdf的文本内容和图片内容
*/
public static void readTextAndImage() {
String path = "D:\\temp\\PdfboxReadTextAndImage\\readPdfTemp.pdf";
File file = new File(path);
// 尽可能使用try-with-resource代替try-catch-finally
try (PDDocument document = PDDocument.load(file)) {
int pageSize = document.getNumberOfPages();
// 一页一页读取
for (int i = 0; i < pageSize; i++) {
// 文本内容
PDFTextStripper stripper = new PDFTextStripper();
// 设置按顺序输出
stripper.setSortByPosition(true);
stripper.setStartPage(i + 1);
stripper.setEndPage(i + 1);
String text = stripper.getText(document);
System.out.println(text.trim());
System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-");
// 图片内容
PDPage page = document.getPage(i);
PDResources resources = page.getResources();
Iterable<COSName> cosNames = resources.getXObjectNames();
if (cosNames != null) {
Iterator<COSName> cosNamesIter = cosNames.iterator();
while (cosNamesIter.hasNext()) {
COSName cosName = cosNamesIter.next();
if (resources.isImageXObject(cosName)) {
PDImageXObject Ipdmage = (PDImageXObject) resources.getXObject(cosName);
BufferedImage image = Ipdmage.getImage();
try (FileOutputStream out = new FileOutputStream(
"D:\\temp\\PdfboxReadTextAndImage\\" + UUID.randomUUID() + ".png")) {
ImageIO.write(image, "png", out);
} catch (IOException e) {
}
}
}
}
}
} catch (InvalidPasswordException e) {
} catch (IOException e) {
}
}
}
3.效果展示
读取的pdf
读取后内容及图片:
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)