2012-11-16 53 views
6

是否有方法可以確定PDF文件的類型:如果現有PDF文件是掃描圖像,還是使用iTextSharp和C#從數據文件創建?如何使用iTextSharp確定PDF文件類型

+1

你的標準是什麼?您如何區分掃描儀的PDF和其他類型的文檔?這是打印的字符數量嗎?圖像覆蓋的頁面面積是多少?它是創建PDF的程序的名稱? iTextSharp可以幫助您確定這些值,但您必須提前準備好標準。 – mkl

+0

「您如何區分掃描儀的PDF文件...」 - 您甚至無法選擇文本 – ESB

+0

Hhmmm,但情況並非如此。有一些掃描解決方案會執行一些額外的OCR,然後通過不可見但可選擇的文本豐富掃描的PDF。另一方面,使用iTextSharp和C#*可以很容易地從數據文件中創建* PDF *,而無需任何可選文本。那麼,我是否可以解釋您的問題,以便您實際上想區分具有可選文本和沒有文本的PDF? – mkl

回答

0

文檔屬性/高級/ PDF製作

+0

請你詳細說明一下嗎?代碼示例可能... – ESB

0

我剛纔提出這個方法的PdfWriter對象的監視窗口中搜索合適的位置後,以取代PDF製作,它改變了PDF的「PDF造物主」,因爲它是不是默認訪問:

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

那麼問題的答案在哪裏?你能解釋一下嗎? – NREZ

+0

抱歉,我把它粘貼在錯誤的線程中,但解釋一下呢? 但是,您可以使用此代碼進行小改編,以確定它是如何創建的,更新了上面的代碼。 – coloboxp

相關問題