html转pdf

发布时间 2023-04-04 09:46:52作者: 橙香五花肉

html转pdf

依赖

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>

<dependency>
    <groupId>com.itextpdf.tool</groupId>
    <artifactId>xmlworker</artifactId>
    <version>5.5.13.3</version>
</dependency>

代码

/**
 * html转pdf
 *
 * @param html  html格式内容
 * @param file  输出文件file
 */
public static void htmlConversionPdf(String html, File file){

    InputStream inputStream = null;
    FileOutputStream outputStream = null;
    PdfWriter writer = null;
    Document document = null;

    try {
        // 1. 获取生成pdf的html内容
        inputStream= new ByteArrayInputStream(html.getBytes(StandardCharsets.UTF_8));
        outputStream = new FileOutputStream(file);

        document = new Document();
        writer = PdfWriter.getInstance(document, outputStream);
        document.open();

        // 2. 设置编码
        XMLWorkerHelper.getInstance().parseXHtml(writer, document, inputStream, StandardCharsets.UTF_8, new FontProvider());
    } catch (Exception ex) {
        ex.printStackTrace();
    }finally {
        try {
            if (document != null) {
                document.close();
            }
            if(writer != null){
                writer.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
            if (inputStream != null) {
                inputStream.close();
            }
        }catch(IOException ex){
            ex.printStackTrace();
        }
    }
}


/**
 * 初始化字体
 */
@Log4j2
class FontProvider extends XMLWorkerFontProvider {

    @Override
    public Font getFont(final String fontName, final String encoding, final boolean embedded, final float size, final int style, final BaseColor color) {
        try {
            BaseFont bf = BaseFont.createFont("font/simkai.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font font = new Font(bf, size, style, color);
            font.setColor(color);

            return font;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

测试

/**
 * 测试 html 转 pdf
 */
public static void main(String[] args) {
    final String content = "<h1 style="text-align: center;"><strong>测试合同</strong></h1><p>测试变量一:{测试变量一}</p><p>测试变量二:{测试变量二}</p><p style="text-align: right;">合同时间:{合同时间}</p><p style="text-align: right;">联系人:{联系人}</p>";
    htmlConversionPdf(content ,new File("C:/" + UUID.randomUUID() +".pdf"));
}