加密PDF可以在生成PDF过程中加密, 代码示例:
PdfWriter writer = PdfWriter.getInstance(pdfdoc, new FileOutputStream(pdfFilename));
/** User password. */
public static byte[] USER = "TEST".getBytes();
/** Owner password. */
public static byte[] OWNER = "1234".getBytes();
writer.setEncryption(USER, OWNER, PdfWriter.ALLOW_PRINTING, PdfWriter.STANDARD_ENCRYPTION_128);
writer.createXmpMetadata();
pdfdoc.open();
。。。。。。
pdfdoc.close();
也可以后加工:
用户需求:通过邮件发送给客户的PDF文件,每个文件都有唯一的ID,通过Encrypt处理后,生成的ID注入到PDF文件中。当客户非法传递给其他非付费客户或发布到Internet上后,我们通过分析文件的ID来,对比本地数据库的USER-ID关系,通过法律部门进行维权处理。
主要功能:对已生成好的源PDF文件加入密码策略。通过Encrypt对PDF文件写入ID关键字,并setEncryption修改文档属性为不可修改即可。
★方法setKeywords主要增加关键字;pdf文件不能直接复制,通过计算当前PDF文件的总页数,然后进行一页页的写入。
1. 计算总页数 int n = reader.getNumberOfPages();
2. 新建PDF文件
PdfWriter writer =
PdfWriter.getInstance(document,new FileOutputStream("e:/newPDF.pdf"));
3. 创建写入直接内容对象
PdfContentByte cb = writer.getDirectContent();
4. 写入内容
PdfImportedPage page;
int rotation;
int i=0;
while(i<n)
{
i++; document.setPageSize(reader.getPageSizeWithRotation(i));
document.newPage();
page = writer.getImportedPage(reader, i);
rotation = reader.getPageRotation(i);
cb.addTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
★ 方法getKeywords主要取出pdf的文件信息;主要利用PdfReader的方法getInfo取当前PDF文件信息,返回对象为HashMap,输入对应key的val;
System.out.println(map.get("Author"));
System.out.println(map.get("Keywords"));
文件Encrypt.java如下
package com.txsec.pdf;
import java.io.FileOutputStream;
import java.util.HashMap;
import com.lowagie.text.Document;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfEncryption;
public class Encrypt {
public Encrypt() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
setPDFKeywords();
getKeywords();
}
public static void setPDFKeywords()
{
try{
PdfReader reader = new PdfReader("E:/1.pdf");
int n = reader.getNumberOfPages();
System.out.println("PDF总页数为:"+n);
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("e:/newPDF.pdf"));
document.addAuthor("uoovi");
document.addKeywords("123456789");
writer.setEncryption(null,null,
PdfWriter.ALLOW_MODIFY_ANNOTATIONS|PdfWriter.ALLOW_COPY|PdfWriter.ALLOW_PRINTING,
PdfWriter.STANDARD_ENCRYPTION_40);
document.open();
PdfContentByte cb = writer.getDirectContent();
PdfImportedPage page;
int rotation;
int i=0;
while(i<n)
{
i++;
document.setPageSize(reader.getPageSizeWithRotation(i));
document.newPage();
page = writer.getImportedPage(reader, i);
rotation = reader.getPageRotation(i);
cb.addTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
document.close();
System.out.println("加密成功!");
}
catch(Exception e)
{
System.out.println(e.getStackTrace());
System.out.println(e.getMessage());
}
}
public static String getKeywords()
{
try{
PdfReader reader = new PdfReader("E:/newPDF.pdf");
Document document = new Document();
HashMap map = reader.getInfo();
System.out.println(map.toString());
map.get("Author");
System.out.println(map.get("Author"));
System.out.println(map.get("Keywords"));
return "";
}
catch(Exception e)
{
System.out.println(e.getMessage());
return "";
}
}
}
调用setEncryption会异常
writer.setEncryption(null,null,
PdfWriter.ALLOW_MODIFY_ANNOTATIONS|PdfWriter.ALLOW_COPY|PdfWriter.ALLOW_PRINTING,
PdfWriter.STANDARD_ENCRYPTION_40);
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1OctetString
at com.lowagie.text.pdf.PdfEncryption.<init>(Unknown Source)
at com.lowagie.text.pdf.PdfWriter.setEncryption(Unknown Source)
at com.txsec.pdf.Encrypt.setPDFKeywords(Encrypt.java:39)
at com.txsec.pdf.Encrypt.main(Encrypt.java:23)
解决办法:下载 bcprov-jdk16-146.jar,然后加入到构建路径中
下载地址:
http://polydistortion.net/bc/download/
分享到:
相关推荐
1. **文本和图像处理**:你可以使用iText向PDF中添加文本、图片、表格和各种图形元素。它支持多种字体和排版样式,可以处理Unicode字符集,因此可以轻松创建包含中文的PDF文档。 2. **表单处理**:iText允许创建...
通过学习和理解iText的基本API,开发者可以创建丰富的PDF文档,并从现有PDF中提取所需的信息。不过,考虑到Android的内存限制和性能,使用iText时要注意优化资源管理和处理时间,以确保良好的用户体验。
iText 是一个强大的Java库,专门用于创建和修改PDF文档。在PDF文档中,目录(或书签)是用户友好的导航工具,可以帮助读者快速跳转到特定章节或页面。本篇文章将深入探讨如何使用iText来生成PDF的目录。 首先,理解...
iTextPDF是一个流行的Java库,用于处理PDF文档,它提供了丰富的功能,包括在PDF上添加文本、图像、表格等。在这个场景中,我们将深入探讨如何使用iTextPDF在PDF中实现绝对位置的文本插入,以及如何处理多页情况。 ...
在IT行业中,iText是一个广泛使用的Java和.NET库,用于创建、编辑和处理PDF文档。在最新的版本iText 7中,它提供了丰富的功能,包括将PDF文档转换为图像。这个话题涉及到PDF处理和图像转换两个核心领域。下面将详细...
IText是一款广泛使用的Java库,专门用于创建和编辑PDF及Word文档。在本文中,我们将深入探讨如何利用IText库生成这两种格式的文档,并通过实际的源码示例来理解其工作原理。 首先,让我们从PDF(Portable Document ...
1. **导入itextpdf库**:在项目中添加itextpdf的依赖,这通常通过Maven或Gradle等构建工具完成。 2. **读取Excel**:使用Apache POI等库读取Excel文件,获取其内容和样式信息。 3. **创建PDF文档**:初始化一个...
在实际开发中,`iText操作Pdf简单整理.txt`可能包含了关于如何使用这些功能的示例代码和说明,通过学习和实践,开发者能够熟练掌握iText,满足各种PDF文档处理需求。 总的来说,iText是一款功能丰富的PDF处理工具,...
iText生成pdf解决中文不显示字库,pdf凉字不显示,由于生成iText插件生成pdf的时候中文会显示不出来,遇到过的是"凉"字,查到是字体库的原因,网上下载字体库msyh.ttc,生成的时候指定字体库,就可以解决了,小bug一...
在 Java 开发中,iText 提供了丰富的 API,使得开发者可以方便地在代码中创建 PDF 文件、添加文本、图像、表格、链接等元素,甚至进行数字签名和表单处理。在本项目中,我们看到使用了 iText 7.0.2 版本,这是 iText...
Itext是PDF处理的强力工具,它允许开发者进行各种操作,包括添加文本、图像、表格,以及处理PDF的安全性、表单、链接等。对于图层管理,Itext提供了对PDF/CO(PDF with Optional Content)标准的支持,即对PDF中的...
提供的加水印代码可以帮助开发者理解如何使用iText库在PDF文档上添加透明或不透明的文字或图像水印。而去水印功能则相对复杂,可能涉及到对PDF结构的深入理解,因为PDF标准并不支持直接删除水印,通常需要通过解析...
除此之外,iTextPDF还具备一些高级功能,如数字签名、文档加密、水印添加等,这些都能增强PDF文档的安全性和专业性。例如,通过数字签名,可以确保PDF文件的完整性和来源的真实性;通过加密,可以保护敏感信息不被...
1. iText主库:`itextpdf-版本号.jar` - 这是iText的核心库,包含了生成PDF的所有基本功能。 2. Bouncy Castle库:`bcprov-jdk15on-版本号.jar` - iText在处理加密和数字签名时依赖Bouncy Castle库,因此需要将其...
Itext提供了一系列API,可以方便地创建PDF文档,包括添加文本、图像、表格、超链接等元素。它可以处理PDF文档的各种复杂性,比如页面布局、样式设置、数字签名等。通过Itext,你可以构建完全自定义的PDF文档,满足...
《iTextPDF 5.5.13:创建PDF文件的高效工具》 iTextPDF是一款功能强大的Java库,主要用于创建、编辑以及处理PDF文档。版本5.5.13是其历史版本之一,提供了丰富的API和功能,使得开发者能够方便地在Android平台上...
- `kernel`:这是Itext的核心模块,提供了基本的PDF文档操作功能,如创建、打开、修改PDF文档,以及添加文本、图像和表格等元素。 2. **布局模块**: - `layout`:此模块提供了高级布局功能,使得开发者能够更...
1. **iTextPDF**: iTextPDF是iText项目的一部分,它提供了丰富的API来生成、修改和解析PDF文档。5.5.5版本是iText的一个较新版本,增加了许多功能和性能优化。例如,它可以创建动态表单、添加图像、设置文本样式、...
1. **安装与引入**:首先,介绍如何将iTextPDF库引入到Java项目中,通常通过Maven或Gradle的依赖管理来实现。同时,可能会提到不同版本的兼容性和选择合适的版本。 2. **基本概念**:解释PDF文档的基本结构,如页面...
可以使用`Paragraph`类添加文本,如示例中的`document.add(new Paragraph("使用iText生成PDF"))`。 5. **创建表格**: `Table`类用于创建PDF中的表格。示例中创建了一个2行4列的表格,并添加了单元格。`addCell()...