【问题标题】:NullPointerException when getting Page Information获取页面信息时出现 NullPointerException
【发布时间】:2019-03-12 16:24:03
【问题描述】:

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

【问题讨论】:

  • 你没有第1页
  • @JEY:我认为这不是问题所在。当我注释掉该行时,文档生成时没有任何错误,并且包含所有 3 页。这很奇怪。

标签: java pdf itext itext7


【解决方案1】:

那是因为启用了立即刷新模式。

要么预先保存所需的信息,要么使用三参数构造函数来创建文档:

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

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

【讨论】:

    【解决方案2】:

    以下一项为空:

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

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

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

    【讨论】:

    • 我认为这不是问题所在。当我注释掉该行时,文档生成时没有任何错误,并且包含所有 3 页。
    猜你喜欢
    • 1970-01-01
    • 2019-01-20
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多