java导出富文本为pdf

16 篇文章 0 订阅
pom依赖
     <dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>5.5.8</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
CustomXMLWorkerFontProvider.java解决中文不显示问题
package test;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import lombok.extern.slf4j.Slf4j;

/**
 * 解决XMLWorkerHelper中文不显示。
 * <p>使用iTextAsian.jar中自带的中文字体
 *
 */
@Slf4j
public class CustomXMLWorkerFontProvider extends XMLWorkerFontProvider {

    @Override
    public Font getFont(final String fontName, final String encoding, final boolean embedded, final float size, final int style,
                        final BaseColor color) {
        BaseFont bf = null;
        try {
            bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
            Font font = new Font(bf, size, style, color);
            font.setColor(color);
            // log.info("PDF文档字体初始化完成!");
            return font;
        } catch (Exception e) {
            log.error("exception:", e);
        }
        return null;
    }
}
PdfUtil.java
package test;

import com.alibaba.fastjson.JSONObject;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;

import java.io.*;
import java.nio.charset.Charset;

public class PdfUtil {

    /**
     * 通过html生成文件
     * @param htmlContent  html格式内容
     * @param file  输出文件file
     */
    public static void createdPdfByItextHtml(String htmlContent,File file){
        InputStream inputStream = null;
        FileOutputStream outputStream = null;
        PdfWriter writer = null;
        try {
            // 1. 获取生成pdf的html内容
            inputStream= new ByteArrayInputStream(htmlContent.getBytes("utf-8"));
            outputStream = new FileOutputStream(file);
            Document document = new Document();
            writer = PdfWriter.getInstance(document, outputStream);
            document.open();
            // 2. 添加字体
//            XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
//            fontImp.register(getFontPath());
            // 3. 设置编码
            XMLWorkerHelper.getInstance().parseXHtml(writer, document, inputStream, Charset.forName("UTF-8"),new CustomXMLWorkerFontProvider());
            // 4. 关闭,(不关闭则会生成无效pdf)
            document.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }finally {
            try {
                if(writer!=null){
                    writer.close();
                }
                if (outputStream != null) {
                    outputStream.close();
                }
                if (inputStream != null) {
                    inputStream.close();
                }
            }catch(IOException ex){
                ex.printStackTrace();
            }
        }
    }





    public static void main(String[] args) {
        String a = "{\"html\":\"<p>saasafdfdsadasd</p>\\n<p><strong>sdfsdfsdf</strong></p>\\n<p><strong>打开解放军官兵的时间赶不上的肌肤比较失败的不过深度不够撒旦解放大师傅士大夫士大夫士大夫士大夫士大夫看见电脑打开发给你的口水歌看你可怜的那个锻炼方法的联合国的法律后果费德勒换个地方;陆海空地方管理框架和 规范化风格风格化风格化分隔花粉管花粉管和法规和风格化法国和法国恢复回复给梵蒂冈豆腐干反对恢复共和国建国和话剧规划局肉汤羊肉汤预亏里哦蕾哈娜贴吧软弱和任天堂如果退货有高速带宽不够数量的可能过来的咖啡馆上的困境老师的可能各类考试的 <span id=\\\"attachment_mce_2\\\" class=\\\"attachment\\\" contenteditable=\\\"false\\\"><img src=\\\"http://172.16.80.138:8917/iccMeeting/tinymce/fileIcons//file_type_image.svg\\\" /><a href=\\\"http://172.16.80.145//fileServer\\\\upload\\\\2022/06/27\\\\8ac4290caa5f0a88930d80d2f4b608f5.jpeg\\\">8ac4290caa5f0a88930d80d2f4b608f5.jpeg (8.35 K)</a></span></strong></p>\\n<p><img src=\\\"http://172.16.80.145//fileServer\\\\upload\\\\2022/06/27\\\\cut-6546-1656312210599.png\\\" alt=\\\"\\\" /><img src=\\\"http://172.16.80.145//fileServer\\\\upload\\\\2022/06/27\\\\cut-6546-1656312781796.png\\\" alt=\\\"\\\" /></p>\\n<p><strong>sdfsdf</strong></p>\\n<p><strong><span style=\\\"color: #e03e2d;\\\">yrdfsdf</span></strong></p>\\n<p><strong><span style=\\\"color: #e03e2d;\\\"><span style=\\\"font-size: 24px;\\\">dsfsdfsdfsfsdfsdfsdfsxxxdfvbvscaskdbsjhcbsddjfcbsdjdbfcsjdbfcshdbfcjskzhbvdfafvajkshbdfvjhoasdbvjsadbvkjdsbvkjdfhbfvkjdbhfvkjdhbfvkjdzbhfvjjdhbvvdf你好山东福建河南山东快解封你是困难的时刻发你的空间概念的设计风格百度是打开空间概念是的看法呢广东省快解封那个时代开发功能速度快给你是打开开关你手动开关你是大哥</span></span></strong></p>\\n<p><span style=\\\"text-decoration: underline;\\\"><strong><span style=\\\"color: #e03e2d; text-decoration: underline;\\\"><span style=\\\"font-size: 24px;\\\">dsfsfsd<span id=\\\"attachment_mce_1\\\" class=\\\"attachment\\\" contenteditable=\\\"false\\\"><img src=\\\"http://172.16.80.138:8917/iccMeeting/tinymce/fileIcons//file_type_image.svg\\\" /><a href=\\\"http://172.16.80.145//fileServer\\\\upload\\\\2022/06/27\\\\8ac4290caa5f0a88930d80d2f4b608f5.jpeg\\\">8ac4290caa5f0a88930d80d2f4b608f5.jpeg (8.35 K)</a></span></span></span></strong></span></p>\",\"imgUrl\":\"http://172.16.80.138:8917\"}";

        String b = "<html><body>" + JSONObject.parseObject(a).get("html").toString() + "</body></html>";
        createdPdfByItextHtml(b,new File("D:/test.pdf"));
    }

}

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值