利用Flying sacucer 生成pdf的时候,好不容易写好了符合要求的html 页面,结果在生成pdf的时候出现了 这样的报错: Can't load the XML resource (using TRaX transformer)
网上一查,发现好多小伙伴都有这样的问题,总结为html及CSS的原因,并且有些会提示那些标签的问题,可是我这个竟然出现了这样的错误提示:org.xml.sax.SAXParseException; lineNumber: 136; columnNumber: 18; 元素内容必须由格式正确的字符数据或标记组成。
没有跟我有类似报错的小伙伴,单独查这个错误,查出个mybatis sql 之类的东西,完全不搭嘎,后来将产生的html语句打印出来,其中已经处理了可能会出现的html格式问题引发的错误,利用replace 来进行代替即可,在subTime 的格式下,发现了导出pdf的内容里会有个别特殊字符包含,而被凸现出来,当下就猜测是它们的缘故,果不其然,换了另一张比较安全的表单,错误别没有了。只因为导出的内容包含 “ < ” 这样的字符,所以,在获得内容的时候要进行一定的处理之后才能纳入最终的html 解析流中,处理如下:
public static String getHtml(String templateName, Map<String, Object> items)
throws IOException {
String html = getHtml(templateName);
for (String key : items.keySet()) {
String tag = "{" + key + "}";
if (html.indexOf(tag) > 0) {
if (items.get(key) != null) {
if(items.get(key).getClass().getName() == "java.math.BigDecimal")
items.put(key, ((java.math.BigDecimal)items.get(key)).doubleValue());
//System.out.println(items.get(key).toString());
html = html.replace(
tag,
items.get(key).toString().trim()
.replace("<", "<")
.replace(">", ">")
.replaceAll(" ", " ")
.replaceAll("\\n", "<br />")
.replaceAll("&", " "))
; // 要将内容中的特殊字符替换
} else{
html = html.replace(tag, "");
}
}
}
//System.out.println(html);
return html;
}