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