有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

获取页面信息时发生java NullPointerException

我需要检测我的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)
// ...

共 (2) 个答案

  1. # 1 楼答案

    这是因为立即刷新模式已启用

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

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

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

  2. # 2 楼答案

    以下项之一为空:

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

    我想这可能是最后一次了,但你应该把它们都查出来

    您可能还会发现,使用the ^{} method意味着您不会混淆第一页是0还是1索引