2011-12-07 10 views
9

PDFを読み込み、ソーシャルDRMコンテンツを追加してからファイルを保存するために、iTextSharpを使用してC#プログラムを作成しました。この新しいPDFをさらに編集しないようにロックするにはどうすればよいですか?PDFをiTextSharpを使用して編集することを控える

パスワードを入力せずにファイルを表示できるようにしたいと思います。選択/コピー操作は気にしませんが、ソーシャルDRMを削除することができます。

答えて

18

PDFドキュメントを暗号化します。シンプルHTTP Handlerあなたが始めるために例を作業:

<%@ WebHandler Language="C#" Class="lockPdf" %> 
using System; 
using System.Web; 
using iTextSharp.text; 
using iTextSharp.text.pdf; 

public class lockPdf : IHttpHandler { 
    public void ProcessRequest (HttpContext context) { 
    HttpServerUtility Server = context.Server; 
    HttpResponse Response = context.Response; 
    Response.ContentType = "application/pdf"; 
    using (Document document = new Document()) { 
     PdfWriter writer = PdfWriter.GetInstance(
     document, Response.OutputStream 
    ); 
     writer.SetEncryption(
// null user password => users can open document __without__ pasword 
     null, 
// owner password => required to __modify__ document/permissions   
     System.Text.Encoding.UTF8.GetBytes("ownerPassword"), 
/* 
* bitwise or => see iText API for permission parameter: 
* http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfWriter.html 
*/ 
     PdfWriter.ALLOW_PRINTING 
      | PdfWriter.ALLOW_COPY 
     , 
// encryption level also in documentation referenced above   
     PdfWriter.ENCRYPTION_AES_128 
    ); 
     document.Open(); 
     document.Add(new Paragraph("hello world")); 
    } 
    } 
    public bool IsReusable { get { return false; } } 
} 

インラインコメントは自明でなければなりません。 PdfWriter documentationを参照してください。

PdfEncryptor classを使用してPdfReaderオブジェクトを使用してPDFドキュメントを暗号化することもできます。つまり、次のようなこともできます(未テスト)。

PdfReader reader = new PdfReader(INPUT_FILE); 
using (MemoryStream ms = new MemoryStream()) { 
    using (PdfStamper stamper = new PdfStamper(reader, ms)) { 
    // add your content 
    } 
    using (FileStream fs = new FileStream(
    OUTPUT_FILE, FileMode.Create, FileAccess.ReadWrite)) 
    { 
    PdfEncryptor.Encrypt(
     new PdfReader(ms.ToArray()), 
     fs, 
     null, 
     System.Text.Encoding.UTF8.GetBytes("ownerPassword"), 
     PdfWriter.ALLOW_PRINTING 
      | PdfWriter.ALLOW_COPY, 
     true 
    ); 
    } 
} 
+0

これは完全に機能しています。 – CrispinH

+0

ありがとう!それは働く –

関連する問題