关于iText的html转pdf报NullPointerException(空指针)的问题

1.报错代码

		String file1 = "C:\\Users\\86166\\Desktop\\新建文本文档 (16).html";
		String url = new File(file1).toURI().toURL().toString();
		String outputFile = "C:\\Users\\86166\\Desktop\\contractTemplate1111.pdf";
		OutputStream os = new FileOutputStream(outputFile);

		ITextRenderer renderer = new ITextRenderer();
		renderer.setDocument(url);
		// 解决中文问题
		ITextFontResolver fontResolver = renderer.getFontResolver();
		try {
			fontResolver.addFont("web-admin\\web\\pdf-source\\simsun.ttc",
					BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		renderer.layout();
		try {
			renderer.createPDF(os);//这里是报错行
			System.out.println("转换成功!");
			os.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

2.报错问题

java.lang.NullPointerException
	at org.xhtmlrenderer.css.style.derived.BorderPropertySet.lighten(BorderPropertySet.java:120)
	at org.xhtmlrenderer.render.BorderPainter.paintBorderSide(BorderPainter.java:112)
	at org.xhtmlrenderer.render.BorderPainter.paint(BorderPainter.java:69)
	at org.xhtmlrenderer.render.AbstractOutputDevice.paintCollapsedBorder(AbstractOutputDevice.java:149)
	at org.xhtmlrenderer.newtable.TableCellBox.paintCollapsedBorder(TableCellBox.java:328)
	at org.xhtmlrenderer.layout.Layer.paintCollapsedTableBorders(Layer.java:451)
	at org.xhtmlrenderer.layout.Layer.paintBackgroundsAndBorders(Layer.java:254)
	at org.xhtmlrenderer.layout.Layer.paint(Layer.java:329)
	at org.xhtmlrenderer.pdf.ITextRenderer.paintPage(ITextRenderer.java:384)
	at org.xhtmlrenderer.pdf.ITextRenderer.writePDF(ITextRenderer.java:348)
	at org.xhtmlrenderer.pdf.ITextRenderer.createPDF(ITextRenderer.java:315)
	at org.xhtmlrenderer.pdf.ITextRenderer.createPDF(ITextRenderer.java:246)
	at cn.forp.pitaya.utils.freemarkerToPDF.PdfUtil.main(PdfUtil.java:69)

3.出问题的原因

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge;Chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <meta name="generator" content="Aspose.Words for .NET 15.1.0.0" />
    <xlink rel="xlink" href="http://www.w3.org/1999/xlink" name="xlink" />

    <style type="text/css">
        body{
            font-family:SimSun;
            font-size:14px;
        }
        @page {
            size: 8.5in 11in;
            @top-center{
                content: element(pageHeader);
            }
            @bottom-center {
                content: counter(page) " / " counter(pages);
            }
        }
        #pageHeader{
            position: running(pageHeader);
        }
        .webuploader-container{display:none !important}
        .hide{display:none !important}
        .form-control{display:none}
        *{font-size: 12px !important;border-color: #999 !important}
        .table-bordered,.table-bordered th,.table-bordered td{border-color: #999 !important}
        h3{font-size: 16px !important}
        .webuploader-pick{color: #ffffff !important;height: 34px !important;line-height: 1.5 !important;display: none}
        .btn-primary{background-color: #2dc3e8 !important;color: #ffffff !important}
        .btn-warning{background-color: #f0ad4e !important;color: #ffffff !important}
        .flow-title{background-color: #fcfbf3 !important;color: #333333 !important;}
        .info-table th{background-color: #ffffff !important}
        .table-info{table-layout: fixed !important}
        .table-info td:nth-child(2n+1),.table-combine>:first-child{background-color: #fcfbf3 !important;width: 120px !important}
        .table-info th, .table-info td{padding: 3px 5px !important}
        .table-info .info-table td{background-color: transparent !important}
        .complex-form{overflow: hidden !important}
        table[fieldtype="set"] th {white-space: normal !important}
        input.hide{display: none !important;visibility: hidden !important}
        #printView{position: static !important}
        table th, table td{padding: 3px 5px !important;background-color: #ffffff !important;}
        #flowFileArea>td,#flowFileArea+tr>td{padding: 0 !important}
        table[table-data-view='attachments-pdf'] th, table[table-data-view='attachments-pdf'] td:first-child{display: none !important}
        table[table-data-view='attachments-pdf'] th, table[table-data-view='attachments-pdf'] td:last-child{display: none !important}
        /*视图标题样式*/
        .form_title{
            font-size: 18px !important;
            text-align: center !important;
            line-height: 40px !important;
        }

        .table-info{width: 100%;border-collapse: collapse;border-top: 1px solid #dddddd; border-left: 1px solid #dddddd;}  /*border-collapse: collapse;这个样式iText可能是找不到  报错了*/
        .table-info th,.table-info td{padding: 5px;border-right: 1px solid #dddddd;border-bottom: 1px solid #dddddd;word-break: break-all;vertical-align: middle;}
        .table-info tr:last-child th,.table-info tr:last-child td{border-bottom: none}
        .table-info thead{border-bottom: 1px solid #dddddd}
        .table-info thead th{line-height: 2.6;text-align: center;background-color: #eff8ff !important;}
        .table-info td:nth-child(2n+1){width: 180px;text-align: right;background-color: #eff8ff !important;;padding:12px 5px;   }
        .table-info tr>:last-child{border-right: none}
        p{margin: 1px 0 0 0;}
    </style>
</head>
<body>
<div class="pd-10 bd" style="margin-top: 10px;border-left:0px;border-right:0px;" id="flowViewMainArea">
 <form class="form-horizontal" id="mainForm" enctype="multipart/form-data" action="" method="post">
    ${formViewHtml} /*这里面放的是标签*/
 </form>
</div>
</body>
</html>

4.解决办法

只能在style里面进行样式的改变,替换掉border-collapse: collapse;这个样式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值