Поиск ключевого слова в PDF с помощью iTextSharp 7 - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь найти ключевое слово в файле PDF с помощью C # и iTextSharp.

Итак, я натолкнулся на этот фрагмент кода:

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?

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Часть кода, которую вы нашли, предназначена для 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;
}
0 голосов
/ 17 октября 2019

Вы можете изменить это

pdfReader.NumberOfPages

на

getNumberOfPdfPages(fileName)

И метод ( ссылка ):

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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...