我一直致力于在PDF上设置密码以防止复制/粘贴并允许打印,添加水印并设置所有者密码以防止进一步更改.
一切都按预期运作良好,没有问题.
然后我免费下载了15天pdf清除工具,a-pdf.眨眼间它会删除所有保护,无论密码的复杂程度如何(尝试使用50个字符长度的各种字符).
我看到itextPDF中还有其他方法来加密文档.我使用了以下内容:
File f = new File("C:/TEMP/zip/waterMarked.pdf");
String hardPassword = "D 5BaIZQ@ CqAk+NQCW)7Dkgb@i&02ifu!2TMX*d 0TGK(j(Kq";
byte[] hardPasswordByte = hardPassword.getBytes();
PdfReader reader = new PdfReader("C:/TEMP/zip/Original_document-9.pdf");
FileOutputStream out = new FileOutputStream(f);
PdfStamper stamp = new PdfStamper(reader, out);
//first argument is the user password. If set to something it asks for password when opening file, not wanted.
stamp.setEncryption(null, hardPasswordByte, PdfWriter.ALLOW_PRINTING, true);
//do stuff on the stamper, save file.
Run Code Online (Sandbox Code Playgroud)
有谁知道从Java代码保护PDF文档的更好方法?
iPD*_*dev 11
PDF文件支持2个密码:用户密码和所有者密码.如果用户知道任何这些密码,则可以查看PDF文件.如果文件具有用户密码,则在使用PDF查看器打开文件时,查看器会要求用户输入密码,并且用户或所有者密码将起作用.如果文件只有所有者密码,则会在尝试更改文件的访问权限时自动显示文档并需要密码.这是PDF规范建议的操作流程,但实际上它的工作方式如下:如果文件受用户密码保护,则密码破解需要强力方法,密码越长,破解所需的时间越长.问题是您的真实用户需要密码来打开文件.如果文件仅受所有者密码保护,则有一个默认解密密钥(请记住,任何查看者都可以显示PDF文件而不请求密码),处理PDF文件的应用程序决定是否尊重文档访问权限.文件解密后,保存时不加密,输出文件不再有密码.由于您的文档只有所有者密码,因此该工具使用默认解密密钥可以毫无问题地删除它.
根据您的受众,有一些解决方案(或多或少与iText相关):简单的PDF加密(上述问题)如果您的受众普遍存在,例如您在网站上发布论文; 第三方DRM解决方案,更复杂,需要在用户的计算机上安装各种插件; 证书加密(不确定iText是否支持它),再次复杂,要求每个用户都拥有数字证书,并为每个用户定义文档访问权限.最后两个选项在受控企业环境中工作.