2011-12-07 20 views
9

Stworzyłem program C#, używając iTextSharp do odczytu pliku PDF, dołączania treści społecznościowych DRM, a następnie zapisania pliku. Jak zablokować ten nowy plik PDF przed dalszą edycją?Zablokuj plik PDF przed edycją za pomocą iTextSharp

Chcę, aby użytkownik mógł wyświetlać plik bez podawania hasła i nie mam nic przeciwko operacjom wybierania/kopiowania, ale mam na uwadze możliwość usunięcia społecznego DRM.

Odpowiedz

18

Zaszyfruj swój dokument PDF. Proste HTTP Handlerpracy przykład aby dostać się zaczęło:

<%@ 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; } } 
} 

Inline komentarze powinny być oczywiste. Zobacz PdfWriter documentation.

Można również zaszyfrować dokument PDF za pomocą obiektu PdfReader przy użyciu PdfEncryptor class. Innymi słowy, możesz też zrobić coś takiego (testowany):

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

To działało idealnie. – CrispinH

+0

Dzięki! to działa –

Powiązane problemy