为什么使用 PDFBOX 的受密码保护的 PDF 在 Microsoft Edge 浏览器中打开时没有密码?

Why password protected PDF using PDFBOX is opening without password in Microsoft Edge browser?

我使用 PDFBOX (v 2.0.16) 加密了一个 pdf 文件。当我尝试使用 adobe acrobat reader 打开这个受密码保护的文件时,它要求输入密码来解锁它,但是当我尝试使用 Microsoft Edge (v 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();
}

下面是受密码保护的文件link -

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

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

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

修复效果,这样做:

os.reset();

在保存之前写入 ByteArrayOutputStream