【问题标题】:Aspose PDF - get text from page that has a matching stringAspose PDF - 从具有匹配字符串的页面中获取文本
【发布时间】:2018-03-12 18:34:24
【问题描述】:

我正在使用现有的库 - 该库的目标是从 PDF 中提取文本,以根据预期值验证记录的数据与 pdf 中的数据的质量检查。

我正在寻找一种方法来简洁地提取特定页面的文本,给定一个应该只落在该特定页面上的字符串。

var pdfDocument = new Document(file.PdfFilePath);

var textAbsorber = new TextAbsorber{
    ExtractionOptions = {
        FormattingMode = TextExtractionOptions.TextFormattingMode.Pure
    }
};

pdfDocument.Pages.Accept(textAbsorber);
foreach (var page in pdfDocument.Pages)
{

}

我被困在foreach(var page in pdfDocument.Pages) 部分...还是该寻找正确的区域?

【问题讨论】:

  • 为了从特定页面提取文本,您主要通过在其中传递 TextAbsorber 来调用特定页面的 Accept() 方法,即 pdfDocument.Pages[1].Accept(textAbsorber);此外,如果您仍然遇到任何问题,请与我们分享您的示例 PDF 文件。我们将在我们的环境中测试该场景并相应地解决它。请确保您使用最新版本的 API 测试功能。我是 Asad Ali,我与 Aspose 一起担任开发人员宣传员。
  • 啊地狱...我想我明白了...我有“所有”页面的吸收器,需要接受单页的吸收器...我想...我将发布问题的更新,因为我认为一旦我再测试一两分钟,我就更接近了。
  • @AsadAli 用我的快速笔记添加了答案。似乎工作。

标签: c# text-extraction aspose aspose.pdf


【解决方案1】:

答案:Text Absorber 重新创建了每个页面 - 在 foreach 循环内。

如果没有重新创建吸收器,它会保留以前循环中的文本。

public List<string> ProcessPage(MyInfoClass file, string find)
{
    var pdfDocument = new Document(file.PdfFilePath);

    foreach (Page page in pdfDocument.Pages)
    {
        var textAbsorber = new TextAbsorber {
            ExtractionOptions = {
                FormattingMode = TextExtractionOptions.TextFormattingMode.Pure
            }
        };

        page.Accept(textAbsorber);
        var ext = textAbsorber.Text;
        var exts = ext.Replace("\n", "").Split('\r').ToList();
        if (ext.Contains(find))
            return exts;
    }

    return null;
}

【讨论】:

  • 您对 TextAbsorber 的理解是正确的,除非您重新初始化它,否则每次访问都会保留所有文本。不过,很高兴知道您的问题已得到解决。如果有任何进一步的帮助,请随时告诉我们。您也可以在我们的免费支持论坛 (forum.aspose.com/c/pdf) 上发布您的问题。
猜你喜欢
  • 2016-10-04
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
相关资源
最近更新 更多