关于生成pdf,有专门的工具比如iText,我们可以利用相关的
api
生成api
生成感觉稍微有点复杂。对于开发人员来讲,对于html
,css
相关的语法相对比较熟悉,基本都可以写,也降低了开发成本。所以利用html
转iText
生成一些比较复杂的
一、html转pdf选择
这里我们直接引用一篇博客,Java实现Html转pdf文件,大家可以参考一下,我利用了itextpdf
,xmlworker
,flying-saucer-pdf-itext5
来生成pdf
,发现效果不是很好,对于css
的支持不够。后面适用来openhtmltopdf感觉效果还不错。下面就简单演示一下!
二、openhtmltopdf演示
关于html
转pdf
,首先就是生成最终html
的技术选择,我们可以选择对于的模板引擎,可以选择的有很多,比如:freemaker
,thymeleaf
,Velocity
等,我在这边用的是beetl,一个国产模板引擎,用起来很不错,文档也比较详细,学习成本不高。下面是我的一些配置选项:
beetl.properties
DELIMITER_STATEMENT_START=<!--: DELIMITER_STATEMENT_END=--> DELIMITER_PLACEHOLDER_START=#{ DELIMITER_PLACEHOLDER_END=} DELIMITER_STATEMENT_START2=@ DELIMITER_STATEMENT_END2= DELIMITER_PLACEHOLDER_START2=${ DELIMITER_PLACEHOLDER_END2=} #RESOURCE.root=beetl RESOURCE.functionSuffix=html TEMPLATE_CHARSET=UTF-8 #是否检测文件变化,开发用true合适,但线上要改为false RESOURCE.autoCheck=false
这里先关注看一下前两行配置,这个放在
html
里,会被当做注释忽略掉,这样我们就可以忽略beelt
模板语言,直接浏览html
,大致知道pdf
的样式了,不用一遍遍的生成最终pdf
来微调了。如下:demo.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"/> <title>Title</title> <style> /* 注意这里面的 font-family, 需要和 fonts 文件夹放置的字体名称相同 */ body { font-family: simsun } </style> </head> <body> pdf 测试中 <h3>hello <!--: if (username != null && username != '') { --> ${username} <!--: } else { --> -- <!--: } --> </h3> if关键字后面是主要的判断条件,elif用来添加在主条件不成立时的其他判断条件,else则是所有条件都不成立时要执行的部分。 </body> </html>
html预览效果
生成效果
情况一:
情况二:
三、总结
关于上面的示例,大家可以直接参考示例代码。