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

这篇具有很好参考价值的文章主要介绍了【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>

二、实现工具类

package com.xiaobai.util;

import org.apache.tika.Tika;
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.pdf.PDFParser;
import org.apache.tika.sax.BodyContentHandler;
import org.apache.tika.sax.ToXMLContentHandler;
import org.json.JSONArray;
import org.json.JSONObject;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author xiaobai
 * @Date 2023/7/12 14:04
 * @Title: PageContentHandler
 * @Package com.xiaobai.util
 * @description:
 */
public class ReadContentHandler extends ToXMLContentHandler {
    private String pageTag = "div";
    private String pageClass = "page";
    private int pageNumber = 0;

    private Map<Integer,StringBuilder> pageMap;

    public ReadContentHandler(){
        super();
        pageMap = new HashMap<>();
    }

    private void startPage() {
        pageNumber++;
        pageMap.put(pageNumber,new StringBuilder());
    }

    private void endPage() {
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
        if(pageTag.equals(qName) && pageClass.equals(atts.getValue("class"))){
            startPage();
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if(pageTag.equals(qName)){
            endPage();
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        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
     */
    public static Metadata fileData(File file) throws IOException, SAXException, TikaException {
        FileInputStream input=new FileInputStream(file);//可以写文件路径,pdf,word,html等
        BodyContentHandler textHandler=new BodyContentHandler();//获取内容
        Metadata matadata=new Metadata();//Metadata对象保存了作者,标题等元数据
        AutoDetectParser parser = new AutoDetectParser();//当调用parser,AutoDetectParser会自动估计文档MIME类型,此处输入PDP文件,因此可以使用PDFParser
        ParseContext context=new ParseContext();
        parser.parse(input, textHandler, matadata, context);//执行解析过程
        input.close();

        return matadata;
    }

    /**
     * 读取文件内容
     * @param file 支持txt/word/excle/pdf等多种格式
     * @return
     * @throws TikaException
     * @throws IOException
     */
    public static String parseText(File file) throws TikaException, IOException {
        Tika tika = new Tika();
        return tika.parseToString(file);
    }


    /**
     * 按页读取文件内容
     * @param file 仅支持pdf
     * @return
     * @throws TikaException
     * @throws IOException
     */
    public static JSONArray parsePageToPdf(File file) throws Exception{
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = null;

        ReadContentHandler handler = new ReadContentHandler();
        Metadata metadata = new Metadata();

        FileInputStream inputstream = new FileInputStream(file);
        ParseContext pcontext = new ParseContext();

        //parsing the document using PDF parser
        PDFParser pdfparser = new PDFParser();
        pdfparser.parse(inputstream, handler, metadata,pcontext);

        //getting the content of the document by pages.
        for(Map.Entry<Integer,StringBuilder> entry:handler.pageMap.entrySet()){
            jsonObject = new JSONObject();
            jsonObject.put("page",entry.getKey());
            jsonObject.put("content",entry.getValue().toString());

            jsonArray.put(jsonObject);
        }

        return jsonArray;
    }


}

parseText()    文件转文本内容
parsePageToPdf()pdf转按页文本内容文章来源地址https://www.toymoban.com/news/detail-576973.html

到了这里,关于【Tika】快速使用:文件(word/pdf)内容转文本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java实战:高效提取PDF文件指定坐标的文本内容

    临时接到一个紧急需要处理的事项。业务侧一个同事有几千个PDF文件需要整理:需要从文件中的指定位置获取对应的编号和地址。 要的急,工作量大。所以就问到技术部有没有好的解决方案。 问技术的话就只能写个demo跑下了。 PDF的文档看起来比较简单,因为只是需要读取两

    2024年02月13日
    浏览(57)
  • JAVA读取(DOC、DOCX、PDF、PPT、PPTX)文件文本内容及图片

    温馨提示:有很多方法均可以解析这些常见的文件,以下内容使用的是apache-poi + apache-pdfbox实现的。         关于文档解析,在网上搜索了很久,无奈内容太过繁杂,找不到合适的代码,一大半都是只支持文本。没办法,只能自己在网上一点一点CV了,最终提取了这些代码

    2024年02月03日
    浏览(48)
  • 【已解决】aspose工具word转pdf文件,在linux服务器上使用docker-jenkins部署出现内容乱码问题

    因项目需求,需要将word格式文件转换pdf并添加水印,由于我在本地windos开发环境调试没有任何问题,一到测试环境linux发现乱码 例如: 由于项目是用docker+jenkins部署,经排查后发现原因是因为Linux跟windos中的字体不一样,windos中 c:windosuserFonts 目录中自带很多字体。但linux d

    2024年02月04日
    浏览(56)
  • 【PDFBox】PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档

    这篇文章,主要介绍PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档。 目录 一、PDFBox操作文本 1.1、读取所有页面文本内容 1.2、读取指定页面文本内容 1.3、写入文本内容 1.4、替换文本内容 (1)自定义PDTextStripper类 (2)创建Key

    2024年02月16日
    浏览(61)
  • Java使用ftl模板文件生成Word,以及Word转换图片或Pdf工具类

    一、写在前面 最近在项目中使用打印功能,发现这个功能我已经写过多次了,下面这个文章的发步日期在2020年,不得不感慨时间之快啊。 https://blog.csdn.net/weixin_43238452/article/details/109636200?spm=1001.2014.3001.5501 下面介绍一下应用场景:这次项目依旧是springboot项目,使用ftl模版生

    2024年02月15日
    浏览(54)
  • Java poi之word文本图片内容提取

    应公司需求,需实现以下功能 word文本内容的替换; word文本内容的提取; word文档中图片的提取存放 此文章将使用Apache POI实现Word文档中文本内容及图片的提取; Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。

    2024年02月10日
    浏览(51)
  • java 使用POI-TL根据word模版,生成word文件,含图片,富文本。

    1.引入mavna坐标` 2 .poi-tl-ext插件主要用于富文本内容格式在word展现 3.word模版创建 3.具体代码实现 4.本文的miniourl路径实质为网络路径的文件。

    2024年02月16日
    浏览(61)
  • Java POI导出富文本的内容到word文档

    当创建使用富文本编辑器,操作完的数据,传输到后台都是带有html标签的。 如:h1标题头/h1h2第二个标题/h2a href=\\\"www.baidu.com\\\"百度搜索/a 我们想把富文本数据转换为Word内容。 Word是完全支持html标签的,但是我们获取到的富文本内容并不是完整的html代码,所有我们需要先补全

    2024年02月09日
    浏览(47)
  • 实用VBA:17.大量word文件中的文本内容进行批量替换

    在工作中可能会遇到需要对大量word文件中的文字内容进行批量替换的情况。相比excel的批量处理,个人感觉word文档中由于包含大量样式信息,批处理时总感觉有顾虑。一者担心影响了文档的格式,误修改了文档的样式,那后果……整过文档的小伙伴都懂的;二者担心批处理不

    2024年01月25日
    浏览(38)
  • Java创建txt文件并存入内容】—— 使用Java编写代码创建和写入文本文件

    Java创建txt文件并存入内容】—— 使用Java编写代码创建和写入文本文件 文件操作是在软件开发中常见的任务之一。在Java中,你可以使用标准的I/O类来创建和写入文本文件。下面是使用Java编写的示例代码,演示了如何创建一个txt文件并将内容写入其中。 以上代码演示了如何创

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包