2012-11-16 24 views
6

Có cách nào để xác định loại tệp PDF: nếu tệp PDF hiện có là hình ảnh được quét hoặc nếu tệp được tạo từ tệp dữ liệu bằng iTextSharp và C#?cách xác định loại tệp PDF bằng cách sử dụng iTextSharp

+1

Tiêu chí của bạn là gì? Làm cách nào để phân biệt giữa các tệp PDF từ máy quét và loại tài liệu khác của bạn? Có phải số lượng ký tự được in không? Có phải số lượng diện tích trang được bao phủ bởi hình ảnh không? Có phải tên chương trình đã tạo tệp PDF không? iTextSharp có thể giúp bạn xác định các giá trị như vậy nhưng bạn phải đưa ra các tiêu chí trước. – mkl

+0

"Làm thế nào để bạn phân biệt giữa các tệp PDF từ máy quét ..." - bạn thậm chí không thể chọn văn bản – ESB

+0

Hhmmm, đó không nhất thiết phải là trường hợp. Có các giải pháp quét làm một số OCR bổ sung và sau đó làm phong phú thêm các tệp PDF được quét bằng văn bản ẩn nhưng có thể chọn. Và mặt khác, thật dễ dàng để tạo * một tệp PDF * từ một tệp dữ liệu bằng iTextSharp và C# * mà không có bất kỳ văn bản có thể chọn nào. Vì vậy, tôi có thể giải thích câu hỏi của bạn để bạn thực sự muốn phân biệt giữa các tệp PDF với văn bản có thể chọn và những tệp không có? – mkl

Trả lời

0

Document Properties/Advanced/Pdf Nhà sản xuất

+0

bạn có thể xây dựng được không? Một mẫu mã có lẽ ... – ESB

0

có lẽ bạn có thể thêm một số siêu dữ liệu để PDF mà bạn tạo ra với iTextSharp.

Read/Modify PDF Metadata using iTextSharp

+0

Tôi không tạo ra chúng - Tôi nhận được hàng tấn chúng trong thư mục của tôi và cần xác định rằng không cần mở mỗi pdf – ESB

0

Tôi chỉ cần thực hiện phương pháp này để thay thế các nhà sản xuất PDF sau khi tìm kiếm nơi ngay trong cửa sổ đồng hồ của đối tượng PdfWriter, nó thay đổi "PDF Creator" trong PDF vì nó là không thể truy cập bằng cách mặc định :

private static void ReplacePdfCreator(PdfWriter writer) 
    { 
     /* 

     Warning 
     * 
     This is not an option offered as is and i had to workaround it by using Reflection and change it 
     manually. 
     * 
     Alejandro 

     */ 
     Type writerType = writer.GetType(); 
     PropertyInfo writerProperty = 
      writerType.GetProperties(BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance) 
         .FirstOrDefault(p => p.PropertyType == typeof(PdfDocument)); 

     if (writerProperty != null) 
     { 
      PdfDocument pd = (PdfDocument)writerProperty.GetValue(writer); 
      Type pdType = pd.GetType(); 
      FieldInfo infoProperty = 
       pdType.GetFields(BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance) 
         .FirstOrDefault(p => p.Name == "info"); 

      if (infoProperty != null) 
      { 
       PdfDocument.PdfInfo pdfInfo = (PdfDocument.PdfInfo)infoProperty.GetValue(pd); 

       if (pdfInfo != null) 
       { 
        string creator = pdfInfo.GetAsString(new PdfName("Producer")).ToLowerInvariant(); 

     if(creator.Contains("itextsharp")) 
     { 
      // created with itext sharp 
     } 
     else if(creator.Contains("adobe")) 
     { 
      // created with adobe something (distiller, photoshop, whatever) 
     } 
     else if(creator.Contains("pdfpro")) 
     { 
      // created with pdf pro 
     } 
     else if(add your own comparison here, for example a scanner manufacturer software like HP's one) 
     { 
     } 
       } 
      } 
     } 
} 
+0

Vậy câu trả lời cho câu hỏi là ở đâu ..? Bạn có thể giải thích điều đó không? – NREZ

+0

Tôi đã dán nó vào chủ đề sai, xin lỗi, nhưng cũng giải thích điều gì? Tuy nhiên, bạn có thể sử dụng mã này với một sự thích ứng nhỏ để xác định cách nó được tạo, cập nhật mã ở trên .. – coloboxp

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