使用wkhtmltopdf 完成html文件转pdf

使用wkhtmltopdf 完成html文件转pdf

步骤1:下载wkhtmltopdf驱动并安装

安装步骤https://pnpdjie.github.io/docs/guides/releasetool/wkhtmltopdf-install.html

步骤2:调用工具类

拼接命令调用驱动

public class HtmlToPdf {
    //wkhtmltopdf在系统中的路径
    private static final String toPdfTool = "C:\\ruanjian\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
    
    /**
     * html转pdf
     * @param srcPath html路径,可以是硬盘上的路径,也可以是网络路径
     * @param destPath pdf保存路径
     * @return 转换成功返回true
     */
    public static boolean convert(String srcPath, String destPath){
        File file = new File(destPath);
        File parent = file.getParentFile();
        //如果pdf保存路径不存在,则创建路径
        if(!parent.exists()){
            parent.mkdirs();
        }
        
        StringBuilder cmd = new StringBuilder();
        cmd.append(toPdfTool);
        cmd.append(" ");
        cmd.append("  --header-line");//页眉下面的线
        cmd.append("  --header-center 这里是页眉这里是页眉这里是页眉这里是页眉 ");//页眉中间内容
        //cmd.append("  --margin-top 30mm ");//设置页面上边距 (default 10mm) 
        cmd.append(" --header-spacing 10 ");//    (设置页眉和内容的距离,默认0)
        cmd.append(srcPath);
        cmd.append(" ");
        cmd.append(destPath);
        
        boolean result = true;
        try{
            //执行拼接后的命令
            Process proc = Runtime.getRuntime().exec(cmd.toString());
            HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream());
            HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream());
            error.start();
            output.start();
            proc.waitFor();
        }catch(Exception e){
            result = false;
            e.printStackTrace();
        }

        return result;
    }
}

提供实例

**html模板:**HTML2.html

<html>

<head>
    <meta http-equiv=Content-Type content="text/html; charset=utf-8">
    <meta name=ProgId content=Word.Document>
    <meta name=Generator content="Microsoft Word 12 (filtered)">
    <meta name=Originator content="Microsoft Word 12 (filtered)">


</head>

<body lang=ZH-CN style='text-justify-trim:punctuation'>
<style>
    *{
        margin:0;
        padding:0;
    }

    .MsoNormalTable{
        margin:0 1%;
        width:98%;
    }

    .MsoNormalTable-toolbar{
        position: fixed;
        right:10px;
        z-index: 2;
    }
    .MsoNormalTable-toolbar input{
        min-width: 24px;
        line-height: 20px;
        cursor: pointer;
        color: #444;
        background: #fafafa;
        background-repeat: repeat-x;
        border: 1px solid #bbb;
        background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%);
        background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%);
        background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%);
        background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%);
        background-repeat: repeat-x;
        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0);
        -moz-border-radius: 5px;
        -webkit-border-radius: 5px;
        border-radius: 5px;
        /*对于特殊符号无影响*/
        padding:0 2px;
    }
    body{
        min-width: 988px;
        font-family: "微软雅黑";
    }
    @media (min-width: 998px) {
        .MsoNormalTable-toolbar{
            right: 50px;
            margin-right: 50px;
            margin-top:3px;
        }
    }
</style>


<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
       style='border-collapse:collapse;border:none'>
    <tr>
        <td width=100% colspan=13 valign=top style='border:solid #BFBFBF 1.0pt;
  background:#4f81bd;padding:0cm 5.4pt 0cm 5.4pt'>
            <h3 class="text-center">学校【${schoolName}】,学院【${className}】的人员信息</h3>
        </td>
    </tr>
    <tr>
        <td width=100% colspan=13 valign=top style='border:solid #BFBFBF 1.0pt;
  border-top:none;background:#8064a2;padding:0cm 5.4pt 0cm 5.4pt'>
            <p class=MsoNormal><span style='font-size:11pt;color:white'>姓名</span></p>
        </td>
    </tr>
    <tr>
        <td width=25% colspan=3 valign=top style='border:solid #BFBFBF 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
            <p class=MsoNormal><span style='font-size:9.0pt;color:#404040'>姓名</span></p>
        </td>
        <td width=18.6% colspan=3 valign=top style='border-top:none;
  border-left:none;border-bottom:solid #BFBFBF 1.0pt;border-right:solid #BFBFBF 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
            <p class=MsoNormal><span style='font-size:9.0pt;color:#404040'>别名</span></p>
        </td>
        <td width=18.5% colspan=2 valign=top style='border-top:none;
  border-left:none;border-bottom:solid #BFBFBF 1.0pt;border-right:solid #BFBFBF 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
            <p class=MsoNormal><span lang=EN-US style='font-size:9.0pt;color:#404040'>年龄</span></p>
        </td>
        <td width=18.6% colspan=3 valign=top style='border-top:none;
  border-left:none;border-bottom:solid #BFBFBF 1.0pt;border-right:solid #BFBFBF 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
            <p class=MsoNormal><span style='font-size:9.0pt;color:#404040'>地址</span></p>
        </td>
    </tr>
    <#list student as user>
        <tr>
            <td width=25% colspan=3 valign=top style='border:solid #BFBFBF 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
                <p class=MsoNormal><span lang=EN-US style='font-size:6.5pt;color:#888888'>${user.username}</span></p>
            </td>
            <td width=18.6% colspan=3 valign=top style='border-top:none;
  border-left:none;border-bottom:solid #BFBFBF 1.0pt;border-right:solid #BFBFBF 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
                <p class=MsoNormal><span lang=EN-US style='font-size:6.5pt;color:#888888'>${user.secondName}</span></p>
            </td>
            <td width=18.5% colspan=2 valign=top style='border-top:none;
  border-left:none;border-bottom:solid #BFBFBF 1.0pt;border-right:solid #BFBFBF 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
                <p class=MsoNormal><span lang=EN-US style='font-size:6.5pt;color:#888888'>${user.age}</span></p>
            </td>
            <td width=18.6% colspan=3 valign=top style='border-top:none;
  border-left:none;border-bottom:solid #BFBFBF 1.0pt;border-right:solid #BFBFBF 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
                <p class=MsoNormal><span lang=EN-US style='font-size:6.5pt;color:#888888'>${user.address}</span></p>
            </td>
        </tr>
    </#list>

</body>

</html>

生成的pdf

在这里插入图片描述

总结:

wkhtmltopdf是一个免费实用的工具,可用于html转pdf等地方,这次的任务是实现对pdf文件签名大概流程为

建立ftl模板,通过freemarker将数据填充进去生成html,再将html转化为用户所需要的pdf,签名通过签字板会生成一个签名的图片,将图片贴在pd’f即可。

记录一下

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值