栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java的高级PDF解析器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java的高级PDF解析器

目前,iText是我选择的PDF工具。

  • 完整的可见文字

“可见”是一个艰难的过程。您可以使用com.itextpdf.text.pdf.parse包的类来解析所有可分析的文本…但是这些类对CLIPPING不了解。您可以很容易地将解析器限制为页面大小。

// all text on the page, regardless of positionPdfTextExtractor.getTextFromPage(reader, pageNum);

实际上,您实际上需要采用TextExtractionStrategy(已过滤策略)的替代。它很快就变得很有趣,但是我认为您可以在这里“开箱即用”获得所需的一切。

  • 图片

是的,通过相同的包类。图像侦听器不像文本侦听器那样受支持,但确实存在。

  • 链接

是。链接是指向各种PDF页面的“注释”。找到它们很简单,只需遍历每个页面的“注释数组”并挑选链接注释即可。

PdfDictionary pageDict = myReader.getPageN(1);PdfArray annots = pageDict.getAsArray(PdfName.ANNOTS);ArrayList<String> dests = new ArrayList<String>();if (annots != null) {  for (int i = 0; i < annots.size(); ++i) {    PdfDictionary annotDict = annots.getAsDict(i);    PdfName subType = annotDict.getAsName(PdfName.SUBTYPE);    if (subType != null && PdfName.link.equals(subType)) {      PdfDictionary action = annotDict.getAsDict(PdfName.A);      if (action != null && PdfName.URI.equals(action.getAsName(PdfName.S)) {        dests.add(action.getAsString(PdfName.URI).toString());      } // else { its an internal link, meh }    }  }}

您可以在此处找到PDF规范。

  • 输入元素

绝对是 对于XFA(LiveCycle Designer)或较旧技术的“ AcroForm”表单,iText可以找到所有字段及其值。

AcroFields fields = myReader.getAcroFields();Set<String> fieldNames = fields.getFields().keySet();for (String fldName : fieldNames) {  System.out.println( fldName + ": " + fields.getField( fldName ) );}

多重选择列表将无法很好地处理。在冒号之后,您将在空白处输入空白文本字段和按钮。没有什么内容丰富…但是那会让您入门。

  • 文档元标记,例如标题,描述或作者

很琐碎。是。

Map<String, String> info = myPdfReader.getInfo();System.out.println( info );

除了基本的author / title / etc外,还有一个相当复杂的XML模式,您可以通过访问

reader.getmetadata()

  • 仅标题

A

TextRenderFilter
可以根据您希望的任何条件忽略文本。根据您的评论,字体大小听起来不错。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/449944.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号