富文本编辑器保存的html内容使用itextpdf转PDF文件(css提取,内容重叠)问题解决

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 = Pattern.compile(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();
    }

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇气heart

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值