itextPDF5.5.13 pdf加水印的权限控制

1、我们的需求需要对pdf加水印,其中有加密的和未加密的,

操作过程中发现 有的虽然加密了 但是符合PDFReader的五种加密算法,就可以成功破解加水印,还有一些就会抛出一些异常

第一种报错:com.itextpdf.text.exceptions.InvalidPdfException: Unknown encryption type R=6

这种是加密算法无法破解

还有些就是文件内容或者格式有问题

第二种报错:com.itextpdf.text.exceptions.InvalidPdfException: Rebuild failed: trailer not found.; Original message: Dictionary key 0 is not a name. at file pointer 589754
fileWrapper.notLike("file_title","Heavy Metals.pdf"); //PDF header signature not found

第三 种报错:com.itextpdf.text.exceptions.InvalidPdfException: Rebuild failed: '>' not expected at file pointer 454159; Original message: '>' not expected at file pointer 454159

第四种报错:java.io.EOFException: null

第五种报错:

com.itextpdf.text.exceptions.InvalidPdfException: Rebuild failed: Dictionary key 1 is not a name. at file pointer 993774; Original message: Dictionary key 1 is not a name. at file pointer 993774

除了第一种提示加密失败 其他我们都抛出加水印异常;

同时需求要求对加水印的pdf需要加密控制权限,不可复制,不可编辑,不可…… 但是可以打印

一开始收到的答案通篇都是

得到的效果

但是发现这样的文件始终都有copy的权限,仔细看了官网也没有确切的解释

官网地址:Overview (iText 5.5.13 API) (itextpdf.com)

这个True和False的区别只是一种枚举默认值的区分,通过另外一位博主 userpassword和ownerpassword的演示,才发现这个权限设置对我来说太多了,只需要一种即可

    //只保留打印权限 其他权限不放开
stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);

其他的权限不需要就不写,

    //只保留打印权限 其他权限不放开
stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128); 也可以用 true或者fasle来替换,

true:没有“复制功能的内容复制“权限

false:  有“复制功能的内容复制“权限

 

 

如果都不写,默认是权限都放开 不做控制,所以必须有一个权限,刚好我们放开了打印权限 完美实现了功能 ,

记住这个问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值