如何解决使用 iText 将 HTML 转换为 PDF 时出现空指针异常
当 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)
解决方法
这里有问题的 CSS 部分是 style="position: absolute; top: 100px;"
。您的主体对于将元素定位在一页上来说非常大,并且带有分页符的绝对定位是基于意见的事情。虽然 iText 可以更优雅地处理这种情况,但您仍然可以尝试不同的方式来添加一些间距(例如使用边距),这应该对您有用。
删除上面指出的有问题的 CSS 后得到的视觉结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。