关于生成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预览效果

生成效果
情况一:


情况二:


三、总结
关于上面的示例,大家可以直接参考示例代码。