最近工作中要使用到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标签没检测到它的父标签而报错。这里

如果使用的父标签是

  1. 就会ol没闭合报错,UL就会报UL没闭合。(这个应该是特例)

在其他位置也会出现子标签中有子标签没闭合可能也是报父标签的闭合错误,

我替换如下:

问题解决

最终效果:

如上所有的,都应该是你的后台代码没有问题!

java判断标签闭合_html转PDF(java)非常奇怪的错误,标签没闭合相关推荐

  1. java 判断类型_如何快速入门Java编程学习(干货)

    一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...

  2. java判断是否第一次出现_利用java判断字符首次出现的位置,java替换最后一个特定字符...

    利用java判断字符首次出现的位置利用爪哇判断字符首次出现的位置, 目的: (学习视频分享:java视频教程 实现代码如下: 导入Java.util.收藏品: 导入Java.util.LinkedLi ...

  3. java判断是否能上网_用Java检测远程主机是否能被连接

    用Java检测远程主机是否能被连接 有人推荐使用java的Runtime.exec()方法来直接调用系统的Ping命令.也有人完成了纯Java实现Ping的程序,使用的是Java的NIO包(nativ ...

  4. java 判断是否换行_如何在java中检测换行符

    是的,我已经阅读了一些关于换行符的其他帖子,但他们没有帮助我.如何在java中检测换行符 我的Java程序应该读取一个.PHP文件,并将源代码分成逐行格式.问题是我似乎无法区分一个换行符和另一个换行符 ...

  5. java判断地图范围_百度地图java 判断当前位置是否在多边形区域内

    package com.haiyisoft.cAssistant.adapter.hessian; import java.awt.geom.Point2D; import java.util.Arr ...

  6. java 判断顺序_通过指令码来判断Java代码的执行顺序(++问题与return和finally的问题)...

    问题 在<深入理解Java虚拟机>一书中遇到了如下代码: public int method() { int i; try { i = 1; return i; } catch (Exce ...

  7. java判断所有域名后缀_使用Java的IO操作,提取全世界所有的三位域名后缀

    一.  前言 最近又想注册域名,便从TLD List 中下载了已经收录的全世界所有的域名后缀,然后使用Java的IO相关操作,将所有的三位域名后缀提取了出来.先给出下载文件: 所有域名后缀 二.  代 ...

  8. java判断string是数字_(转)java判断string变量是否是数字的六种方法小结

    1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < str.length(); i++){ ...

  9. java 判断日期连续_如何在Java中检查日期是否大于另一个日期?[重复]

    小编典典 从这里拍摄: import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Dat ...

最新文章

  1. 微型计算机步进电机控制,步进电机的微型计算机控制
  2. 即时通信是机遇也是挑战
  3. 三维列表转换成数组时,维度却只有二维
  4. wxWidgets:命名空间
  5. BZOJ1503[NOI2004]郁闷的出纳员——treap
  6. 深入浅出 Spring
  7. Android studio 使用心得(八)----测试程序单元测试
  8. 【零基础学Java】—数组(五)
  9. suse linux rpm 安装
  10. Dbutils常见方法
  11. Nginx配置使用upstream负载均衡和proxy_cache缓存
  12. SqlServer——正则表达式
  13. 英语基础语法-语态(被动语态Be done)
  14. 找出阿里云RDS数据库的IP地址
  15. visio和preject冲突_我平时用Project和visio,WPS能代替嘛?
  16. ACM 常用思维技巧
  17. 网页调用 iOS/Android 客户端
  18. 解决:vue项目中页面顶部和左边出现空白
  19. 2021亚丁百度网址URL批量采集工具【过安全验证】
  20. 关于apk安全检测的第三方在线网站

热门文章

  1. ❤️数据可视化❤️:基于Echarts + GeoJson实现的地图视觉映射散点(气泡)组件【15】 - 江西省
  2. ytu 2463:给小鼠补充代码(DFS 深度优先搜索)
  3. 国外LEAD域名邮箱获取途径
  4. 微信怎么制作小程序?制作微信小程序流程
  5. A - 小彭玉的扫荡食堂计划
  6. error[E0308]: Rust 闭包函数锁定参数类型
  7. IpadOS15.4系统通用控制开启
  8. PCA针对TE过程(田纳西伊斯曼过程)数据的故障监测处理
  9. 机房空调漏水原因和常用处理方法
  10. 温州大学c语言期末试卷,2016年温州大学物理与电子信息工程学院综合卷之C语言程序设计复试笔试最后押题五套卷...