利用Apache Tika分页解析pdf文件内容

这篇具有很好参考价值的文章主要介绍了利用Apache Tika分页解析pdf文件内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Apache Tika 实现pdf文档分页提取内容

Apache Tika是一个多功能的文档内容提取工具,可以提取多种类型的文档内容,常用的如pdf、office等格式。网上的例子基本上都是提取整篇文档内容,实际上用Tika提取pdf等文档的内容主要场景多半是给搜索引擎提供更精细化的搜索推荐,需要按页面或段落方式进行内容提取。
仔细研究了Tika的开发文档,实际上还是可以有一些办法实现pdf文档的分页内容提取的。

基本思路是利用ToXMLContentHandler,将pdf转换为xml文档,解析分页符

从ToXMLContentHandler派生一个分页内容解析器,实现startElement、endElement和character方法。

  • 利用startElement解析xml内容,检测分页符,按页面将内容分组放到map中记录下来;
  • 检测分页结束符,覆盖endElement方法,实际上xml是成对的,实际上没有用;
  • 覆盖character方法,将页面内容写入到对应的map中,这里有关换行符的处理可以根据需要调整;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.pdf.PDFParser;
import org.apache.tika.sax.ToXMLContentHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

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

public class PageContentHandler extends ToXMLContentHandler {
    private String pageTag = "div";
    private String pageClass = "page";
    private int pageNumber = 0;

    private Map<Integer,StringBuilder> pageMap;

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

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

    private void endPage() {
    }

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

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

    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');
        }
    }

    public static void main(String[] args) throws Exception{
        PageContentHandler handler = new PageContentHandler();
        Metadata metadata = new Metadata();
        FileInputStream inputstream = new FileInputStream(new File("d:/唐诗三百首.pdf"));

        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()){
            System.out.println("======Page " + entry.getKey() + "=======");
            System.out.println(entry.getValue().toString());
        }

        //getting metadata of the document
        System.out.println("Metadata of the PDF:");
        String[] metadataNames = metadata.names();

        for(String name : metadataNames) {
            System.out.println(name+ " : " + metadata.get(name));
        }
    }
}

测试效果

解析如下的《唐诗三百首》pdf文件:
apache tika,java,apache,xml,搜索引擎
输出效果:文章来源地址https://www.toymoban.com/news/detail-613152.html

唐诗三百首
  
  

======Page 2=======
唐诗三百首补注卷一
 
五言古诗
 
张九龄
  
九龄,字子寿,韶州曲江人。七岁如属文,擢进士,始调校书郎。玄宗
即位,迁右补阙,进中书侍郎。母丧夺哀,拜同平章事。卒,谥文献。
  
感  遇《唐音》注:感遇云者,
谓有感于心而寓于言,以摅其意也。
兰叶春葳蕤①,桂华秋皎洁。
欣欣此生意②,白尔为佳节③。
谁知林栖者④,闻风坐相悦。
草木有本心⑤,何求美人拆。
  
①[葳蕤]《字典》:蕤,儒佳切,音甤,《说文》:草木华垂貌。王
粲诗:吴天降丰泽,百卉挺葳蕤。②[欣欣]陶潜《归去来辞》,木欣欣以
向荣,泉涓涓而始流。[生意]《世说》:桓玄败后,殷仲文还为大司马咨
议,意似二三,非复往日。大司马厅前有一老槐,甚扶疏。殷因月朔与众在
厅,视槐良久,叹曰:“槐树婆姿,无复生意。”③[佳节]曹植表:一阳
佳节。④[林栖]曹毗对:儒不追林栖之迹,不希抱鳞之尤。⑤[本心]《魏
志·管宁传》:岂自遭之而违本心哉?
江南有丹橘,经冬犹绿材①。
岂伊地气暖,  白有岁寒心②。
可以荐嘉客③,奈何阻重深④。
运命唯所遇⑤,循环不可寻⑥。
徒言树桃李,此木岂无阴⑦。
①[江南丹橘]《楚辞》,后皇嘉树,橘徕服兮。受命不迁,生南国兮。
王逸注:橘受天命生于南国。《吴都赋》:其果则丹橘余甘,荔枝之林。[经
冬绿]李尤《七叹》:梁土清生,卢橘是生。白华绿叶。扶疏冬荣。②[地
气暖]《周礼·冬官》:橘逾淮而北为枳,此地气然也。曹植《橘赋》:背
江洲之暖气。[岁寒]《论语》:岁寒,然后知松柏之后凋也。李元操《咏
橘》诗:能守岁寒心。③[嘉客]《诗经》:所谓伊人,于焉嘉客。刘帧诗:
�藻生其涯,华叶纷优溺。采之荐宗庙,可以羞嘉客,④[重深]《鲁灵光
殿赋》:东序重深而奥秘。⑤[运命]李康论:夫洽乱,运也;穷达,命也。
⑥[循环]《史记·高祖纪·赞》:三王之道若循环,终而复始。谢灵运诗:
四时循环转,寒暑自相承。⑦[无阴]《吴都赋》:椰叶无阴。《韩诗外传》:
春树桃李,夏得阴其下,秋得食其实。

======Page 3=======
李白
  
白,字太白。母梦长庚星而生。通诗书,喜纵横术,击剑为任侠。天宝
初,贺知章言于玄宗,有诏供奉翰林,因失意于贵妃,赐金放还。禄山反,
永王璘节度东南,迫致之。及璘败,白坐系浔阳狱,流夜郎,以赦得释。代
宗以左抬遗召,而自已卒,年六十四。
  
下终南山过斛斯山人宿置酒①
 
