2011-12-07 53 views
9

He creado un programa C# utilizando iTextSharp para leer un PDF, anexar contenido social de DRM y luego guardar el archivo. ¿Cómo bloqueo este nuevo PDF para evitar nuevas ediciones?Bloquear PDF contra edición usando iTextSharp

Quiero que el usuario pueda ver el archivo sin ingresar una contraseña y no me importa seleccionar/copiar operaciones, pero me importa la posibilidad de eliminar el DRM social.

Respuesta

18

Encripte su documento PDF. Sencilla HTTP Handlertrabajo ejemplo para empezar:

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

Los comentarios en línea deben explicarse por sí mismo. Vea el PdfWriter documentation.

También puede encriptar un documento PDF utilizando un objeto PdfReader utilizando el PdfEncryptor class. En otras palabras, también se puede hacer algo como esto (no probado):

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

que ha funcionado perfectamente. – CrispinH

+0

¡Gracias! eso funciona –

Cuestiones relacionadas