2017-02-07 18 views
0

나는 기존의 PDF의 암호화 및 작성하는 암호화 된 PDF 파일을 메모리 스트림, 다음 코드를 사용하는 방법을 쓰기를 시도하고 있습니다를 작성하는 필자가 보았던 동일한 패턴은 다른 곳에서 온라인으로 사용되었지만, FileStream에 전달 된 파일의 크기가 약 8KB 인 경우에만 MemoryStream에 기록되는 15 바이트가 기록되는 문제가 발생합니다. 대신 FileStreams로 작업 할 때이 문제가 발생하지 않았지만 가능하면 여기에서 MemoryStreams를 사용하는 것을 선호합니다. 어떤 도움을 주시면 감사하겠습니다.iTextSharp PdfStamper은 지속적으로 15 바이트

답변

2

좋아, 그래서 나를 위해 문제가 MemoryStream 바이트 블록에서 PdfStamper 내에서 반환했다. 너무 빨리 바이트를 반환했기 때문에 발생하지 않은 암시 적 플러시가 있어야합니다. 내 코드를 다음과 같이 리펙토링했습니다.

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

네, 맞습니다. 당신은 "stamper"객체를 "닫은"것이 아닙니다. 'using'을 사용하지 않았다면,'ToArray()'메소드를 사용하여'PdfStamper stamper = new new PdfStamper (reader, outStream);'그리고 나서'stamper.Close();'* * . –