2011-05-03 2 views
1

나는 보통 pdf, 디지털 서명 된 pdf 및 암호를 사용하여 programatically C#을 사용하여 pdf의 다른 유형에 워터 마크를 추가해야합니다. 나는 아래의 코드를 사용하여 디지털 서명 된 일반 pdf 및 일부 pdf 워터 마크 수 있지만 디지털 서명 및 보안이 보호 된 다른 pdf 작동하지 않습니다. 누구든지 itextsharp을 사용하여 pdf 보안을 제거하는 방법을 말해 줄 수 있습니다. 그래야 워터 마킹이 가능합니다.PDF와 워터 마크의 보안을 제거하기 위해 itextsharp를 사용하는 방법 pdf

다음 코드는 보안이 설정되어 있지 않지만 보안이 설정된 pdf에 워터 마크를 삽입 할 수없는 일반 pdf에 워터 마크를 추가 할 수 있습니다.

public void AddWatermarkText(string sourceFile, string outputFile, 
string watermarkText, iTextSharp.text.pdf.BaseFont watermarkFont, float 
watermarkFontSize, iTextSharp.text.Color watermarkFontColor, float 
watermarkFontOpacity, float watermarkRotation) 
    { 
     iTextSharp.text.pdf.PdfReader reader = null; 
     iTextSharp.text.pdf.PdfStamper stamper = null; 
     iTextSharp.text.pdf.PdfGState gstate = null; 
     iTextSharp.text.pdf.PdfContentByte underContent = null; 
     iTextSharp.text.Rectangle rect = null; 

     int pageCount = 0; 
     try 
     { 
          { 
       reader = new iTextSharp.text.pdf.PdfReader(sourceFile); 
       rect = reader.GetPageSizeWithRotation(1); 
       stamper = new PdfStamper(reader, new System.IO.FileStream(outputFile, System.IO.FileMode.CreateNew), '\0', true); 

       if (watermarkFont == null) 
       { 
        watermarkFont =iTextSharp.text.pdf.BaseFont.CreateFont(iTextSharp.text.pdf.BaseFont.HELVETICA,iTextSharp.text.pdf.BaseFont.CP1252,iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED); 
       } 
       if (watermarkFontColor == null) 
       { 
        watermarkFontColor = iTextSharp.text.Color.BLUE; 
       } 
       gstate = new iTextSharp.text.pdf.PdfGState(); 
       gstate.FillOpacity = watermarkFontOpacity; 
       gstate.StrokeOpacity = watermarkFontOpacity; 
       pageCount = reader.NumberOfPages; 
       for (int i = 1; i <= pageCount; i++) 
       { 
        underContent = stamper.GetUnderContent(i); 
        //_with1 = underContent; 
        underContent.SaveState(); 
        underContent.SetGState(gstate); 
        underContent.SetColorFill(watermarkFontColor); 
        underContent.BeginText(); 
        underContent.SetFontAndSize(watermarkFont,watermarkFontSize); 
        underContent.SetTextMatrix(30, 30); 

underContent.ShowTextAligned(iTextSharp.text.Element.ALIGN_CENTER,watermarkText,rect.Width/2, rect.Height/2, watermarkRotation); 
        underContent.EndText(); 
        underContent.RestoreState(); 
       } 
      } 
      stamper.Close(); 
      reader.Close(); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

감사

+0

전체 보안 보호 요점은 문서를 수정할 수 없다는 점입니다. –

답변

1

iTextSharp.text.pdf.PdfReader는 암호를 알고있는 경우에 당신이 인수로 소유자 암호를 지정할 수 있습니다. 법적으로 그렇게 할 권한이있는 경우 PDF 파일의 보안 설정을 제거하는 데 사용할 수있는 수많은 온라인 웹 사이트가 있습니다. iTextSharp는 보안 설정을 제거 할 수 없습니다.

+0

제 경우, Owner Passowrd를 인수로 구분할 수 없습니다. 그래서 다른 대안을 찾아야합니다. 내 코드에서 보안 설정을 제거하는 데 도움이 될만한 사이트를 제안 해 줄 수 있습니까? 또한 저에게 가장 좋은 옵션을 제안 해주십시오. (합법적으로 보안 설정을 변경할 권리가 있습니다.) –

+0

PDF 문서의 출처를 제어 할 수 없다면이 도구 ([link] http://soft.rubypdf.com/software/pdfcrypt)를 사용하여 .net을 통해 서버의 실행 파일. 모든 양식 파일을 평평하게합니다 (더 이상 채울 수 없습니다). 암호 해독을위한 명령 인수는 다음과 같습니다. pdfcrypt input_file.pdf output_file.pdf decrypt ""알 수없는 암호에 대해 큰 따옴표 쌍을 사용해야합니다. – Jay

+0

나는 (http://rubypdf.appspot.com/pdfdecrypt.html) 온라인을 사용하여 내 pdf를 암호 해독하고 위의 코드를 사용하여 암호 해독 된 pdf에 워터 마크를 시도했습니다. 하지만 여전히 내 코드는 pdf를 워터 마킹 할 수 없습니다. 디지털 서명이되어 있어도 위의 코드를 사용하여 쉽게 워터 마킹 할 수있는 이유를 제안 해 주시겠습니까? 위의 소프트웨어를 사용하여 암호를 해독해도 일부는 워터 마킹 할 수 없습니다. 이 시나리오에서 나에게 남겨진 최선의 선택은 무엇이라고 생각하십니까? –

관련 문제