从itext 7.0.4移动到7.1.11时出现问题

从itext 7.0.4移动到7.1.11时出现问题,itext,Itext,我有一些用itext 7编写的代码,可以加载带有IRandomAccessSource的大型PDF IRandomAccessSource rdSource = null; File pdf = new File(folder, getFilename()); rdSource = new RandomAccessSourceFactory().createBestSource(pdf.getCanonicalPath()); pdfReader = new PdfReader(rdSourc

我有一些用itext 7编写的代码,可以加载带有IRandomAccessSource的大型PDF

IRandomAccessSource rdSource = null;
File pdf = new File(folder, getFilename());
rdSource = new RandomAccessSourceFactory().createBestSource(pdf.getCanonicalPath());

pdfReader = new PdfReader(rdSource, null);
PdfDocument doc = new PdfDocument(pdfReader); // --> Throws NullPointerException with 7.1.11
如果调用PdfDocument doc=new PdfDocument(pdfReader),我会得到一个NullPointerException,因为我将Maven依赖项从7.0.4更改为7.1.11

java.lang.NullPointerException
    at com.itextpdf.kernel.pdf.PdfDocument.open(PdfDocument.java:1867)
    at com.itextpdf.kernel.pdf.PdfDocument.<init>(PdfDocument.java:252)
    at com.itextpdf.kernel.pdf.PdfDocument.<init>(PdfDocument.java:234)
    at pdfTextExtractor.ValidateSendung.execute(ValidateSendung.java:68)
    at pdfTextExtractor.TestValidateSendunge.test2(TestValidateSendunge.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

显然,新版本中需要传递ReaderProperty。 我把密码改成

pdfReader = new PdfReader(rdSource, new ReaderProperties());
现在它起作用了。。 这怎么可能,这在V.7.0.4中起作用,而现在它在7.1.11中发生了变化

总之,问题解决了


问候

你能分享那张大PDF吗?嗨,阿梅迪。。自更改后,任何尺寸都会出现此问题。。我使用一个600 KB的小PDF。我使用的包含客户数据。所以我不能分享。。将检查它是否也发生在其他PDF上。。然后我可以分享一个。嗨,Amedee,我添加了一个测试PDF到任何PDF上都会出现问题。嗨,Michael,我现在没有时间看它,但我希望通过您的代码示例+文件,其他人可以帮助您。请分享
NullPointerException
的完整堆栈跟踪。显然,您必须阅读所有文档(如果存在)并成为图书馆的大师来使用它。这是图书馆维护的一个很糟糕的例子。谢谢你,朋友。
Method PDFDocument.open --> Crashes on 
 memoryLimitsAwareHandler = reader.properties.memoryLimitsAwareHandler;
as reader.properties is null

   protected void open(PdfVersion newPdfVersion) {
        this.fingerPrint = new FingerPrint();

        try {
            EventCounterHandler.getInstance().onEvent(CoreEvent.PROCESS, properties.metaInfo, getClass());
            if (reader != null) {
                if (reader.pdfDocument != null) {
                    throw new PdfException(PdfException.PdfReaderHasBeenAlreadyUtilized);
                }
                reader.pdfDocument = this;
                memoryLimitsAwareHandler = reader.properties.memoryLimitsAwareHandler;
pdfReader = new PdfReader(rdSource, new ReaderProperties());