一、引入依赖
<dependency><groupId>org.apache.tika</groupId><artifactId>tika-parsers</artifactId><version>1.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency>
二、实现工具类
packagecom.xiaobai.util;importorg.apache.tika.Tika;importorg.apache.tika.exception.TikaException;importorg.apache.tika.metadata.Metadata;importorg.apache.tika.parser.AutoDetectParser;importorg.apache.tika.parser.ParseContext;importorg.apache.tika.parser.pdf.PDFParser;importorg.apache.tika.sax.BodyContentHandler;importorg.apache.tika.sax.ToXMLContentHandler;importorg.json.JSONArray;importorg.json.JSONObject;importorg.xml.sax.Attributes;importorg.xml.sax.SAXException;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;/** * @Author xiaobai * @Date 2023/7/12 14:04 * @Title: PageContentHandler * @Package com.xiaobai.util * @description: */publicclassReadContentHandlerextendsToXMLContentHandler{privateStringpageTag="div";privateStringpageClass="page";privateintpageNumber=0;privateMap<Integer,StringBuilder>pageMap;publicReadContentHandler(){super();pageMap=newHashMap<>();}privatevoidstartPage(){pageNumber++;pageMap.put(pageNumber,newStringBuilder());}privatevoidendPage(){}@OverridepublicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesatts)throwsSAXException{if(pageTag.equals(qName)&&pageClass.equals(atts.getValue("class"))){startPage();}}@OverridepublicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{if(pageTag.equals(qName)){endPage();}}@Overridepublicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{if(length>0&&pageNumber>0){if(ch.length==1&&ch[0]=='\n'){return;}pageMap.get(pageNumber).append(ch);// pageMap.get(pageNumber).append('\n');}}/** * 文件基本信息 * @param file * @return * @throws IOException * @throws SAXException * @throws TikaException */publicstaticMetadatafileData(Filefile)throwsIOException,SAXException,TikaException{FileInputStreaminput=newFileInputStream(file);//可以写文件路径,pdf,word,html等BodyContentHandlertextHandler=newBodyContentHandler();//获取内容Metadatamatadata=newMetadata();//Metadata对象保存了作者,标题等元数据AutoDetectParserparser=newAutoDetectParser();//当调用parser,AutoDetectParser会自动估计文档MIME类型,此处输入PDP文件,因此可以使用PDFParserParseContextcontext=newParseContext();parser.parse(input,textHandler,matadata,context);//执行解析过程input.close();returnmatadata;}/** * 读取文件内容 * @param file 支持txt/word/excle/pdf等多种格式 * @return * @throws TikaException * @throws IOException */publicstaticStringparseText(Filefile)throwsTikaException,IOException{Tikatika=newTika();returntika.parseToString(file);}/** * 按页读取文件内容 * @param file 仅支持pdf * @return * @throws TikaException * @throws IOException */publicstaticJSONArrayparsePageToPdf(Filefile)throwsException{JSONArrayjsonArray=newJSONArray();JSONObjectjsonObject=null;ReadContentHandlerhandler=newReadContentHandler();Metadatametadata=newMetadata();FileInputStreaminputstream=newFileInputStream(file);ParseContextpcontext=newParseContext();//parsing the document using PDF parserPDFParserpdfparser=newPDFParser();pdfparser.parse(inputstream,handler,metadata,pcontext);//getting the content of the document by pages.for(Map.Entry<Integer,StringBuilder>entry:handler.pageMap.entrySet()){jsonObject=newJSONObject();jsonObject.put("page",entry.getKey());jsonObject.put("content",entry.getValue().toString());jsonArray.put(jsonObject);}returnjsonArray;}}
parseText()文件转文本内容
parsePageToPdf()pdf转按页文本内容