news 2026/8/27 12:48:40

【Tika】快速使用:文件(word/pdf)内容转文本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Tika】快速使用:文件(word/pdf)内容转文本

一、引入依赖

<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转按页文本内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 12:48:18

OpenBMC:GPIO 控制与状态建模

OpenBMC&#xff1a;GPIO 控制与状态建模 1. GPIO 在 OpenBMC 中的作用 BMC 通过 GPIO 获取硬件状态或控制外部设备。常见信号包括&#xff1a; 电源按键和复位按键Power Good电源模块、风扇和扩展板在位状态主机启动状态故障告警机箱入侵LED 控制芯片复位和使能 完整链路为&am…

作者头像 李华
网站建设 2026/8/27 12:47:21

选择困难症的面试官也就只能是我了

前言 首先声明&#xff0c;本人不是什么大牛&#xff0c;没有多牛逼的技术&#xff0c;只是公司扩招团队&#xff0c;然后我的那个面试官朋友有点破事没时间面试&#xff0c;就让我帮忙面试。我对面试这种事情本身自己就很讨厌&#xff0c;是的&#xff1b;我觉得没人会喜欢面试…

作者头像 李华
网站建设 2026/8/27 12:42:18

【单片机课设毕设项目】基于矩阵键盘输入的单片机蓝牙智能开锁装置设计 软硬件结合的单片机蓝牙密码门禁权限管理系统设计(025804)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/8/27 12:41:23

【单片机课程设计/毕业设计】基于 STM32/51 单片机的噪声实时检测与 LCD 显示系统设计 基于 STM32/51 单片机的可调阈值噪声声光预警设备设计(025704)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/8/27 12:40:57

最可怕的是,那些同级Android程序员比你还努力啊

前言 有人说这几年是计算机寒冬&#xff1b; 有人说金九银十没有了只剩下铜三铁四&#xff1b; 还有人是今年市场环境就是依托答辩&#xff1b;更多的人愁容满面担心被裁。 最近总能听到身边的程序员朋友离职的消息&#xff0c;有2&#xff0c;3年的初级程序员&#xff0c;也有…

作者头像 李华
网站建设 2026/8/27 12:40:46

openeuler22.09安装samba设置共享文件

openeuler22.09安装及配置SAMBA 共享 确认软件源是否安装成功 dnf search samba安装samba服务&#xff0c;及其相关组件 dnf -y install samba samba-common samba-client启动samba服务&#xff0c;并设置为开机启动 systemctl start smb; systemctl enable smb查看samba运行状…

作者头像 李华