PdfRenderer 总是在渲染受密码保护的文件后抛出'password required' SecurityException



我有以下安卓代码:

private void test() throws IOException {
File f1 = new File("/sdcard/password-protected-pdf.pdf");
File f2 = new File("/sdcard/normal-pdf.pdf");
this.renderPDF(f1);
this.renderPDF(f2);
}
private void renderPDF(File f) throws IOException {
PdfRenderer renderer = null;
try {
renderer = new PdfRenderer(ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY));
} catch (SecurityException e) {
e.printStackTrace();
} finally {
if (renderer != null)
renderer.close();
}
}

f1的 PDF 文件受密码保护。f2的 PDF 文件不是。当我运行代码时,由于某种原因(password required or incorrect password(,这两个文件都抛出了安全异常。当我正确切换顺序(f2先行,f1秒(时,只有受密码保护的 PDF 会引发异常。

我做错了什么吗?谢谢。

编辑:我怀疑它与返回静态对象的open()方法有关。但是,我无法找到一种有效破坏它的方法(我尝试close()返回的ParcelFileDescriptor对象,但没有运气(。

我也遇到了类似的问题。 您可以使用 PDFBox for Android https://github.com/TomRoush/PdfBox-Android 并加载文档并检查密码保护。如果FIL是安全的,那么它将抛出IOException

注意:使用此库会增加您的应用大小。

private void test() throws IOException {
File f1 = new File("/sdcard/password-protected-pdf.pdf");
File f2 = new File("/sdcard/normal-pdf.pdf");
this.renderPDF(f1);
this.renderPDF(f2);
}
private void renderPDF(File f) throws IOException {
PdfRenderer renderer = null;
try {
// That will throw if document is password protected
PDDocument.load(f)
renderer = new PdfRenderer(ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY));
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
// Check for Password
e.printStackTrace();
} 
finally {
if (renderer != null)
renderer.close();
}

}

相关内容

  • 没有找到相关文章

最新更新