hereの例に続いて、PDFBox 1.8.0を使用して印刷することで、一部の認定済みPDFの保護を解除しようとしています。PDFBox - 暗号化されたファイルを印刷
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.IOException;
import javax.print.PrintException;
import javax.print.PrintService;
import org.apache.log4j.Logger;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPageable;
public class PDFPrinter {
private static final Logger LOGGER = Logger.getLogger(PDFPrinter.class);
public static void main(String[] args) throws IOException, PrinterException, PrintException {
LOGGER.info("Running...");
PDDocument pdDocument = PDDocument.load("C:\\_APPS\\input.pdf");
PrinterJob printerJob = PrinterJob.getPrinterJob();
PrintService printService = null;
if (printerJob.printDialog()) {
printService = printerJob.getPrintService();
LOGGER.info("Using printer: " + printService.getName());
}
printerJob.setPageable(new PDPageable(pdDocument));
printerJob.print();
pdDocument.close();
}
}
私はMicrosoft Print to PDFプリンタを使用しています。確かにpdDocument.getCurrentAccessPermission()
をチェックする時にnullである
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)
を: は、私は、この文書に設定された何のアクセス権限を持っていないされていないと言ってPDPageableクラス@ライン74にNPEを取得しています。
AccessPermission accessPermission = new AccessPermission();
accessPermission.setCanPrint(true);
StandardProtectionPolicy spp = new StandardProtectionPolicy("", "", accessPermission);
try {
pdDocument.protect(spp);
} catch (BadSecurityHandlerException bhe) {
bhe.printStackTrace();
}
をしかしpdDocument.getCurrentAccessPermission()
をチェックするときの権限は、まだヌルです: は、だから私は手動でちょうど印刷権限で、ユーザー名やパスワードなしでいくつかのアクセス権限を設定しようとしました。
質問:PDFへの印刷アクセス権限を設定するにはどうすればよいですか?
注:OSから直接Microsoft Print to PDFプリンタを使用して印刷する場合は、印刷されたPDFから証明書が削除されるため、プロセスは機能します。