2011-12-07 19 views
9

का उपयोग करके संपादन के खिलाफ पीडीएफ लॉक करें मैंने पीडीएफ पढ़ने, सामाजिक डीआरएम सामग्री जोड़ने और फिर फ़ाइल को सहेजने के लिए iTextSharp का उपयोग कर एक सी # प्रोग्राम बनाया है। मैं आगे के संपादन के खिलाफ इस नए पीडीएफ को कैसे लॉक करूं?iTextSharp

मैं चाहता हूं कि उपयोगकर्ता पासवर्ड दर्ज किए बिना फ़ाइल को देखने में सक्षम हो और मुझे चुनिंदा/प्रतिलिपि बनाने की कोई बात नहीं है लेकिन मुझे सामाजिक डीआरएम को हटाने की क्षमता है।

उत्तर

18

अपने पीडीएफ दस्तावेज़ को एन्क्रिप्ट करें। सरल 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 ऑब्जेक्ट का उपयोग करके एक पीडीएफ दस्तावेज़ एन्क्रिप्ट भी कर सकते हैं। दूसरे शब्दों में, आप इस तरह कुछ भी कर सकते हैं (अवांछित):

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

धन्यवाद! यह काम करता है –