暮从碧山下,  山月随人归。
却顾所来径,  苍苍横翠微②。
相携及田家,  童推开荆扉③。
绿竹入幽径,  青萝拂行衣。
欢言得所慈④,美酒聊共挥⑤。
长歌吟松风⑥,曲尽河星稀。
我醉君复乐,  陶然共忘机⑦。
①[终南山]《元和郡县志》,终南山在雍州万年县南五十里。《太平寰
字记》:终南山在郿县南三十里,《雍录》:终南山横亘关南面,西起秦陇,
东彻蓝田,凡雍;岐、郿、鄂、长安、万年,相去且八百里,而连峙据其南
看,皆此一山也。《一统志》:终南山在西安府南五十里。[料斯]《通志·氏
族略》:代北复姓有斜斯氏,其先居广牧,世袭勿莫大人号,斛斯部因氏焉。
②[翠微]《尔雅》:山未及上翠微。疏谓: 未及顶上,在旁陂陀之处名翠微。
一说山气青缥色,故曰翠微也。③[ 荆扉] 沈约诗:荆扉且新故。李周翰注:
荆扉,以荆为扉也。④[ 所慈]《诗·召南》:召伯所憩。注:憩,音器,息
也。⑤[共挥]《曲礼》:饮玉爵者弗挥,注:振去余酒曰挥。③[松凤]《风
俗通》:河间杂歌二十一章,内有《风入松》曲。⑦[陶然] 陶潜诗:挥兹一
觞,陶然自乐。

到了这里,关于利用Apache Tika分页解析pdf文件内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 24、文件上传漏洞——Apache文件解析漏洞

      Apache文件解析漏洞与用户配置有密切关系。严格来说,属于用户配置问题,这里使用ubantu的docker来复现漏洞: CGI:共同网关接口,是HTTP服务器与机器上其他程序进行通信的一个接口,让web服务器必要时启动额外的程序处理动态内容。 FastCGI:CGI解释器的更快实现,可以提

    2024年02月04日
    浏览(44)
  • ES解析word内容为空的问题和直接使用Tika解析文档的方案

    在上一篇文章最后,我们虽然跑通了ES文件搜索的全部流程,但是仍然出现了1个大的问题:ES7.3实测无法索引docx和doc文档,content有值但是无法解析到附件成为可读的可搜索的内容,附件内容为空(附件中根本没有content这个字段,并非内容为空)。解决的思路是可以直接使用

    2024年04月10日
    浏览(45)
  • Java利用Apache compress包实现文件夹压缩成Zip包

    Apache common提供了很多实用的工具包,下面就说一下如何用compress包来压缩文件夹。先引入compress,io和lang3这3个工具包: 这个方法实现了将文件夹下所有的文件压缩成zip包,并输出到文件流中,可以直接写入到文件或提供给前端下载,工具类如下: 执行main函数跑测试用例,发

    2024年01月20日
    浏览(43)
  • 文件上传upload-labs第三关,Apache无法解析php3、php5等问题

    修改文件后缀名为php5,上传后。无法解析php5 参考网上众多教程,修改httpd.conf配置文件: 添加.php3 .php5 phtml,大部分都可以解决 PHPStudy中AddType application/x-httpd-php等Apache命令之所以在Apache的设置文件中设置后未实现目标效果是由于PHP的版本不符导致的 修改版本,切换到如图所

    2024年02月12日
    浏览(54)
  • vue前端实现将页面显示内容生成pdf文件的几种方法,html2canvas、dom-to-image、jspdf(带分页)基本使用以及介绍

    实际开发需求:vue项目中,根据数据结构生成echarts图表组件,生成带有样式的图表以后,点击下载按钮,把图表以pdf格式的文件下载到本地 实现思路:将vue界面的echarts组件生成图片,然后使用插件将生成的图片放入pdf中,再实现pdf文件的下载 涉及框架以及插件:vue、echar

    2024年01月25日
    浏览(48)
  • 网络安全--利用awk分析Apache日志

    一、溯源 你会溯源吗?怎么溯 拿到日志(ssh登录日志,Apache日志),通过日志溯到ip,对日志进行每天的拆分,第二通过awk日志分析工具对每天的日志进行拆分,分析某一个ip今天对我访问多少次,访问的地址是多少,访问的地址是非恶意的还是不恶意的,即使溯源未成功,

    2024年02月12日
    浏览(35)
  • 开源PDF工具 Apache PDFBox 认识及使用(知识点+案例)

    博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。 博主所有博客文件目录索引:博客目录索引(持续更新) 视频平台:

    2024年02月20日
    浏览(41)
  • Apache poi xwpf word转PDF中文显示与页码问题解决

    目录 POM依赖 核心配置代码 PDF下载流问题 WPS模板问题 原问题解决方法:https://github.com/opensagres/xdocreport/issues/161 请记住,word转换如果没问题,那么就要设置pdf的字体,这个是铁律! 将PdfOptions提出来作为方法使用 注意前端PDF文件流空白问题参考以下方案进行处理 js下载PDF文件

    2024年02月07日
    浏览(56)
  • Apache解析漏洞实验

    了解Apache解析漏洞原理 掌握Apache漏洞的利用方法 实验工具 火狐:Mozilla Firefox,中文俗称“火狐”(正式缩写为Fx或fx,非正式缩写为FF),是一个自由及开放源代码网页浏览器,使用Gecko排版引擎,支持多种操作系统,如Windows、Mac OS X及GNU/Linux等。 实验内容 什么是网站(we

    2024年02月07日
    浏览(31)
  • Apache nginx解析漏洞复现

    将nginx解压后放到c盘根目录下: 运行startup.bat启动环境: 在HTML文件夹下有它的主页文件: nginx在遇到后缀名有php的文件时,会将该文件给php解释器处理,在读取文件时如果遇到00时就读取结束

    2024年02月09日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包