为什么使用PDFBOX的密码保护PDF在Microsoft Edge浏览器中无需密码即可打开



我已经使用PDFBOX(2.0.16版(加密了一个pdf文件。当我试图使用adobe acrobat阅读器打开这个受密码保护的文件时,它会要求密码来解锁它,但当我试图用Microsoft Edge(44.18362.449.0版(打开它时,它不会要求密码就直接打开了它。

以下是用于带密码的锁定文件的示例代码-

private void lockPDFWithPassword(final OutputStream os) throws IOException {
PDDocument pdDocument = PDDocument.load(((ByteArrayOutputStream) os).toByteArray());
AccessPermission ap = new AccessPermission();
StandardProtectionPolicy spp = new StandardProtectionPolicy("sampleOwnerPassword", "sampleUserPassword", ap);
spp.setEncryptionKeyLength(128);
spp.setPermissions(ap);
pdDocument.protect(spp);
pdDocument.save(os);
pdDocument.close();
os.close();
}

以下是受密码保护的文件链接-

https://drive.google.com/open?id=1ifcfzGSA_Qr37TzmTqU4Qi14OdVVsdJV

这是两个串联的文件。第一个是未加密的文件,然后是加密的文件。当将两者分开时,它可以正常工作。

这种奇怪行为的原因是PDF查看器有显示损坏文件的策略。我猜一个观众用了第一个,另一个用了第二个。

修复效果,这样做:

os.reset();

然后保存,以便写入ByteArrayOutputStream的开头。

最新更新