2017-02-07 4 views
0

を書き出します私が見たのと同じパターンは、他の場所でオンラインで使用されていましたが、私はMemoryStreamが書き込まれているところに15バイトしか書き込まれていないという問題にぶつかっています。私はFileStreamsを使って作業するときにこの問題にぶち壊されませんでしたが、可能であればここでMemoryStreamを使用する方が好きです。どんな助けもありがとう。iTextSharp PdfStamperは一貫してのみ、私は次のコードを使用して、既存のPDFの暗号化とメモリストリームに暗号化されたPDFを書き出す方法を書き込もうとしています15バイト

答えて

2

私の問題は、PdfStamper内からMemoryStreamバイトをブロックを使って返すことでした。あまりにも早くバイトを返すので、起こっていなかった暗黙のフラッシュがなければなりません。私はコードを次のようにリファクタリングしました。

public byte[] ProtectPdfStreamWithPassword(
      string filePath, 
      string password) 
     { 
      using (var outStream = new MemoryStream()) 
      { 
       using (var reader = new PdfReader(filePath)) 
       { 
        using (var stamper = new PdfStamper(reader, outStream)) 
        { 
         var passwordBytes = 
           Encoding.ASCII.GetBytes(password); 

         stamper.SetEncryption(
          passwordBytes, 
          passwordBytes, 
          PdfWriter.AllowPrinting, 
          PdfWriter.ENCRYPTION_AES_256); 
        } 
       } 

       return outStream.ToArray(); 
      } 
     } 
+1

はい、これは正しいです。あなたは 'スタンパー'オブジェクトを「閉じて」いませんでした。 'using'を使わなかったとすると、' ToArray() 'メソッドを使う前に' PdfStamper stamper = new new PdfStamper(reader、outStream); 'と' stamper.Close(); '* * 。 –

関連する問題