admin管理员组文章数量:1592311
html格式处理
使用itextpdf的XMLWorkerHelper组件转换过程中,html格式要求比较多,下面做下格式的简单处理以保证转换成功。
//div格式转换过程中,有几率会使内容消失
content = content.replaceAll("<div", "<span");
content = content.replaceAll("/div>", "/span><br/>");
//关闭未封闭式标签br
content = content.replaceAll("<br[^>]*>", "<br/>");
//处理样式background-color: transparent; IE模式下存在兼容问题,火狐谷歌正常
content = content.replaceAll("background-color: transparent;", " ");
//使用word拷贝到富文本生成的html内容,存在各做word标签,当然转换过程中大部分都支持,如果遇到个别的可以做下处理
// content = content.replaceAll("<strong>", "");
// content = content.replaceAll("</strong>", "");
// content = content.replaceAll("<!--.*?-->", "");
// content = content.replaceAll("<[/]?(font|FONT|xml|XML|del|DEL|ins|INS|meta|META|[ovwxpOVWXP]:\\w+)[^>]*?>", "");
// content = content.replaceAll("<([^>]*)(?:lang|LANG|size|SIZE|face|FACE|[ovwxpOVWXP]:\\w+)=(?:'[^']*'|\"\"[^\"\"]*\"\"|[^>]+)([^>]*)>", "");
提取文本中的css样式
html中css优化是必不可少的,可以在富文本保存html的时候,对标签内容(表格、段落、字体等)使用css样式优化,目的就是转换的PDF可以更加贴近html页面样式,XMLWorkerHelper转换中可以支持css。
public static String getCssStr(String content){
String reg = "\\.([a-zA-Z0-9_]*)\\s*(\\{[^\\}]*\\})";
Pattern p = Patternpile(reg);
Matcher m = p.matcher(content);
String cssStr="";
while(m.find()){
cssStr += m.group()+" ";
}
System.out.println(cssStr);
return cssStr;
}
字体处理
html内容字体设置,可以处理中文乱码,内容重叠,字体大小,字体颜色等
package com.hundsun.cooas.manage.sec.util;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import java.io.File;
import java.util.Set;
public class PdfFont extends XMLWorkerFontProvider {
//新增PDF字体:特殊字符、宋体、仿宋、黑体
public String[] fonts = { "seguisym.ttf" ,"simsun.ttc","simfang.ttf","simhei.ttf"};
public PdfFont() {
super(XMLWorkerFontProvider.DONTLOOKFORFONTS);
//获取资源文件字体
String path = EnvironmentUtils.getWebClassPath()+"fonts"+ File.separator;
// 注册字体
for (String font : fonts) {
this.register(path+font);
}
}
@Override
public Font getFont(String fontname, String encoding, boolean embedded, float size, int style, BaseColor color) {
//Set<String> fonts2 = this.getRegisteredFonts(); //获取注册字体
String font = fontname;
if(font==null){
font = "宋体";
}
if ("".equals(font)) {
font = "segoe ui symbol";// 特殊字符
}
if(size<=0){
size=10.5f;
}
return super.getFont(font, encoding, embedded, size, style, color);
}
}
html转PDF文件
private static void htmlToPdf(String content,String css) throws IOException, DocumentException {
content = htmlTag(content);
ByteArrayInputStream in = new ByteArrayInputStream(content.getBytes());
Document document = new Document();
document.setMargins(30, 30, 30, 30); // 左,右,上,下
ByteArrayInputStream is = null;
if(!"".equals(css)){
is = new ByteArrayInputStream(css.getBytes());
}
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\Users\\Administrator\\Desktop\\temp.pdf"));// 创建书写器(Writer)
document.open();
//将html格式写入文档
XMLWorkerHelper.getInstance().parseXHtml(writer, document, in,is,new PdfFont());
document.close();
}
版权声明:本文标题:富文本编辑器保存的html内容使用itextpdf转PDF文件(css提取,内容重叠)问题解决 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728139699a1147201.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论