Подтвердить что ты не робот

Как программно искать PDF-документ в С#

Мне нужно найти файл в формате pdf, чтобы увидеть, существует ли определенная строка. Строка, о которой идет речь, определенно закодирована как текст (т.е. Это не изображение или что-то еще). Я пробовал просто искать файл, как будто это был обычный текст, но это не работает.

Можно ли это сделать? Есть ли там библиотеки для .net2.0, которые будут извлекать/декодировать весь текст из PDF файла для меня?

4b9b3361

Ответ 2

Вы можете использовать Docotic.Pdf library для поиска текста в файлах PDF.

Вот пример кода:

static void searchForText(string path, string text)
{
    using (PdfDocument pdf = new PdfDocument(path))
    {
        for (int i = 0; i < pdf.Pages.Count; i++)
        {
            string pageText = pdf.Pages[i].GetText();
            int index = pageText.IndexOf(text, 0, StringComparison.CurrentCultureIgnoreCase);
            if (index != -1)
                Console.WriteLine("'{0}' found on page {1}", text, i);
        }
    }
}

Библиотека также может извлечь форматированный и обычный текст из всего документа или любой страницы документа.

Отказ от ответственности: я работаю для Bit Miracle, поставщика библиотеки.

Ответ 3

В подавляющем большинстве случаев невозможно напрямую найти содержимое PDF файла, открыв его в блокноте - и даже в меньшем числе случаев (в зависимости от того, как был создан PDF файл), вы будете только всегда сможете найти отдельные слова из-за того, как PDF обрабатывает текст внутри.

У моей компании есть коммерческое решение, которое позволит вам извлечь текст из файла PDF. Я добавил код примера ниже, как показано на этой странице, в котором показано, как искать текст из файла PDF для определенную строку.

using System;
using System.IO;
using QuickPDFDLL0718;

namespace QPLConsoleApp
{
    public class QPL
    {
        public static void Main()
        {
            // This example uses the DLL edition of Quick PDF Library
            // Create an instance of the class and give it the path to the DLL
            PDFLibrary QP = new PDFLibrary("QuickPDFDLL0718.dll");

            // Check if the DLL was loaded successfully
            if (QP.LibraryLoaded())
            {
                // Insert license key here / Check the license key
                if (QP.UnlockKey("...") == 1)
                {
                    QP.LoadFromFile(@"C:\Program Files\Quick PDF Library\DLL\GettingStarted.pdf");

                    int iPageCount = QP.PageCount();
                    int PageNumber = 1;
                    int MatchesFound = 0;

                    while (PageNumber <= iPageCount)
                    {
                        QP.SelectPage(PageNumber);
                        string PageText = QP.GetPageText(3);

                        using (StreamWriter TempFile = new StreamWriter(QP.GetTempPath() + "temp" + PageNumber + ".txt"))
                        {
                            TempFile.Write(PageText);
                        }

                        string[] lines = File.ReadAllLines(QP.GetTempPath() + "temp" + PageNumber + ".txt");
                        string[][] grid = new string[lines.Length][];

                        for (int i = 0; i < lines.Length; i++)
                        {
                            grid[i] = lines[i].Split(',');
                        }

                        foreach (string[] line in grid)
                        {
                            string FindMatch = line[11];

                            // Update this string to the word that you're searching for.
                            // It can be one or more words (i.e. "sunday" or "last sunday".

                            if (FindMatch.Contains("characters"))
                            {
                                Console.WriteLine("Success! Word match found on page: " + PageNumber);
                                MatchesFound++;
                            }
                        }
                        PageNumber++;
                    }

                    if (MatchesFound == 0)
                    {
                        Console.WriteLine("Sorry! No matches found.");
                    }
                    else
                    {
                        Console.WriteLine();
                        Console.WriteLine("Total: " + MatchesFound + " matches found!");
                    }
                    Console.ReadLine();
                }
            }
        }
    }
}