一段比较浅显易懂的java识别pdf 文字及图片

使用pdfbox及orc进行pdf文件的文字及图片的识别

pom设置相关依赖

<!--pdf相关依赖开始-->
		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>pdfbox</artifactId>
			<version>2.0.1</version>
		</dependency>

		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>fontbox</artifactId>
			<version>2.0.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>jempbox</artifactId>
			<version>1.8.11</version>
		</dependency>

		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>xmpbox</artifactId>
			<version>2.0.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>preflight</artifactId>
			<version>2.0.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>pdfbox-tools</artifactId>
			<version>2.0.0</version>
		</dependency>
		<!--pdf相关依赖结束-->
		<!--orc识别图片文字信息开始 Tess4J是对Tesseract OCR API 的Java JNA 封装-->
		<!-- 使 java 能够通过调用 Tess4J 的 API 来使用 Tesseract OCR。支持的格式包括 TIFF、JPEG、GIF、PNG、BMP、JPEG、PDF -->
		<dependency>
			<groupId>net.sourceforge.tess4j</groupId>
			<artifactId>tess4j</artifactId>
			<version>3.4.8</version>
		</dependency>
		<!--orc识别图片文字信息结束-->

编写的测试类


import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import org.apache.pdfbox.cos.COSName;
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 org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;

