java实现html转pdf


关于生成pdf,有专门的工具比如iText,我们可以利用相关的api生成pdf。但是有时候生成较简单,并不复杂pdf,利用相关api生成感觉稍微有点复杂。对于开发人员来讲,对于htmlcss相关的语法相对比较熟悉,基本都可以写,也降低了开发成本。所以利用htmlpdf相关的技术,来生成简单的pdf,利用iText生成一些比较复杂的pdf是一个比较好的选择。

一、html转pdf选择

这里我们直接引用一篇博客,Java实现Html转pdf文件,大家可以参考一下,我利用了itextpdf,xmlworker,flying-saucer-pdf-itext5来生成pdf,发现效果不是很好,对于css的支持不够。后面适用来openhtmltopdf感觉效果还不错。下面就简单演示一下!

二、openhtmltopdf演示

关于htmlpdf,首先就是生成最终html的技术选择,我们可以选择对于的模板引擎,可以选择的有很多,比如:freemaker,thymeleaf,Velocity等,我在这边用的是beetl,一个国产模板引擎,用起来很不错,文档也比较详细,学习成本不高。下面是我的一些配置选项:

  1. 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来微调了。如下:

  2. 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>
  3. html预览效果

    image-20210417211255409

  4. 生成效果

    情况一:

    image-20210417211724940

    image-20210417211541836

情况二:

image-20210417211747983

image-20210417211811618

三、总结

关于上面的示例,大家可以直接参考示例代码


文章作者: shiv
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 shiv !
评论
  目录