ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

将 HTML 转化为 PDF新姿势

2019-10-27 22:06:23  阅读:286  来源: 互联网

标签:姿势 BaseFont html HTML renderer import PDF pdf


img

前篇

使用 Thymeleaf 动态渲染 HTML

1、添加依赖

  <!--PDF转化工具-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.4.2</version>
        </dependency>

        <dependency>
            <groupId>org.xhtmlrenderer</groupId>
            <artifactId>core-renderer</artifactId>
            <version>R8</version>
        </dependency>

2、编码工具类


import com.itextpdf.text.pdf.BaseFont;
import com.lowagie.text.DocumentException;
import org.springframework.stereotype.Component;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import java.io.IOException;
import java.io.OutputStream;

/**
 * 导出PDF文件转换工具
 */
public class PDFUtil{

    /**
     * 生成 PDF 文件
     * @param out 输出流
     * @param html HTML字符串
     * @throws IOException IO异常
     * @throws DocumentException Document异常
     */
    public static void createPDF(OutputStream out, String html) throws IOException, DocumentException {
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocumentFromString(html);
        // 解决中文支持问题
        ITextFontResolver fontResolver = renderer.getFontResolver();
        fontResolver.addFont("pdf/font/fangsong.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        fontResolver.addFont("pdf/font/PingFangSC.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        renderer.layout();
        renderer.createPDF(out);
    }

}

字体文件自行下载,并添加到 resouces 路径下,上述路径对应修改

3、效果演示

img

遇到的问题与解决方法

1、Maven 打包源码后,导致 HTML 文件内容被篡改

  • 原因:Maven 插件使用的占位符 ${} 与 Thymeleaf冲突
  • 解决方法:在 pom.xml 中配置资源文件,打包时不对html文件的占位符进行处理
<build>
    ...
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>**/*.html</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>**/*.html</include>
            </includes>
        </resource>
    </resources>
</build>

2、使用 Docker 制作镜像时,下载文件时报错,缺少字体处理类

  • 使用镜像源 java:8 而不是 openjdk:8-jre-alpine

© 著作权归作者所有,转载或内容合作请联系作者

img

Service Mesh - gRPC 本地联调远程服务

使用 Thymeleaf 动态渲染 HTML

Fastjson致命缺陷

Spring Boot 2 集成log4j2日志框架

Java面试通关要点汇总集之核心篇参考答案

Java面试通关要点汇总集之框架篇参考答案

Spring Security 实战干货:如何保护用户密码

Spring Boot RabbitMQ - 优先级队列

img

本文由博客一文多发平台 OpenWrite 发布!

标签:姿势,BaseFont,html,HTML,renderer,import,PDF,pdf
来源: https://blog.csdn.net/SpringForAll/article/details/102772363

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有