现在的位置: 首页 > 综合 > 正文

用 flying saucer 生成pdf文件时的报错

2017年08月17日 ⁄ 综合 ⁄ 共 1153字 ⁄ 字号 评论关闭

利用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;
	}


抱歉!评论已关闭.