正如@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_* 常量

java复制pdf_防止复制使用iText生成的pdf内容相关推荐

  1. java使用itext生成表格pdf文件

    以下主要讲解的是java使用itext生成表格pdf文件,话不多说,直接上代码 一.首先引入itext所使用的包 <dependency><groupId>com.itextp ...

  2. 解决部分浏览器不能显示itext生成的PDF文件文本域内容问题

    解决部分浏览器不能显示itext生成的PDF文件文本域内容问题 参考文章: (1)解决部分浏览器不能显示itext生成的PDF文件文本域内容问题 (2)https://www.cnblogs.com/ ...

  3. java jsp生成pdf_如何使用jsp、servlet输出iText生成的pdf

    使用itext生成pdf 如果每次都在服务端生成一个PDF文件给用户,不仅麻烦,而且浪费服务器资源,最好的方法就是以二进制流的形式输送到客户端. 1)JSP输出: response.setConten ...

  4. iText中给pdf内容添加水印

    /** * 给pdf文件添加水印 * @param InPdfFile 要加水印的原pdf文件路径 * @param outPdfFile 加了水印后要输出的路径 * @param markImage ...

  5. 使用FastReport报表工具生成报表PDF文档

    在我们开发某个系统的时候,客户总会提出一些特定的报表需求,固定的报表格式符合他们的业务处理需要,也贴合他们的工作场景,因此我们尽可能做出符合他们实际需要的报表,这样我们的系统会得到更好的认同感.本篇随 ...

  6. java poi实现word导出(包括word模板的使用、复制表格、复制行、插入图片的使用)

    java poi实现数据的word导出(包括word模板的使用.复制表格.复制行.插入图片的使用) 1.实现的效果 实现病人基本信息.多条病历数据.多项检查项图片的动态插入(网络图片) 2.模板 把w ...

  7. Java使用itext生成Pdf

    Java使用itext生成Pdf 背景 所需依赖 解决jpedal-lgpl jar包问题 示例代码 生成带图片的PDF(使用本地文件系统图片) 生成带图片的PDF(使用网络图片) 背景 在某些业务场 ...

  8. java中数组的复制

    数组复制使我们在编程过程中经常要使用到的,在java中数组复制我们大概能够分为两种,一种是引用复制,还有一种就是深度复制(复制后两个数组互不相干). 以下我们就通过測试的方法来具体看看什么是引用复制和 ...

  9. java 生成pdf itext_使用Java组件itext 生成pdf介绍

    iText是一个能够快速产生PDF文件的Java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给合.使用iText与 ...

最新文章

  1. Spring Boot 特性 —— SpringApplication
  2. OpenGL中的轨迹球问题
  3. ubuntu中mysql操作_uBuntu下安装MySql,及mySql操作!
  4. Centos7安装tengine-2.3.2版本
  5. 25 abstract 抽象
  6. 使用Bean验证扩展PrimeFaces CSV
  7. devops之路rancher安装
  8. fiddler无法抓取浏览器的https请求
  9. 调用接口登录禅道_干货,调用api获取禅道需求列表等
  10. Apache Jemeter 参数化
  11. java中随机字符串生成器_java随机字符串生成器
  12. 深度学习 —— 深度置信网络
  13. vue 手写签名_真正的艺术签名!让你的名字充满明星范!
  14. 企业项目管理八大经典法宝
  15. js文件 格式_robots文件只能放在网站根目录吗?
  16. Fer2013表情识别Group_Project_Document
  17. 【推荐】超全最新医学信息化资源合集
  18. PHP编辑留言源码,php实现简单的留言板功能(附源码)
  19. 计算机专业中级竞聘 报告,中级干部竞聘上岗演讲稿
  20. 003-Android-Activity和Intent习题

热门文章

  1. 使用Heritrix进行主题抓取
  2. 【运算放大器】反相放大电路仿真应用
  3. html滑动验证图片,js实现移动端图片滑块验证功能
  4. 慕课软件质量保证与测试(第五章.课后作业)
  5. 几何约束栏设置不包括_AutoCAD 初级工程师认证参考样题
  6. 计算机在材料科学研究中的应用,计算机在材料科学中的应用
  7. 排名前十的仓库管理系统大盘点(真实测评)!
  8. Thinkphp最新打shang观看视频平台网站源码
  9. webpack:url-loader打包后找不到图片、字体路径问题
  10. Oracle常用函数大全