【问题标题】:Searching for a keyword in PDF using iTextSharp 7使用 iTextSharp 7 在 PDF 中搜索关键字
【发布时间】:2020-02-14 03:59:22
【问题描述】:

我正在尝试使用 C# 和 iTextSharp 在 PDF 文件中搜索关键字。

所以我遇到了这段代码:

public List<int> ReadPdfFile(string fileName, String searthText)
        {
            List<int> pages = new List<int>();
            if (File.Exists(fileName))
            { 
                PdfReader pdfReader = new PdfReader(fileName);
                for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                {
                    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();

                    string currentPageText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
                    if (currentPageText.Contains(searthText))
                    {
                        pages.Add(page);
                    }
                }
                pdfReader.Close();
            }
            return pages;
        }

但它说 PdfReader 不包含 NumberOfPages 的定义。有没有其他方法可以获取 PDF 文件的页数?

【问题讨论】:

标签: c# pdf itext itext7


【解决方案1】:

您找到的这段代码适用于 iText 5.5.x。 iText 7 有一个从根本上改变的 API,所以你的NumberOfPages 问题不是你必须处理的唯一问题。

尽管如此:要获取 iText 7 中的页数,您现在使用 PdfDocument 方法 GetNumberOfPages 而不是之前的 PdfReader 属性 NumberOfPages

更一般地,您的方法移植到 iText 7 可能如下所示:

public List<int> ReadPdfFile(string fileName, String searthText)
{
    List<int> pages = new List<int>();
    if (File.Exists(fileName))
    {
        using (PdfReader pdfReader = new PdfReader(fileName))
        using (PdfDocument pdfDocument = new PdfDocument(pdfReader))
        {
            for (int page = 1; page <= pdfDocument.GetNumberOfPages(); page++)
            {
                ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();

                string currentPageText = PdfTextExtractor.GetTextFromPage(pdfDocument.GetPage(page), strategy);
                if (currentPageText.Contains(searthText))
                {
                    pages.Add(page);
                }
            }
        }
    }
    return pages;
}

【讨论】:

    【解决方案2】:

    你可以改变这个

    pdfReader.NumberOfPages
    

    getNumberOfPdfPages(fileName)
    

    以及方法(reference):

    public int getNumberOfPdfPages(string fileName)
    {
        using (StreamReader sr = new StreamReader(File.OpenRead(fileName)))
        {
            Regex regex = new Regex(@"/Type\s*/Page[^s]");
            MatchCollection matches = regex.Matches(sr.ReadToEnd());
    
            return matches.Count;
        }
    }
    

    但是 NumberOfPages 无法识别似乎很奇怪...您确定您的 using 吗?

    【讨论】:

    • 谢谢!这就是我正在使用的:``` using iText.Kernel.Pdf.Canvas.Parser;使用 iText.Kernel.Pdf.Canvas.Parser.Listener;使用 iText.Kernel.Pdf;使用 iText.Kernel.Pdf.Canvas.Parser.Filter;使用 iText.PDF;使用 iText.Signatures; ```我也有一个问题:string currentPageText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy); 对于所有 3 个参数,它声明它不能将它从一种类型转换为另一种类型......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2019-06-28
    • 2011-03-11
    • 2018-10-18
    相关资源
    最近更新 更多