最近工做中要使用到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沒閉合。(這個應該是特例)
在其餘位置也會出現子標籤中有子標籤沒閉合可能也是報父標籤的閉合錯誤,
我替換以下:
問題解決
最終效果:
如上全部的,都應該是你的後臺代碼沒有問題!