记得以前看到pdf资料,看到感兴趣的,想复制下来。可是因为pdf安全设置的原因,不能复制。特别是看一些技术性文档,看到一些代码,想自己跑,看一下结果。结果却不能复制。但是一行一行敲代码,又是费时费力。不久前看itext源码,发现居然可以用再次加密的方式,改变pdf的权限。
源码版本:itext5.0.5
条件:有文件打开密码
关键点:PdfReader.unethicalreading
……
if (openPassword == null) {
reader = new PdfReader(fis);
} else {
reader = new PdfReader(fis, openPassword.getBytes());
}
PdfReader.unethicalreading = true;//不为true不能成功。
PdfEncryptor.encrypt(reader, fos, true, userPassword, OwnerPassword, PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING);
……
是什么原因呢,看一下itext对打开权限判断:
/**
* Checks if the document was opened with the owner password so that the end application
* can decide what level of access restrictions to apply. If the document is not encrypted
* it will return <CODE>true</CODE>.
* @return <CODE>true</CODE> if the document was opened with the owner password or if it's not encrypted,
* <CODE>false</CODE> if the document was opened with the user password
*/
public final boolean isOpenedWithFullPermissions() {
return !encrypted || ownerPasswordUsed || unethicalreading;
}
而unethicalreading的定义又是:
public static boolean unethicalreading = false;
所以,只要unethicalreading 是true,就会被认为是有权限的!而这个unethicalreading又是开放的,这是不是itext故意留的后门呢,哈哈?
通过这个代码,我们可以设置自己想要的权限。我们也有自己设置的打开密码和所有密码。
当然,这份pdf也会有一个带锁的标志。因为它是加密了的。
通过稍微改一下代码,我们就可以完全解密。呵呵,这里就不说了。
分享到:
相关推荐
总之,iText是一个强大的Java PDF处理工具,无论你是要创建简单的单页文档还是复杂的多栏表格,或者是带有交互式表单和数字签名的高级PDF,它都能提供全面的支持。通过学习和使用iText,开发者可以高效地在Java应用...
在使用iText时,首先需要引入相应的库文件,如压缩包中的`itextpdf-5.5.1.jar`,这是iText的主要库,包含了处理PDF文档的核心功能。如果需要处理中文字符或者亚洲语言,还需要引入`itext-asian-5.1.0.jar.zip`解压后...
在Android平台上,iTextPDF也能用于生成移动设备上的PDF文件。 版本5.5.12是iTextPDF的一个重要版本,它修复了前一版本的一些已知问题,增强了性能和稳定性,并引入了一些新特性。虽然现在已经有更新的版本,但对于...
iTextPDF是一个强大的Java库,专门用于创建和处理PDF文档。这个"itextpdf.zip"压缩包包含了iTextPDF库的组件以及一个使用说明,帮助用户理解和应用这个库。主要包含以下两个JAR文件和一个文本文件: 1. **itext-...
《深入解析iTextPDF 5.5.5:构建PDF文档的强大工具》 在信息化高度发展的今天,PDF作为一种跨平台、格式稳定的文档格式,被广泛应用于各行各业。...对于需要处理PDF文档的开发者来说,iTextPDF是不可或缺的工具之一。
iTextpdf是一款强大的Java库,专门用于生成和编辑PDF文档,同时也支持在Android平台上使用。这个库使得开发者能够轻松地在应用程序中创建、修改和处理PDF文档,包括添加文本、图像、表格、链接等元素。在标题中提到...
iText是一款广泛使用的开源Java库,专门用于生成和编辑PDF文档。这个中文帮助文档提供了详细的指导,帮助开发者理解和使用iText来创建包含丰富内容的PDF文件。以下是对iText库和文档中涉及的关键知识点的详细解释: ...
2. **创建PdfCopy对象**:`PdfCopy`用于将多个PDF文件中的页面复制到一个新的文档中。通过`new PdfCopy(document, new FileOutputStream(savepath));` 初始化`PdfCopy`对象,其中`savepath`是合并后PDF文件的保存...
例如,`com.itextpdf.text.Document` 和 `com.itextpdf.text.Paragraph` 是创建PDF的基本元素。通过这些类,开发者可以构建整个PDF结构,并调用相应的方法完成文档的创建和写入。 总之,iText 5.5.5是处理PDF文档的...
总之,Adobe PDF编辑器与Java的iTextPDF库结合,为企业提供了灵活且高效的PDF文档处理方案,无论是简单的内容替换还是复杂的文档生成,都能满足需求。在实际项目中,应根据业务场景选择合适的方法,优化代码以提高...
iTextPDF是一款强大的Java...总的来说,iTextPDF是Java开发中不可或缺的PDF处理工具,它提供了全面的功能,可以帮助开发者轻松地创建和处理PDF文档。通过深入学习和实践,你可以利用这个库实现各种复杂的PDF转换任务。
这通常涉及到解压iText的jar包,将字体文件复制到一个目录,然后重新打包jar。 3. **注册字体**:在代码中,使用`FontFactory.register()`方法注册新添加的字体。例如: ```java FontFactory.register("/path/to/...
总结,iTextPDF 5.5.5是一个强大的PDF处理工具,无论是在企业级应用还是个人项目中,都能发挥重要作用。通过熟练掌握其API和使用技巧,开发者可以高效地创建专业且富有表现力的PDF文档,满足多样化的业务需求。
- **安全性**:确保转换过程中不引入恶意代码,注意PDF的安全设置,如禁止脚本执行、限制复制和打印等。 总的来说,iText7-pdfoffice是Java开发中一个非常实用的工具,可以帮助开发者轻松实现Office到PDF的转换,...
同时,为了防止恶意篡改,我们还可以将水印设置为不可选择和复制,进一步增强文档的安全性。 通过学习和掌握iText库,开发者可以灵活地生成和编辑PDF文档,包括添加水印这一关键功能。这不仅可以提升文档的专业性,...
这个压缩包包含了两个主要的JAR文件:`itext-asian-5.2.0.jar`和`itextpdf-5.5.13.1.jar`,它们在处理PDF文件时扮演着重要的角色。 `itext-asian-5.2.0.jar`是iText的一个扩展,主要是为了支持亚洲语言,如中文、...
9. **安全和加密**:iText支持设置PDF的安全性和访问控制,保护文档不被非法复制或编辑。 10. **PDF版本兼容**:iText库生成的PDF文件可以遵循不同的PDF标准,如PDF/A、PDF/UA等,满足不同应用场景的需求。 在实际...
<artifactId>itextpdf 版本号 ``` 确保替换“版本号”为iText库的最新稳定版本。 在Java代码中,你可以通过以下方式初始化iText并创建一个PDF文档: ```java import com.itextpdf.text.Document; import ...
除了生成PDF,iTextPDF也能解析和操作已存在的PDF文件。可以读取PDF文档的信息、提取文本和图像,或者合并多个PDF文档为一个。这对于文档管理和处理流程自动化来说,是非常实用的。 总结,iTextPDF 5.5.5是一个全面...
在本项目中,我们使用了Java的ITEXT库来处理PDF文档,以及keytool工具来生成数字证书。以下是关于这些知识点的详细说明: 1. **PDF数字签名**:PDF数字签名是一种用于验证PDF文档未经修改的机制。它使用非对称加密...