【问题标题】:Getting Null Pointer Exception while converting HTML to PDF using iText使用 iText 将 HTML 转换为 PDF 时出现空指针异常
【发布时间】:2021-02-10 21:08:02
【问题描述】:

当 HTML 代码适合它正在生成的一页时,我正在使用 iText HTML 到 pdf,但是当 HTML 代码太大时它不起作用 使用Java Code HtmlConverter.convertToPdf(htmlFile, pdfFile);,使用itext7 html2pdf-2.1.6是版本
java代码

package com.test;

import java.io.File;

import com.itextpdf.html2pdf.HtmlConverter;

public class html2pdf {
    public static void main(String[] args) throws Exception {
        String ws = "/workspace/wintmp/u02/ffsdev/templates/";
        File htmlFile = new File(ws+"QUOTE001.html.tpl.html");
        
        File pdfFile = new File(ws+"QUOTE001.pdf");
        
        HtmlConverter.convertToPdf(htmlFile, pdfFile);

    }
}

下面是工作 HTML 代码

   
https://jsfiddle.net/praveenrk/L0nzbu7y/
不工作

   https://jsfiddle.net/praveenrk/0rvL2gx9/

例外是

Exception in thread "main" java.lang.NullPointerException
    at com.itextpdf.layout.renderer.AbstractRenderer.getOccupiedAreaBBox(AbstractRenderer.java:1010)
    at com.itextpdf.layout.renderer.AbstractRenderer.getBorderAreaBBox(AbstractRenderer.java:1020)
    at com.itextpdf.layout.renderer.AbstractRenderer.drawBorder(AbstractRenderer.java:883)
    at com.itextpdf.layout.renderer.TableRenderer.drawBorder(TableRenderer.java:1345)
    at com.itextpdf.layout.renderer.TableRenderer.draw(TableRenderer.java:1093)
    at com.itextpdf.layout.renderer.AbstractRenderer.drawChildren(AbstractRenderer.java:855)
    at com.itextpdf.layout.renderer.BlockRenderer.draw(BlockRenderer.java:580)
    at com.itextpdf.layout.renderer.DocumentRenderer.flushSingleRenderer(DocumentRenderer.java:147)
    at com.itextpdf.layout.renderer.RootRenderer.addChild(RootRenderer.java:290)
    at com.itextpdf.html2pdf.attach.impl.layout.HtmlDocumentRenderer.addChild(HtmlDocumentRenderer.java:185)
    at com.itextpdf.layout.RootElement.createAndAddRendererSubTree(RootElement.java:377)
    at com.itextpdf.layout.RootElement.add(RootElement.java:106)
    at com.itextpdf.layout.Document.add(Document.java:160)
    at com.itextpdf.html2pdf.attach.impl.tags.HtmlTagWorker.processBlockChild(HtmlTagWorker.java:188)
    at com.itextpdf.html2pdf.attach.impl.tags.HtmlTagWorker.processTagChild(HtmlTagWorker.java:154)
    at com.itextpdf.html2pdf.attach.impl.tags.BodyTagWorker.processTagChild(BodyTagWorker.java:111)
    at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.visit(DefaultHtmlProcessor.java:353)
    at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.visit(DefaultHtmlProcessor.java:337)
    at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:209)
    at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:183)
    at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:161)
    at com.test.html2pdf.main(html2pdf.java:14)

【问题讨论】:

  • 我不知道是谁加了一个近距离投票,但我认为这不再合适了。满足所有基本要求:(1)最简单的重现代码(2)传递输入(3)失败输入(4)精确错误(堆栈跟踪)。唯一缺少的是 iText 本身的确切版本,但鉴于 pdfHTML 的版本,我认为我们不需要它。

标签: java itext7 html2pdf


【解决方案1】:

这里有问题的 CSS 部分是 style="position: absolute; top: 100px;"。您的主体对于要定位在一个页面上的元素来说非常大,并且带有分页符的绝对定位是基于意见的事情。虽然 iText 可以更优雅地处理这种情况,但您仍然可以尝试使用不同的方式添加一些间距(例如,使用边距),这应该可以解决问题。

删除上面指出的有问题的 CSS 后我得到的视觉结果:

【讨论】:

    猜你喜欢
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 2020-09-04
    相关资源
    最近更新 更多