使用Aspose.Pdf搜索文本时报“Object reference not set to an instance of an object”

你好,我在使用Aspose.Pdf(v24.12.0)进行文件查找时,获得了一个错误:“Object reference not set to an instance of an object”

Error.png (14.7 KB)

源文件:
AcceptFail.pdf (326.1 KB)

代码:

var filePath = Path.Combine(baseDirectory, "Files", "AcceptFail.pdf");
            using var document = new Document(filePath);
            TextFragmentAbsorber absorber = new TextFragmentAbsorber(new Regex("(?i)\\$?(?:TC|TP|CC|CP)"));
            var page = document.Pages.First();
            page.Accept(absorber);
            var fragments = absorber.TextFragments.ToList();
            Console.WriteLine($"找到{fragments.Count}");

@cqhg90258

在使用Aspose.Pdf进行文本搜索时遇到“Object reference not set to an instance of an object”错误,通常是由于尝试访问未初始化的对象或空引用引起的。以下是一些可能的解决方案和建议:

  1. 检查PDF文档:确保您正在处理的PDF文档是有效的,并且可以被Aspose.Pdf库正确读取。您可以尝试打开其他PDF文件以确认问题是否出在特定的文档上。

  2. 正则表达式:您使用的正则表达式new Regex("(?i)\\$?(?:TC|TP|CC|CP)")可能没有匹配到任何文本,导致TextFragments集合为空。您可以在调试时检查fragments的内容,确保它不为空。

  3. 代码示例:以下是一个简单的代码示例,展示如何使用TextFragmentAbsorber进行文本搜索:

    var filePath = Path.Combine(baseDirectory, "Files", "AcceptFail.pdf");
    using var document = new Document(filePath);
    TextFragmentAbsorber absorber = new TextFragmentAbsorber("Figure"); // 示例搜索词
    document.Pages.Accept(absorber);
    var fragments = absorber.TextFragments;
    
    if (fragments.Count > 0)
    {
        Console.WriteLine($"找到{fragments.Count}个片段");
        foreach (TextFragment fragment in fragments)
        {
            Console.WriteLine($"文本: {fragment.Text}");
        }
    }
    else
    {
        Console.WriteLine("未找到任何文本片段");
    }
    
  4. 调试信息:在调试时,您可以添加一些日志信息,以便更好地了解代码执行的状态。例如,检查document.Pages是否为空,或者在调用Accept方法之前确认absorber是否已正确初始化。

如果以上建议仍未解决问题,您可以考虑在Aspose的支持论坛上发布详细信息,以便获得更具体的帮助。

希望这些信息能帮助您解决问题!

确定 document.Pages 不为空, absorber 已正确初始化

@cqhg90258

看起来该 PDF 不是有效的 PDF 文档,因为当我们在 PDF 查看器中打开它时,会提示错误。看起来它已经损坏了。请尝试使用有效的 PDF 文档,如果您仍然遇到任何问题,请告诉我们。

1 Like

使用Acrobat打开是提示了错误,使用WPS打开却没有错误提示。
有哪些查看PDF文档结构的工具推荐吗?便于查找有文档错误的原因

@cqhg90258

Aspose.PDF遵循Adobe Acrobat Reader的标准,我们建议您打开/查看其中的文档。如果 Adob​​e 能够渲染该文件并且 API 产生问题,请告知我们。我们将进一步为您提供相应的帮助。