获取页面信息时出现NullPointerException

问题描述 投票:1回答:2

我需要检测PDF文档的页面方向。这样做我正在尝试获取单个页面的页面大小:

pdfGen = createPdf.makePdf("doc.pdf");
document = pdfGen.getDocument();
document.setMargins(80, 80, 80, 80);
writer = pdfGen.getWriter();

document.add(new Paragraph("some content"));

document.add(new AreaBreak(PageSize.A4.rotate()));
document.add(new Paragraph("more content"));

document.add(new AreaBreak(PageSize.A4));
document.add(new Paragraph("even more content"));

Rectangle rect = document.getPdfDocument().getPage(1).getPageSizeWithRotation(); // e.g. the 1st page

document.close();
writer.close();

但我得到的只是这一行中的NullPointerExceptionRectangle rect = document.getPdfDocument().getPage(1).getPageSizeWithRotation()


java.lang.NullPointerException
    at com.itextpdf.kernel.pdf.PdfDictionary.get(PdfDictionary.java:456)
    at com.itextpdf.kernel.pdf.PdfDictionary.getAsArray(PdfDictionary.java:156)
    at com.itextpdf.kernel.pdf.PdfPage.getMediaBox(PdfPage.java:516)
    at com.itextpdf.kernel.pdf.PdfPage.getPageSize(PdfPage.java:125)
    at com.itextpdf.kernel.pdf.PdfPage.getPageSizeWithRotation(PdfPage.java:134)
    at com.myPackage.MyClass.myFunc(MyClass.java:15)
// ...
java pdf itext itext7
2个回答
2
投票

那是因为启用了立即冲洗模式。

在prehands之前保存所需的信息或使用三参数构造函数来创建文档:

Document document = new Document(pdfDoc, PageSize.A4, true);

正如immediateFlush的文档中所述:如果为true,请尽快将页面和页面相关的指令写入{@link PdfDocument}。这样做是为了减少内存使用量。


0
投票

以下之一为null:

  • document
  • document.getPdfDocument()
  • document.getPdfDocument().getPage(1)

我的猜测可能是最后一个,但你应该检查一下。

您可能还会发现使用the getFirstPage() method意味着如果第一页为0或1索引,您不会感到困惑。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.