2009-02-20 32 views
16

Tôi có nhu cầu tìm kiếm một tập tin pdf để xem liệu có một chuỗi nào đó không. Chuỗi được đề cập chắc chắn được mã hóa dưới dạng văn bản (ví dụ: nó không phải là hình ảnh hay bất kỳ thứ gì). Tôi đã thử chỉ tìm kiếm các tập tin như thể nó là văn bản thuần túy, nhưng điều này không hoạt động.Làm thế nào để lập trình tìm kiếm một tài liệu PDF trong C#

Có thể thực hiện việc này không? Có bất kỳ thư viện ra khỏi đó cho. Net2.0 sẽ giải nén/giải mã tất cả các văn bản ra khỏi tập tin pdf cho tôi?

Trả lời

1

Trong phần lớn các trường hợp, không thể tìm kiếm trực tiếp nội dung của tệp PDF bằng cách mở nó trong notepad - và thậm chí trong số ít trường hợp (tùy thuộc vào cách PDF được tạo), bạn sẽ chỉ có thể tìm kiếm các từ riêng lẻ theo cách mà PDF xử lý văn bản nội bộ.

Công ty của tôi có giải pháp thương mại cho phép bạn trích xuất văn bản từ tệp PDF. Tôi đã bao gồm một số mã mẫu cho bạn bên dưới, as shown on this page, minh họa cách tìm kiếm thông qua văn bản từ một tệp PDF cho một chuỗi cụ thể.

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(); 
       } 
      } 
     } 
    } 
} 
2

Bạn có thể sử dụng Docotic.Pdf library để tìm kiếm văn bản trong tệp PDF.

Dưới đây là một số mẫu mã:

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); 
     } 
    } 
} 

Thư viện cũng có thể extract formatted and plain text từ toàn bộ tài liệu hoặc bất kỳ trang tài liệu.

Tuyên bố từ chối trách nhiệm: Tôi làm việc cho Bit Miracle, nhà cung cấp thư viện.

Các vấn đề liên quan