以编程方式搜索 PDF 文件中的文本并告知页码? [关闭]

Posted

技术标签:

【中文标题】以编程方式搜索 PDF 文件中的文本并告知页码? [关闭]【英文标题】:Programmatically search for text in a PDF file and tell the page number? [closed] 【发布时间】:2010-10-17 02:43:18 【问题描述】:

有一些工具允许提取 PDF 文件的整个文本部分,以便对 PDF 进行全文索引。

我需要一种搜索​​某些字符串的方法,如果在 PDF 文件中找到它们,返回页码?

【问题讨论】:

【参考方案1】:

本例使用Adobe Reader自带的库,来自http://www.dotnetspider.com/resources/5040-Get-PDF-Page-Number.aspx:

using Acrobat;
using AFORMAUTLib;                          
private void pdfRandD(string fPath)

    AcroPDDocClass objPages = new AcroPDDocClass();
    objPages.Open(fPath);
    long TotalPDFPages = objPages.GetNumPages();            
    objPages.Close();
    AcroAVDocClass avDoc = new AcroAVDocClass();
    avDoc.Open(fPath, "Title");
    IAFormApp formApp = new AFormAppClass();
    IFields myFields = (IFields)formApp.Fields;            
    string searchWord = "Search String";
    string k = "";
    StreamWriter sw = new
        StreamWriter(@"D:\KCG_FileChecker_Inputs\MAC\pdf\0230_525490_23_cha17.txt", false);
    for (int p = 0; p < TotalPDFPages; p++)
                    
        int numWords = int.Parse(myFields.ExecuteThisjavascript("event.value=this.getPageNumWords(" + p + ");"));
        k = "";
        for (int i = 0; i < numWords; i++)
        
            string chkWord = myFields.ExecuteThisJavascript("event.value=this.getPageNthWord(" + p + "," + i + ", true);");
            k = k + " " + chkWord;
                        
        if(k.Trim().Contains(searchWord))
        
           int pNum = int.Parse(myFields.ExecuteThisJavascript("event.value=this.getPageLabel(" + p + ",true);"));
           sw.WriteLine("The Word " + searchWord + " is exists in " + pNum);                    
        

     
     sw.Close();
     MessageBox.Show("Process completed");

【讨论】:

感谢代码!不过,此示例需要安装 Adob​​e Professional。出于许可版税的原因,我希望有一个组件来执行此操作。【参考方案2】:

您可以使用Docotic.Pdf library 在 PDF 文件中搜索文本。

以下示例显示了如何在 PDF 文件中查找指定的字符串和相应的页码:

static void searchForTextStrings()

    string path = "";
    string[] stringsToFind = new string[]  ;

    using (PdfDocument pdf = new PdfDocument(path))
    
        for (int i = 0; i < pdf.Pages.Count; i++)
        
            string pageText = pdf.Pages[i].GetText();
            foreach (string s in stringsToFind)
            
                int index = pageText.IndexOf(s, 0, StringComparison.CurrentCultureIgnoreCase);
                if (index != -1)
                    Console.WriteLine("'0' found on page 1", s, i);
            
        
    

如果删除 IndexOf 方法的第三个参数,则可以进行区分大小写的搜索。

免责声明:我为图书馆供应商 Bit Miracle 工作。

【讨论】:

以上是关于以编程方式搜索 PDF 文件中的文本并告知页码? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式读取 PDF 嵌入式搜索索引

使用Itext搜索和替换PDF

以编程方式捕获 .PDF 文件中所有嵌入文本项的位置和内容?

总结以编程方式创建的编辑文本中的所有十进制值

使用 Objective-C 以编程方式读取文本文件

PDF怎么添加页码?PDF添加页码的方法