最近工做中要使用到HTML转 PDF。使用的技术是比较流行的 IText + flying-saucer 。思路就是将模板文件导入数据,而后将这个模板文件转换为PDF,而后碰到一个很是无语的问题。html
The element type "ul" must be terminated by the matching end-tag "</ul>工具
真的,字面上看不就是一个标签没闭合吗。没那么简单。spa
报错信息:code
要说到这个错误,有必要说一点 IText自身的一个很严重的问题就是解析CSS有很大的问题。xml
并且要注意:htm
输入的HTML页面必须是标准的XHTML页面。页面的顶上必须是这样的格式:element
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
不然会报一些奇怪的错误。it
而且HTML页面的语法必须是很是严谨的,全部标签都必须闭合等等(因为flying-Saucer作了XML解析的工做,不严谨会报错的。),这是对页面的第一个要求 。io
也就是说一些在HTML中很是宽松的语法,好比 br 没加 / ,也会报错,必须写成 <br/>table
全部的标签必须闭合,由于它使用的是xml解析。
上面说的这么多,其实并非我报的这个错误的解决方案,也许真的标签没闭合,也是报这个错误,但若是你找完全部标签,检查发现都闭合了的时候,这时候可能就要考虑是否是这个工具的问题。
我一行一行的检查,最终肯定出问题的地方。
与报错信息彻底没有任何关联吧,解析完table后解析这里就报错了,什么缘由?
大概是table里面的元素遍历后因为li标签没检测到它的父标签而报错。这里<li>若是使用的父标签是<ol>就会ol没闭合报错,UL就会报UL没闭合。(这个应该是特例)
在其余位置也会出现子标签中有子标签没闭合可能也是报父标签的闭合错误,
我替换以下:
问题解决
最终效果:
如上全部的,都应该是你的后台代码没有问题!