Вопрос: Как программный поиск документа PDF в c # [закрыт]


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

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


16


источник


Ответы:


Есть несколько доступных библиотек. Проверять, выписываться http://www.codeproject.com/KB/cs/PDFToText.aspx а также http://itextsharp.sourceforge.net/

Это требует немного усилий, но это возможно.


12



Вы можете использовать Библиотека Docotic.Pdf  для поиска текста в файлах 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, поставщика библиотеки.


2



В подавляющем большинстве случаев невозможно напрямую просмотреть содержимое 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();
                }
            }
        }
    }
}

1