起源:
项目中用到使用html转pdf功能,将开发过程中,几个主要功能提炼出来,分享给大家并有github例子,clone下来配置好jdk就能直接跑例子,代码和逻辑也超简单,一看就能明白。
环境配置:
jdk1.8.0_77 idea win10
htmlpdf版本如下
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>2.0.2</version>
</dependency>
</dependencies>
项目地址:https://github.com/patrickWuP/html2pdf
项目解析:
项目主要分三块:
一:快速将html转换为pdf,在 com.wp.html2pdf.simple.QuickHtml2Pdf 文件下,有三种方式将html转换为pdf(html2pdf工具类本身提供不止三种);
二:将中文html文件转换为pdf并支持粗细字体;SimSun-01.ttf(细字体)Dengb.ttf(粗字体);
三:在中文html基础上,实现相对路径和绝对路径添加图片转换为pdf方式,通过调整样式实现图片覆盖文章,类似公章的效果(前提图片背景得是透明的);
遇到的坑:
1.ttf字体从哪里来,刚开始从网上搜罗来的ttf字体,可信度和版本无法得知,本例子中的ttf字体都来自win10系统,默认路径:
C:\Windows\Fonts ,注意,你找不到我项目中的字体,因为我是将系统中ttc文件解压为多个ttf文件,任意挑取的,ttc转换为ttf在线转换地址为 https://transfonter.org/ttc-unpack
2.maven编译后ttf文件发生改变,导致中文转换失败,出错原因如下:
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<!-- 该配置导致ttf文件发生改变,正确配置如下:1.可以将上面的filter修改为false;2.新添加对ttf文件的配置 -->
<include>**/*.ttf</include>
<include>**/*.html</include>
</includes>
</resource>
当时这个问题排查了好一会儿,如何判断文件是否改变,编译后的target下的ttf文件和源ttf文件的大小比对下,不一样大肯定发生了改变。
3.图片绝对路径,使用https开头的连接无法正常转换。
4.img最后为第一级(没有被其他元素,比如div、span包裹)元素,保证转换为pdf时,将其作为img元素转换,而不是其他元素。
5.html转换为pdf的元素中,最好不要出现width,会导致生成的pdf页面尺寸发生改变。
以上,就是全部内容,剩下的所有精华都在代码里面了,等待大家去探索,有什么问题可以留言,大家共同进步!