内容转文本)
一、引入依赖dependencygroupIdorg.apache.tika/groupIdartifactIdtika-parsers/artifactIdversion1.17/version/dependencydependencygroupIdorg.apache.poi/groupIdartifactIdpoi/artifactIdversion3.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{privateStringpageTagdiv;privateStringpageClasspage;privateintpageNumber0;privateMapInteger,StringBuilderpageMap;publicReadContentHandler(){super();pageMapnewHashMap();}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(length0pageNumber0){if(ch.length1ch[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{FileInputStreaminputnewFileInputStream(file);//可以写文件路径pdfwordhtml等BodyContentHandlertextHandlernewBodyContentHandler();//获取内容MetadatamatadatanewMetadata();//Metadata对象保存了作者标题等元数据AutoDetectParserparsernewAutoDetectParser();//当调用parserAutoDetectParser会自动估计文档MIME类型此处输入PDP文件因此可以使用PDFParserParseContextcontextnewParseContext();parser.parse(input,textHandler,matadata,context);//执行解析过程input.close();returnmatadata;}/** * 读取文件内容 * param file 支持txt/word/excle/pdf等多种格式 * return * throws TikaException * throws IOException */publicstaticStringparseText(Filefile)throwsTikaException,IOException{TikatikanewTika();returntika.parseToString(file);}/** * 按页读取文件内容 * param file 仅支持pdf * return * throws TikaException * throws IOException */publicstaticJSONArrayparsePageToPdf(Filefile)throwsException{JSONArrayjsonArraynewJSONArray();JSONObjectjsonObjectnull;ReadContentHandlerhandlernewReadContentHandler();MetadatametadatanewMetadata();FileInputStreaminputstreamnewFileInputStream(file);ParseContextpcontextnewParseContext();//parsing the document using PDF parserPDFParserpdfparsernewPDFParser();pdfparser.parse(inputstream,handler,metadata,pcontext);//getting the content of the document by pages.for(Map.EntryInteger,StringBuilderentry:handler.pageMap.entrySet()){jsonObjectnewJSONObject();jsonObject.put(page,entry.getKey());jsonObject.put(content,entry.getValue().toString());jsonArray.put(jsonObject);}returnjsonArray;}}parseText()文件转文本内容parsePageToPdf()pdf转按页文本内容