2016-07-18 12 views
2

itextsharpを使用してpdfファイル内の任意のデジタル署名のイメージをC#コードで取得できますか?c#itextsharpデジタル署名イメージを取得する方法

PdfReader pdf = new PdfReader("location.pdf"); 
AcroFields acroFields = pdf.AcroFields; 
List<string> names = acroFields.GetSignatureNames(); 

foreach (var name in names) 
{ 
    PdfDictionary dict = acroFields.GetSignatureDictionary(name); 
} 

この単純な行で私は署名辞書を得ることができますが、このオブジェクトからはイメージの内容を取得できません。 誰も助けることができますか?

答えて

1

私は自分の質問に答えます...もしそれが他の誰かにとって役に立ちそうなら、私はこのようにしました。 私が探していたことをするJavaクラスが見つかりました。私はC#でそれを翻訳しました。

class XyzmoSignatureDataExtractor 
{ 
    private PdfReader reader; 

    public XyzmoSignatureDataExtractor(PdfReader reader) 
    { 
     this.reader = reader; 
    } 

    public PdfImageObject extractImage(String signatureName) 
    { 
     MyImageRenderListener listener = new MyImageRenderListener(); 

     PdfDictionary sigFieldDic = reader.AcroFields.GetFieldItem(signatureName).GetMerged(0); 
     PdfDictionary appearancesDic = sigFieldDic.GetAsDict(PdfName.AP); 
     PdfStream normalAppearance = appearancesDic.GetAsStream(PdfName.N); 

     PdfDictionary resourcesDic = normalAppearance.GetAsDict(PdfName.RESOURCES); 

     PdfContentStreamProcessor processor = new PdfContentStreamProcessor(listener); 
     processor.ProcessContent(ContentByteUtils.GetContentBytesFromContentObject(normalAppearance), resourcesDic);   

     return listener.image; 
    } 

    class MyImageRenderListener : IRenderListener 
    { 
     public void BeginTextBlock() { } 

     public void EndTextBlock() { } 

     public void RenderImage(ImageRenderInfo renderInfo) 
     { 
      try 
      { 
       image = renderInfo.GetImage(); 
      } 
      catch (Exception e) 
      { 
       throw new Exception("Failure retrieving image", e); 
      } 
     } 

     public void RenderText(TextRenderInfo renderInfo) { } 

     public PdfImageObject image = null; 
    } 

} 

クラスを使用し、私はちょうどそのよう行う画像を保存するには:

PdfReader reader = new PdfReader("location.pdf"); 
XyzmoSignatureDataExtractor extractor = new XyzmoSignatureDataExtractor(reader); 
AcroFields acroFields = reader.AcroFields; 

foreach (string name in acroFields.GetSignatureNames()) 
{ 

    PdfImageObject image = extractor.extractImage(name); 

    var _image = image.GetDrawingImage(); 
    string file_name = "sig." + image.GetFileType(); 
    _image.Save(file_name); 
} 
関連する問題