/**
 * pdf 功能测试
 * @author 
 */
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = PdfTest.class)
public class PdfTest {
    @Test
    public void t() throws Exception {
        String dir = "D:\\s\\pdf\\20230202";
        //要读取的pdf文档位置
        String path = dir+"/s0131_中文_sE980F1C.pdf";
//        String path =dir+"/1.pdf";
        File file = new File(path);

                //加载pdf文件,创建PDDocument对象
        PDDocument document = PDDocument.load(file);
        //创建pdf文本获取对象PDFTextStripper
        PDFTextStripper pdfStripper = new PDFTextStripper();
        //获取pdf中所有信息,text中包含的就是当前pdf文档中所有信息
        String text = pdfStripper.getText(document);
        System.out.println(text);
        //读取pdf 图片信息
        PDImageXObject ximage = new PDImageXObject(document);
        PDPageTree pages = document.getPages();
       PDPage page = document.getPage(4);
        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();
                    execute(image);
                }
            }
        }

    }

    // 执行OCR识别
    private void execute(BufferedImage targetImage) {
        String tempImage = "D:\\s\\test.jpg";
        try {
            File tempFile = new File(tempImage);
            if (tempFile == null) {
                tempFile.mkdirs();
            }
            tempFile.mkdirs();
            ImageIO.write(targetImage, "jpg", tempFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        File file = new File(tempImage);

        ITesseract instance = new Tesseract();
        // 设置语言库位置
        instance.setDatapath("D:\\chamc\\ideaworkspace\\chamc-internalfund\\internalfund\\src\\main\\resources/data");
        // 设置语言,默认是英文(识别字母和数字),如果要识别中文(数字 + 中文),需要制定语言包
        instance.setLanguage("chi_sim");
        String result = null;
         try {

              result = instance.doOCR(file);
             System.out.println(result);
            } catch (Exception e) {
             e.printStackTrace();
          }



    }

    @Test
    public void tp() throws Exception{
        String tempImage = "D:\\华融\\内部资金\\23年1月份\\pdf\\20230202\\2.png";
        File file = new File(tempImage);

        ITesseract instance = new Tesseract();
        // 设置语言库位置
        instance.setDatapath("D:\\chamc\\ideaworkspace\\chamc-internalfund\\internalfund\\src\\main\\resources\\data\\");
        // 设置语言,默认是英文(识别字母和数字),如果要识别中文(数字 + 中文),需要制定语言包
        instance.setLanguage("chi_sim");
        String result = null;
        try {
            result = instance.doOCR(file);
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

运行可以得到pdf 的相关文字图片信息。

文字处理比较简单。

图片有些问题 如果图片在保存的时候修改了他的原本后缀则识别会提示与原先图片类型不符(比如原先的图片是png后缀改成jpg就识别不了);另识别出来的文字会有乱码和多余的一些符号。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "qt教程及软件(超级浅显易懂,非常适合初学者).pdf" 是一本超级浅显易懂的教程,适合初学者学习Qt软件开发。Qt是一种跨平台的应用程序开发框架,可以用于开发各种图形界面应用程序。这个教程会向读者介绍Qt的基础知识和使用方法。 教程的内容结构清晰,语言简明易懂,从零开始引导读者了解Qt的基本概念和原则,并提供了大量的示例代码和实践项目供读者练习。教程中的示例代码简单易懂,适合初学者理解,并且附带了详细的注释和解释,帮助读者理解代码的功能和实现原理。 教程还介绍了Qt的各种功能模块,如窗口布局、图形绘制、事件处理等,以及常用的Qt工具和库,如Qt Creator和Qt Widgets。读者可以通过这些模块和工具来开发自己的应用程序,并深入了解Qt的强大功能和灵活性。 除了教程内容,该文件还包含了Qt软件的安装包,读者可以根据教程的指导进行安装,并在学习过程中实际运行代码和构建应用程序。 总的来说,"qt教程及软件(超级浅显易懂,非常适合初学者).pdf" 是一本非常适合初学者的Qt教程,易于理解和上手。对于想要学习和掌握Qt软件开发的初学者来说,这本教程将是一个很好的起点。 ### 回答2: "qt教程及软件(超级浅显易懂,非常适合初学者).pdf"是一个非常适合初学者的Qt教程和软件资源的PDF文件。Qt是一个跨平台的应用程序开发框架,可以用于开发各种类型的应用程序,包括桌面、移动和嵌入式应用。 这个教程非常浅显易懂,适合初学者入门学习。它通过简单明了的语言和示例代码,详细介绍了Qt的各个方面,包括图形界面设计、信号和槽机制、界面布局、事件处理等。 此外,该PDF还提供了Qt软件资源,使初学者可以直接开始实际开发。软件资源包括Qt Creator集成开发环境和Qt框架的安装包。Qt Creator是一个功能强大的IDE,可帮助开发者编写、调试和测试Qt应用程序。Qt框架的安装包包含了Qt的核心库和工具,为开发者提供了丰富的功能和组件来构建自己的应用程序。 总的来说,这个教程及软件资源的PDF文件对于初学者来说非常有价值。通过学习这个教程,初学者可以快速掌握Qt的基本概念和技巧,并且可以立即使用提供的软件资源进行实际开发。无论是对于想要学习Qt的新手还是对于已经有一定经验的开发者,这个教程都是一个很好的学习和参考资源。 ### 回答3: 《QT教程及软件(超级浅显易懂,非常适合初学者).pdf》是一本专门面向初学者的QT教程和软件指南。QT是一种跨平台的应用程序开发框架,通过本教程可以帮助读者了解并掌握QT的基本知识和开发技巧。 本教程以浅显易懂的方式讲解QT的相关概念和原理,特别适合对程序开发没有任何经验的初学者。通过该教程,读者可以从零开始学习QT的基础知识,如窗口、控件、布局等,并且可以通过实际操作去运用所学知识创建自己的QT应用程序。 除了教程内容之外,本书还提供了相应的软件安装指南和使用说明。为了方便读者进行实践,配套的软件可以帮助读者快速安装和配置QT开发环境,并提供一系列示例代码供读者参考。 该教程的特点是通俗易懂,并且采用了大量的实例演示来帮助读者更好地理解和掌握所学内容。无论是学生、自学者还是对QT开发感兴趣的人群,都可以通过阅读该教程入门并提高自己的开发技能。 总而言之,《QT教程及软件(超级浅显易懂,非常适合初学者).pdf》是一本面向初学者的QT教程,通过浅显易懂的方式讲解了QT的基本知识和开发技巧,并提供了相应的软件安装和使用指南。读者可以通过该教程快速入门并提高自己的QT开发能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值