tika提取pdf信息异常

org.apache.tika.sax.WriteOutContentHandler$WriteLimitReachedException: Your document contained more than 100000 characters, and so your requested limit has been reached. To receive the full text of the document, increase your limit. (Text up to the limit is however available).
at org.apache.tika.sax.WriteOutContentHandler.characters(WriteOutContentHandler.java:141)
at org.apache.tika.sax.ContentHandlerDecorator.characters(ContentHandlerDecorator.java:146)
at org.apache.tika.sax.xpath.MatchingContentHandler.characters(MatchingContentHandler.java:85)
at org.apache.tika.sax.ContentHandlerDecorator.characters(ContentHandlerDecorator.java:146)
at org.apache.tika.sax.ContentHandlerDecorator.characters(ContentHandlerDecorator.java:146)
at org.apache.tika.sax.SafeContentHandler.access$001(SafeContentHandler.java:46)
at org.apache.tika.sax.SafeContentHandler$1.write(SafeContentHandler.java:82)
at org.apache.tika.sax.SafeContentHandler.filter(SafeContentHandler.java:140)
at org.apache.tika.sax.SafeContentHandler.characters(SafeContentHandler.java:287)
at org.apache.tika.sax.XHTMLContentHandler.characters(XHTMLContentHandler.java:278)
at org.apache.tika.sax.XHTMLContentHandler.characters(XHTMLContentHandler.java:305)
at org.apache.tika.parser.pdf.PDF2XHTML.writeString(PDF2XHTML.java:398)
at org.apache.pdfbox.util.PDFTextStripper.writeString(PDFTextStripper.java:866)
at org.apache.pdfbox.util.PDFTextStripper.writeLine(PDFTextStripper.java:1896)
at org.apache.pdfbox.util.PDFTextStripper.writePage(PDFTextStripper.java:744)
at org.apache.pdfbox.util.PDFTextStripper.processPage(PDFTextStripper.java:461)
at org.apache.pdfbox.util.PDFTextStripper.processPages(PDFTextStripper.java:385)
at org.apache.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:344)
at org.apache.tika.parser.pdf.PDF2XHTML.process(PDF2XHTML.java:130)
at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:159)

在使用apache tika提取pdf信息时,报以上错误。根据错误信息提示,可能读取超过请求限制(10万字)。

我的代码如下:

		Parser parser = new PDFParser();
		//parser.
		BodyContentHandler handler = new BodyContentHandler();
		Metadata metadata = new Metadata();
		InputStream stream = null;
		try {

			stream = new FileInputStream(new File("1.pdf"));
			parser.parse(stream, handler, metadata, new ParseContext());

			 for (String name : metadata.names()) {
                 System.out.println(name + ":\t" + metadata.get(name));
             }
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TikaException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				stream.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

  对读取字数限制,可能在某个构造函数里我没有传入最大限制,而使用了默认的十万字。检查一下上面的代码,我注意到了

BodyContentHandler的构造函数:
org.apache.tika.sax.BodyContentHandler.BodyContentHandler(int writeLimit)

  看样子有关系。修改一下构造函数的数字为:10*1024*1024(这个数字有pdf文档大小决定)。

重新调试程序,即可获得pdf的元数据信息如下:

  

dc:subject:
meta:save-date:	2014-07-22T21:02:38Z
subject:	PostgreSQL 9.3 Documentation
Author:	The PostgreSQL Global Development Group
dcterms:created:	2014-07-22T20:55:33Z
date:	2014-07-22T21:02:38Z
creator:	The PostgreSQL Global Development Group
Creation-Date:	2014-07-22T20:55:33Z
title:	PostgreSQL 9.3 Documentation
trapped:	False
meta:author:	The PostgreSQL Global Development Group
created:	Wed Jul 23 04:55:33 CST 2014
meta:keyword:
cp:subject:	PostgreSQL 9.3 Documentation
dc:format:	application/pdf; version=1.4
PTEX.Fullbanner:	This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) kpathsea version 6.1.0
xmp:CreatorTool:	LaTeX with hyperref package
Keywords:
dc:title:	PostgreSQL 9.3 Documentation
Last-Save-Date:	2014-07-22T21:02:38Z
meta:creation-date:	2014-07-22T20:55:33Z
dcterms:modified:	2014-07-22T21:02:38Z
dc:creator:	The PostgreSQL Global Development Group
pdf:PDFVersion:	1.4
Last-Modified:	2014-07-22T21:02:38Z
modified:	2014-07-22T21:02:38Z
xmpTPg:NPages:	2861
pdf:encrypted:	false
producer:	pdfTeX-1.40.13; modified using iText® 5.1.3 ©2000-2011 1T3XT BVBA
Content-Type:	application/pdf

  

时间: 2024-10-28 16:35:50

tika提取pdf信息异常的相关文章

