【问题标题】:iText as text Extracting/Reading from PDF on androidiText 作为文本在 android 上从 PDF 中提取/读取
【发布时间】:2012-10-22 06:18:22
【问题描述】:

我在使用 iText 时遇到问题。其他人说 iText 仅用于 PDF 创建?它无法读取或提取 PDF 中的文本。真的吗?

如果是真的,那么我可以选择哪些其他选项从 PDF 文件中提取文本并将其保存在变量中或在 Android 设备中显示?

如果 iText 能够从 PDF 中提取文本,那么如何?

【问题讨论】:

    标签: android pdf itext


    【解决方案1】:

    iText 可以从 PDF 中提取文本。虽然它确实起源于创建新 PDF 和操作现有 PDF 的工具,但近年来它在提取文本方面也变得越来越好。这显然意味着您应该使用当前的 iText 版本 (5.3.x) 进行文本提取。

    iText 主要开发人员 Bruno Lowagie 所著的“iText in Action, second edition”一书在第 15 章中解释了基本的 iText 文本提取,该章的示例可在 iText Sourceforge SVN 存储库中找到,参见。 Samples for chapter 15。一个很好的起点是ExtractPageContentSorted2,它会提取整个页面的文本。

    如果您有特殊要求,可以以ExtractPageContentSorted1为起点,明确定义文本提取策略;根据您的要求,您将需要自己的策略。如果您只想要特定区域的文本,请查看ExtractPageContentArea

    要真正微调 iText 的文本提取功能,您应该查看 iText-question 邮件列表存档(例如 at nabble.com),因为最近 iText 文本提取 API 已扩展为服务于其他用例。

    【讨论】:

    • @ChristianEricParan BTW,如果您在从特定 PDF 而非一般 PDF 中提取文本时遇到问题,请提供适当的示例 PDF 以供检查。
    • 策略是什么意思?如果使用关键字,我想要它所在的整个句子/段落怎么办。我将如何将其作为 iText 中的策略来实施?
    • @ChristianEricParan 文本呈现策略是解析器将定位的文本片段从 PDF 页面内容报告给的对象。如果您查看上面示例的代码,您将在 ExtractPageContentSorted1 中看到一些 LocationTextExtractionStrategy 已实例化。该策略实现从一页中收集所有文本片段,并在被要求提供文本时,从上到下、从左到右对其进行排序,并将排序后的文本返回给您。根据您的要求,您可以创建该 startegy 类的副本并将结果限制在关键字的周围。
    • 再次感谢您的光临。如果你不介意,你能举一个例子来说明如何constrain the result to the surrounding of your key word。我正在考虑何时从 PDF 中提取文本并保存在 String 变量中,我将从该字符串而不是 PDF 中进行搜索。这是个好方法吗?
    • 如果该字符串变量的内容看起来不错,即如果它代表页面内容足够好,是的,这种方法是可以的。但是,可能存在需要特殊处理的情况,例如如果是多列文本,您只想从一列中提取数据。
    【解决方案2】:
    Use below code to extract text from pdf :
    
    
    String pat = data.getData().getPath();
    File f = new File(pat);
    //f is file path of pdf file
    read = new PdfReader(new FileInputStream(f));
    
    parser = new PdfReaderContentParser(read);
    
    strw = new StringWriter();
    
    stretegy = parser.processContent(j, new SimpleTextExtractionStrategy());
    
    strw.write(stretegy.getResultantText());
    
    String da = strw.toString();
    
    //set extracted text from pdf file 
    //to Edit-text    
    edt1.setText(da);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      相关资源
      最近更新 更多