最近做的项目需要用到富文本编辑器,然后我就加了个kindEditor,这个页面填写的内容又要导出pdf, 然后就用了支持样式较多的itext ,在ftl模板转pdf的时候出现了问题,因为itext转pdf对html要求相当严格,只要标签有没闭合的后台必然会直接报错,找到问题发现是在编辑器里面输入内容后按回车或者复制进来的内容有换行的br标签全部都没闭合,比如自己按回车就会生成<p><br></p>的标签,中间的br不会闭合,网上找了很多kindEitor的解决方法,像过滤br标签、更换换行标签之类的,试过了,解决不了问题,然后百度搜索补全标签的方法,发现搜到的都是双标签的补全方法,所以自己写了个补全单标签的方法,希望对那些碰到同样问题的人有帮助,itext支持多个中文字体,中文换行的问题我也都解决了,写起来比较麻烦,下面就只贴标签补全的代码了
public String closeHTML(String str){
List arrTags = new ArrayList();
arrTags.add("br");
arrTags.add("hr");
for(int i=0;i<arrTags.size();i++){
for(int j=0;j<str.length();){
int tagStart = str.indexOf("<"+arrTags.get(i),j);
if(tagStart>=0){
int tagEnd = str.indexOf(">",tagStart);
j = tagEnd;
String preCloseTag = str.substring(tagEnd-1,tagEnd);
if(!"/".equals(preCloseTag)){
String preStr = str.substring(0,tagEnd);
String afterStr = str.substring(tagEnd);
str = preStr + "/" + afterStr;
}
}else{
break;
}
}
}
return str;
}