PDFBox的使用——分页提取PDF文本

需求:用java分页提取PDF文本. PDFBox是一个很好的可以满足上述需求的开源工具. 1.PDF文档结构 要解析PDF文本,我们首先要了解PDF文件的结构. 关于PDF文档,最重要的几点: 一,PDF文档内容比较复杂,比如有纯文本(可以提取出其中的文字,可以用PDF软件中的“复制”功能).图片(无法使用PDF软件中的“复制”功能).表单.视频.音频等,总之形式比较复杂: 二,PDF文件采用二进制流与纯文字混合的编码模式,并且没有采用 Unicode 等标准字符编码方式,其字符编码采用 Ad

java 反射提取类信息, 动态代理 和过滤某些方法演示

package org.rui.classts.reflects; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.regex.Pattern; /** * 提取 类的 方法 构造器 * @author lenovo * */ //{args:ShowMethods} //查看一个类的所有方法和构造器 public class ShowMethods { private

13.3.2 提取地区信息的代码

我们下载函数的结果是字符串,因此,需要将字符串解析为 XML 文档.由于这个操作我们将经常要用,所以,要写一个简单的打包函数,用 worldBankDownload 下载数据,以 XDocument 对象的形式返回结果.下载异步运行,因此,我们使用异步工作流实现这个函数: let worldBankRequest(props) = async { let! text = worldBankDownload(props) return XDocument.Parse(text) } 代码首先使用

在线提取PDF中图片和文字

无需下载软件,你就可以在线提取PDF中图片和文字,http://www.extractpdf.com/不仅可以获取本地PDF文档的图片和文字,还能获取远程PDF文档的图片和文字.如下图所示:结果本人测试,该工具非常好用,能够轻松提取pdf中图片打包下载(如下图所示),唯一不足的是它只能提取10M一下的PDF文档,对于大文档提取速度可能就力不从心了,总之,是个值得收藏的网站.虽然是英文网站,但是该pdf提取工具对中文支持非常好,不会出现乱码.

Java验证身份证号码及提取生日信息

Java学习第一站,导师给布置的作业题,验证身份证号码的合法性并提取生日信息.第一次写Java代码,第一次用博客记录学习进程,略紧张,对Java变量的命名还停留在C++的命名法阶段,吼吼~~现在开始正题.问题说明:目前,我国大部分地区都使用的是第二代身份证,第二代身份证号码的位数为18位.但公安部没有下发统一的关于停用第一代身份证的文件,第一代身份证中有15位和18位身份证号的混用.15位身份证号码:排列顺序从左至右依次为:6位数字地址码,6位数字出生日期码,3位数字顺序码,其中出生日期码不包含

【BioCode】Elm格式中提取位点信息

说明: ①Elm格式: PLMD ID    Uniprot Accession    Position     Type     Sequence   Species    PMIDsPlMD编号 Uniprot数据库编号         位点 翻译后修饰类型 序列信息 物种 PMID PLMD-1   O00115     52     Ubiquitination  MIPLLLAALLCVPAGALTC Homo sapiens   21963094;23266961 ②代码说明:从上述

迅捷pdf转换器——如何提取pdf中的图片

对于PDF文件的转换,我们最常遇到的情况是把PDF文件转换成Word格式的情况,不过在一些特殊的情况下,我们也会遇到一些特殊的转换工作,比如将pdf转换成jpg格式的文件就比较少见.PDF转换成图片,转换出来的就是一张张的图片,像是扫描过的PDF文件,文字和图片合并成的文件,单独将图片提取出来,只需要里面的图片要怎么办,最简单的方法:利用迅捷PDF转换器的“PDF图片获取”功能直接提取图片. 迅捷PDF转换器正式为上班一族打造的一款专业软件.软件采用OCR技术,它就像是一台袖珍型扫描仪,帮助用户

从MP3中提取歌曲信息

一首MP3歌曲除了音乐信息外,还包含了如歌名.演唱者等信息,当我们用winamp软件听音乐时,播放清单就自动将这些信息读出来.大部分人都喜欢从网上下载音乐,但下载下来的MP3文件名都是文件上传系统自动取名的,和歌曲本身根本不相符,所以,给用户带来了很大的麻烦.但是,懒人有懒人的做法,我们何不自己写一个程序,将歌曲信息自动读出来并为MP3文件自动更名呢? 下面我就以C#为工具,把开发过程写出来. 一首MP3的额外信息存放在文件的最后面,共占128个字节,其中包括以下的内容(我们定义一个结构说明):

Android 获取设备信息 异常

/**获取设备信息 * @param c * @return */ public static void setDeviceInfo(Context c,RequestParams params){ TelephonyManager tm = (TelephonyManager) c.getSystemService(Context.TELEPHONY_SERVICE); if(tm!=null){ try{ params.add("deviceId", tm.getDeviceId(