HTML生成PDF文件

package net.poweroak.saas.crm.modules.collection.controller;

import com.itextpdf.text.pdf.BaseFont;
import freemarker.cache.StringTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import java.io.File;
import java.io.FileOutputStream;
import java.io.StringWriter;
import java.util.Locale;
import java.util.Map;

/**
 * 生成pdf文件工具类
 *
 * @author message
 * @create
 */
@Slf4j
public class PdfExportUtil {

    /**
     * 存放文件模板的地址
     */
    //字体文件名称
    private final static String DEFAULT_FONT = "yahei.ttf";
    //编码格式
    private final static String ENCODING = "UTF-8";
    //模板文件夹相对路径
    public final static String TEMPLATE_PATH = "D:\\BaiduNetdiskDownload\\";

    public static void generate(String templateContent, Map<String, Object> dataMap, File file) {
        FileOutputStream outputStream = null;
        ITextRenderer renderer = new ITextRenderer();
        try {
            Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
            StringTemplateLoader stringLoader = new StringTemplateLoader();
            stringLoader.putTemplate("myTemplate", templateContent);
            cfg.setTemplateLoader(stringLoader);
            Template template = cfg.getTemplate("myTemplate", "utf-8");
            String htmlData = FreeMarkerTemplateUtils.processTemplateIntoString(template, dataMap);
            outputStream = new FileOutputStream(file);
            ITextFontResolver fontResolver = renderer.getFontResolver();
            // 解决中文乱码问题,fontPath为中文字体地址
            fontResolver.addFont(TEMPLATE_PATH + DEFAULT_FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            renderer.setDocumentFromString(htmlData);
            renderer.layout();
            renderer.createPDF(outputStream);
        } catch (Exception e) {
            log.error("生成失败", e);
        } finally {
            renderer.finishPDF();
            IOUtils.closeQuietly(outputStream);
        }
    }
}

    public static void main(String[] args) throws IOException, DocumentException {
        Map<String, Object> paramsMap = new HashMap<>(128);
        paramsMap.put("invoice", "发票");
        paramsMap.put("serialNumber", "123456");
        paramsMap.put("orderNumber", "123456");
        paramsMap.put("invoiceDate", "2024/07/12");
        paramsMap.put("deliveryDate", "2024/07/12");
        paramsMap.put("externalOrderNumber", "123456");
        String fileName = "ceshi_" + System.currentTimeMillis() + ".pdf";
        String htmlContent = "";
        PdfExportUtil.generate(htmlContent , paramsMap, new File(PdfExportUtil.TEMPLATE_PATH + fileName));
        System.out.println(new File(PdfExportUtil.TEMPLATE_PATH + fileName).length());
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值