识别pdf格式发票信息
方案一:(会丢失文件内容排版格式)
import java.awt.Rectangle;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.PDFTextStripperByArea;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfDictionary;
import com.itextpdf.text.pdf.PdfName;
import com.itextpdf.text.pdf.PdfNumber;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfSmartCopy;
//传入文件所在路径即可 public static String readPDF(String filePath){ PDDocument helloDocument = null; String returnTag = ""; // 读文本内容 PDFTextStripper stripper; try { helloDocument=PDDocument.load(new File(filePath)); int pages = helloDocument.getNumberOfPages(); stripper = new PDFTextStripper(); // 设置按顺序输出 stripper.setSortByPosition(true); stripper.setStartPage(1); stripper.setEndPage(pages); String contText=stripper.getText(helloDocument).replaceAll(" ", ""); System.out.println("contText:"+contText);//发票内容 //利用正则 匹配需要验证的信息 Pattern pattern = Pattern.compile("发票号码[::]{1}[0-9]{8}"); Matcher matcher = pattern.matcher(contText); boolean find = matcher.find();//是否包含正则匹配内容 System.out.println("find:"+find); if(find){ returnTag=matcher.group();//与正则相匹配的内容 } helloDocument.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return returnTag; }
方案二:
其中所用jar包有:activation-1.1.1.jar jaxb-api-2.3.0.jar jaxb-core-2.3.0.jar jaxb-impl-2.3.0.jar Spire.Pdf.jar
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
public static void readPDF(String filePath){ //创建PdfDocument实例 PdfDocument doc = new PdfDocument(); //加载PDF文件 doc.loadFromFile("C:\\Users\\Gean_2016\\Desktop\\pdf\\1 (6).pdf"); String returnTag = ""; //创建StringBuilder实例 StringBuilder sb = new StringBuilder(); PdfPageBase page; //遍历PDF页面,获取每个页面的文本并添加到StringBuilder对象 for(int i= 0;i<doc.getPages().getCount();i++){ page = doc.getPages().get(i); sb.append(page.extractText(true)); } //已经获取到pdf文件内容 String contText = sb.toString(); //去除读取内容中的指顶符号字符 contText=contText.replaceAll(" ", ""); contText=contText.replaceAll("[\\t\\n\\r]", ""); contText = contText.replaceAll("[()()¥¥]", ""); System.out.println(contText); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律