java代码实现对pdf文件文本和图片内容的提取
Posted 洛阳泰山
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java代码实现对pdf文件文本和图片内容的提取相关的知识,希望对你有一定的参考价值。
教程
pom文件引入jar依赖
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>3.0.0-RC1</version>
</dependency>
<dependency>
<groupId>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-jpeg2000</artifactId>
<version>1.3.0</version>
</dependency>
java核心代码实现
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.text.PDFTextStripper;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Iterator;
public class PDFUtil {
public static void main(String[] args) throws IOException {
//提取图片
extractImages("C:\\\\Users\\\\liuya\\\\Desktop\\\\word\\\\帆软报表帮助文档.pdf");
//提取文字
extractText("C:\\\\Users\\\\liuya\\\\Desktop\\\\word\\\\帆软报表帮助文档.pdf");
}
/**
* 提取文本
* @return
*/
public static void extractText(String path){
try {
File fdf = new File(path);
//通过文件名加载文档
PDDocument pdd = Loader.loadPDF(fdf);
//获取文档的页数
int pageNumber = pdd.getNumberOfPages();
//剥离器(读取pdf文件)
PDFTextStripper stripper = new PDFTextStripper();
//排序
stripper.setSortByPosition(true);
//设置要读取的起始页码
stripper.setStartPage(1);
//设置要读取的结束页码
stripper.setEndPage(pageNumber);
// System.out.println(stripper.getText(pdd));
//生成的txt的文件路径
String docPath =path.substring(0,path.lastIndexOf("."))+".txt";
File doc = new File(docPath);
if(!doc.exists()){
doc.createNewFile();
}
//文件输出流
FileOutputStream fos = new FileOutputStream(doc);
Writer writer = new OutputStreamWriter(fos, "utf-8");
stripper.writeText(pdd, writer);
writer.close();
fos.close();
System.out.println("提取文本完成");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 提取图片
* @return
*/
public static boolean extractImages(String path) {
boolean result = true;
try{
File fdf = new File(path);
//通过文件名加载文档
PDDocument document = Loader.loadPDF(fdf);
PDPageTree pages = document.getPages();
Iterator<PDPage> iter = pages.iterator();
//生成的txt的文件路径
String imagePath =path.substring(0,path.lastIndexOf("."));
while(iter.hasNext()){
PDPage page = iter.next();
PDResources resources =page.getResources();
resources.getXObjectNames().forEach(e->{
try {
if(resources.isImageXObject(e)){
PDImageXObject imageXObject=(PDImageXObject)resources.getXObject(e);
BufferedImage bufferedImage= imageXObject.getImage();
System.out.println(bufferedImage);
ImageIO.write(bufferedImage,"jpg",new File(imagePath+"_"+e+".jpg"));
}
} catch (IOException ioException) {
ioException.printStackTrace();
}
});
System.out.println("----------------------------------------------");
}
System.out.println("提取图片完成");
// document.save(fdf);
document.close();
} catch(IOException ex){
ex.printStackTrace();
return false;
}
return result;
}
}
idea控制台运行输出
提取文件和原pdf文件在同一文件夹下
原pdf内容部分展示
提取文本展示
提取图片展示
相关文章推荐
JAVA实现PDF合并、拆分代码工具类https://blog.csdn.net/weixin_40986713/article/details/120065363
如果有想要看的相关技术实现的文章,请在评论区留言,博主尽量满足!!!
以上是关于java代码实现对pdf文件文本和图片内容的提取的主要内容,如果未能解决你的问题,请参考以下文章
java中使用pdfbox对pdf文件进行操作时,如何实现插入文本的自动换行操作?