Printing PDFBox-打印加密文件

Printing PDFBox-打印加密文件,printing,pdfbox,Printing,Pdfbox,我试图通过打印来删除一些使用PDFBox 1.8.0的认证PDF上的保护,下面是中的示例 我正在使用Microsoft打印到PDF打印机。 我在第74行的课堂上得到一个NPE,说我没有这个文档的访问权限: java.lang.NullPointerException at org.apache.pdfbox.pdmodel.PDPageable.<init>(PDPageable.java:74) at org.apache.pdfbox.pdmodel.PDPage

我试图通过打印来删除一些使用PDFBox 1.8.0的认证PDF上的保护,下面是中的示例

我正在使用Microsoft打印到PDF打印机。 我在第74行的课堂上得到一个NPE,说我没有这个文档的访问权限:

java.lang.NullPointerException
    at org.apache.pdfbox.pdmodel.PDPageable.<init>(PDPageable.java:74)
    at org.apache.pdfbox.pdmodel.PDPageable.<init>(PDPageable.java:96)
    at com.util.pdf.decrypt.Main.decryptAndOcr(Main.java:179)
    at com.util.pdf.decrypt.Main.main(Main.java:82)
但是当使用
pdDocument.getCurrentAccessPermission()检查时,权限仍然为空

问题:如何设置PDF的打印访问权限


注意:当我直接从操作系统使用Microsoft Print to PDF打印机打印时,证书将从打印的PDF中删除,因此该过程正常。

您提到的示例适用于2.0。使用2.0(而不是1.8),或在1.8中执行以下操作:

PDDocument doc = PDDocument.load(new File("..."));
if (doc.isEncrypted())
{
    doc.openProtection(new StandardDecryptionMaterial("password"));
}
还是用这个

PDDocument doc = PDDocument.loadNonSeq(new File("..."), null);
这应该是你问题的第二部分。保存PDF文件时将使用protect()

您不应该使用1.8.0。这是几年前的事了。如果必须使用1.8,请使用当前版本,即1.8.11

PDDocument doc = PDDocument.load(new File("..."));
if (doc.isEncrypted())
{
    doc.openProtection(new StandardDecryptionMaterial("password"));
}
PDDocument doc = PDDocument.loadNonSeq(new File("..."), null);