在阅读不同的pdf文档时,我遇到了一个问题,很难找到它的原因。我刚刚运行了下面两个pdf的源代码,它们的属性如下所示,我已经得到了页码。然而,每当我读到标有* (PDF 2)的第三个时,我的程序就会崩溃,我无法捕获抛出的null异常。我想知道为什么程序会崩溃,为什么我不能捕获抛出的异常。此外,我该如何解决这个问题?
更新:文本版本:itext 5.5.1文件被购买,并且索赔人限制我与第三人或在网站上分享
文档属性 Abbreviation: A: ALLOWED NA: NOT ALLOWED NS: NO SECURİTY AV: ALL VERSION
PDF 1 PDF 2 PDF 3
*
printing | A A A
document assembly | NA NA NA
content copying | A A A
content copying for accessibility | A A A
page extraction | NA NA NA
commenting | A NA A
filling of form fields | A NA A
signing | NA NA NA
creation of template pages | A NA A
security mode | NS PASSWORD SECURITY NS
can be opened by | AV ACROBAT 7.0 AND LATER AV
tagged pdf | YES NO NO
^
^
Note of PDF 2: All contents of document are encrypted and search engine cannot access the document's metadata
的代码 PdfReader pdfReader = null;
try {
RandomAccessFile rAF = new RandomAccessFile(this.openFilePath, "r");
RandomAccessSourceFactory sF = new RandomAccessSourceFactory();
RandomAccessFileOrArray rA = new RandomAccessFileOrArray( sF.createSource(rAF));
System.out.println("[DEBUG] - 4");
System.out.flush();
pdfReader = new PdfReader(rA, null);
System.out.println("[DEBUG] - 5");
System.out.flush();
this.totalPage = pdfReader.getNumberOfPages();
System.out.println("[DEBUG] - 6");
System.out.flush();
} catch (Exception e) {
// Technical Exception
System.out.println("[DEBUG] - 7");
System.out.flush();
e.printStackTrace();
} finally {
System.out.println("[DEBUG] - In finally clause");
System.out.flush();
line 179 pdfReader.close();
System.out.println("[DEBUG] - Near Out of finally clause");
System.out.flush();
}
System.out.printf("[DEBUG] - pdfReadern");
System.out.flush();
抛出异常[DEBUG] - 4
[DEBUG] - In finally clause
Exception in thread "main" java.lang.NullPointerException
at extractTotalPageNo(ControlCenter.java:179)
at control(ControlCenter.java:99)
at Manage.main(Management.java:22)
我已经按照@Henry的建议运行了这个程序。
之后,我意识到系统实际上导致了一个错误,因为我忘记将BouncyCastle jar添加到我的CLASSPATH。包中。当程序尝试读取加密文档时,我假设它调用iText的PdfReader
构造函数中的加密功能。
此外,由于iText依赖于BouncyCastle, java编译器抱怨没有找到调用加密函数的类。
总之,解决方案是将BouncyCastle jar添加到CLASSPATH中。
从输出来看,这一行似乎有问题
pdfReader = new PdfReader(rA, null);
和pdfreader
从未被设置为非null
的值。
当您尝试在第179行访问它时,这会导致NPE,因此隐藏了根本原因,似乎是Throwable
而不是Exception
,因为它没有被捕获。
你可以让close成为条件语句:
if (pdfreader != null) {
pdfReader.close();
}
我的两分钱:在我们的案例中,是授权问题导致SAP-PI在尝试读取PDF文件时崩溃。这意味着如果授权导致构造函数崩溃而不发出异常,则该类没有正确构建。