java复制pdf_防止复制使用iText生成的pdf内容

正如@YuriyGalanter所指出的,PDF中的限制性权限主要是在PDF加密的上下文中定义的,参见PDF规范的第7.6.3.1节ISO 32000-1:2008:

如果指定了密码或访问限制,则应对文档进行加密,并且验证密码所需的权限和信息应存储在加密字典中 . 仅加密文件附件的文档应使用与用户和所有者密码相同的密码 . 使用正确的所有者密码打开文档应允许完全(所有者)访问文档 . 这种无限制访问包括更改文档密码和访问权限的功能 . 使用正确的用户密码打开文档(或使用默认密码打开文档)应允许根据文档加密字典中指定的用户访问权限执行其他操作 .

因此,如果使用所有者密码但没有用户密码对PDF进行加密,则任何人都可以打开PDF并受加密期间选择的权限限制 . 只允许以其所有者密码打开该PDF的人才能无限制地访问PDF .

显然,这样的方案很容易被打破并且保护被删除 . 这取决于PDF处理软件的道德行为 .

方法 createPdf 说明了在创建新PDF时如何应用加密:

public void createPdf(String filename) throws IOException, DocumentException {

// step 1

Document document = new Document();

// step 2

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));

writer.setEncryption(USER, OWNER, PdfWriter.ALLOW_PRINTING, PdfWriter.STANDARD_ENCRYPTION_128);

writer.createXmpMetadata();

// step 3

document.open();

// step 4

document.add(new Paragraph("Hello World"));

// step 5

document.close();

}

方法 encryptPdf 说明了如何加密现有PDF:

public void encryptPdf(String src, String dest) throws IOException, DocumentException {

PdfReader reader = new PdfReader(src);

PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));

stamper.setEncryption(USER, OWNER,

PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);

stamper.close();

reader.close();

}

这里 USER 和 OWNER 是上面提到的用户和所有者密码 .

该示例仅设置一个权限, PdfWriter.ALLOW_PRINTING ;还有其他多个,只需检查 PdfWriter. 的所有 ALLOW_* 常量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值