【问题标题】:Lock PDF against editing using iTextSharp使用 iTextSharp 锁定 PDF 以防止编辑
【发布时间】:2012-01-15 05:16:58
【问题描述】:

我使用 iTextSharp 创建了一个 C# 程序,用于读取 PDF、附加社交 DRM 内容,然后保存文件。如何锁定此新 PDF 以防止进一步编辑?

我希望用户能够在不输入密码的情况下查看文件,我不介意选择/复制操作,但我确实介意删除社交 DRM 的能力。

【问题讨论】:

    标签: c# pdf itext pdf-generation


    【解决方案1】:

    加密您的 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; } }
    }
    

    内联 cmets 应该是不言自明的。请参阅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
        );
      }  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多