2012-11-16 8 views
6

を使用してPDFファイルの種類を決定するには?どのようにPDFファイルの種類を判別する方法はありiTextSharp

+1

あなたの基準は何ですか?スキャナーのPDFと他の種類の文書をどのように区別しますか?印刷される文字の量ですか?イメージでカバーされるページ領域の量ですか?それはPDFを作成したプログラムの名前ですか? iTextSharpはそのような値を決定するのに役立ちますが、あらかじめ基準を策定しなければなりません。 – mkl

+0

「どのようにしてスキャナからPDFを区別しない...」 - あなたも、それは必ずしもそうではありません、テキスト – ESB

+0

Hhmmmを選択することはできません。いくつかの追加のOCRを行い、スキャンされたPDFを目に見えないが選択可能なテキストで充実させるスキャンソリューションがあります。また、iTextSharpとC#*を使ってデータファイルからPDF *を簡単に作成することもできます。ですから、実際に選択可能なテキストのあるPDFとないPDFを区別したいと思うように質問を解釈できますか? – mkl

答えて

0

ドキュメントプロパティ/詳細/ PDFファイルプロデューサー

+0

あなたは詳しく教えていただけますか?コードのサンプルは、おそらく... – ESB

0

多分あなたはiTextSharpで作成するPDFにいくつかのメタデータを追加することができます。

Read/Modify PDF Metadata using iTextSharp

+0

は、私はそれらを作成していない - 私は私のフォルダにのトンを取得し、各PDF – 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

関連する問題