2014-09-26 197 views
2

正在使用itext从html内容创建pdf。我使用java字符串缓冲区以表格的形式构建html内容。一个Map包含键值对形式的文件的元数据值。我迭代这些键和值来构建html表。问题是地图中的一些元数据值是无意义/无效的符号。因此,pdf创建失败,出现以下例外。IText如果HTML包含特殊/非法字符,则Html中的PDF创建失败

java.io.IOException: Expected > for tag: <{1}/> near line 1, column 717 
at com.lowagie.text.xml.simpleparser.SimpleXMLParser.throwException(SimpleXMLParser.java:568) 
    at com.lowagie.text.xml.simpleparser.SimpleXMLParser.go(SimpleXMLParser.java:331) 
    at com.lowagie.text.xml.simpleparser.SimpleXMLParser.parse(SimpleXMLParser.java:579) 
    at com.lowagie.text.html.simpleparser.HTMLWorker.parse(HTMLWorker.java:141) 


Content which caused the exception is 
“$é6莚ÆuCÅ ©À SÀF;r 1Ì/XQ‡,Ô<ÒÐ"‡(¢ËÄòÅ1¡Ø€ÌÅc 

所以我的问题是这些字符是什么(非Ascii,utf-unsupported)?有什么方法可以在构建html时识别并跳过它们?

+0

唯一不好字符是这里的<<,它不应该出现在你的HTML中。将它转换为正确的转义形式'<'应该可以解决它。 – usr2564301 2014-09-26 09:30:15

+0

@Jongware:我正在转义所有可能的html字符。逃脱后的内容是 ““$é6莚ÆuCÅ©À\t SAF; R 1I/XQ‡,Ô< OD "‡(¢€ËÄòÅ1¡ØIAC” 即使如此,它失败.. – Vijay 2014-09-26 09:38:40

+0

“失败” 是**不是一个有用的问题描述,你原来的错误是'Expected> for tag',当然你必须得到一个新的错误信息? – usr2564301 2014-09-26 09:51:12

回答

2

在现实时间,它是难以识别和同时建立HTML 跳过你可以使用Apache公地郎逃脱HTML

StringEscapeUtils.escapeHtml("“$é6莚ÆuCÅ ©À SÀF;r 1Ì/XQ‡,Ô<ÒÐ"‡(¢ËÄòÅ1¡Ø€ÌÅc") 

上面的输出是

&ldquo;$&eacute;6&egrave;&#381;&scaron;&AElig;uC&Aring; &copy;&Agrave; S&Agrave;F;r 1&Igrave;/XQ&Dagger;,&Ocirc;&lt;&Ograve;&ETH;&quot;&Dagger;(&cent;&Euml;&Auml;&ograve;&Aring;1&iexcl;&Oslash;&euro;&Igrave;&Aring;c