【发布时间】:2012-01-15 05:16:58
【问题描述】:
我使用 iTextSharp 创建了一个 C# 程序,用于读取 PDF、附加社交 DRM 内容,然后保存文件。如何锁定此新 PDF 以防止进一步编辑?
我希望用户能够在不输入密码的情况下查看文件,我不介意选择/复制操作,但我确实介意删除社交 DRM 的能力。
【问题讨论】:
标签: c# pdf itext pdf-generation
我使用 iTextSharp 创建了一个 C# 程序,用于读取 PDF、附加社交 DRM 内容,然后保存文件。如何锁定此新 PDF 以防止进一步编辑?
我希望用户能够在不输入密码的情况下查看文件,我不介意选择/复制操作,但我确实介意删除社交 DRM 的能力。
【问题讨论】:
标签: c# pdf itext pdf-generation
加密您的 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
);
}
}
【讨论】: