java使用wkhtmltopdf将html转换成pdf

安装wkhtmltopdf

wkhtmltopdf是一个类似于插件的应用程序,windows和linux都支持,只是要安装对应的程序就行。

windows下载

下载wkhtmltopdf可以去官网直接下载。官方链接:https://wkhtmltopdf.org/downloads.html
官方截图

window安装

1.下载对应的windows版本
2.将下载的软件包解压到你自己的目录下
3.配置系统环境变量,配置到D:\Program Files\wkhtmltopdf\bin\即可,这是wkhtmltopdf的安装目录,应用程序就在这里。【也可以不配】
4.测试
在命令行输入:

wkhtmltopdf http://www.baidu.com/ D:website1.pdf

如果能生成pdf就成功了,
对于没有配置环境变量的就需要使用全路径了

D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf http://www.baidu.com/ D:website1.pdf

linux安装

linux安装和windows不同,需要根据系统内核下载对应的版本
1.查看系统版本
查看版本可以使用uname -a

[root@centos7 ~]# uname -a
Linux centos7.kjun 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

这里可以看到系统是centos7 x86_64的,下载对应版本的安装包

2.安装
上面下载完毕之后得到一个rpm的安装包,放到系统目录下之后使用rpm -ivh wkhtmltox-1:0.12.6-1.centos7.x86_64.rpm进行安装
注意: 安装的时候可能会遇到缺少依赖安装失败的情况,如下:
在这里插入图片描述
每个人缺少的依赖不一定相同。然后,使用yum把所有依赖全部安装之后在重新安装wkhtmltopdf的安装包。
以防万一:可以再将下列依赖安装一遍
  yum -y install libXrender*
  yum -y install libfontconfig*
  yum -y install libXext
  yum -y install libXext.i686

3.配置环境变量
在/etc/profile文件中添加

#修改wkhtmltopdf运行环境
export WKHTMLTOPDF_HOME="/usr/local/bin/wkhtmltopdf"
export PATH="$PATH:$WKHTMLTOPDF_HOME/bin"

使用rpm一般安装完毕会放在/usr/local/bin/wkhtmltopdf,如果没在,可以使用

whereis wkhtmltopdf

查一下在哪。
4.测试
和windows一样

wkhtmltopdf http://www.baidu.com/ website1.pdf
或者
/usr/local/bin/wkhtmltopdf http://www.baidu.com/ website1.pdf
没有配置环境变量使用第二种

5.中文乱码问题
下载一下字体库解压到 Linux 系统这个目录即可 /usr/share/fonts
链接:下载链接

使用java调用wkhtmltopdf

/**
     * @Author ***
     * @Description 将网页转为pdf 
     * @Date 2022/3/4 14:47
     * @Param [toolPath 软件位置, srcPath 资源位置(网址), destPath pdf输出路径, cookie]
     * @return boolean
     **/
    public static boolean convert(String toolPath, String srcPath, String destPath, Map<String, String> cookie) {
        File file = new File(destPath);
        File parent = file.getParentFile();
        //如果pdf保存路径不存在,则创建路径
        if (!parent.exists())
            parent.mkdirs();
        StringBuilder cmd = new StringBuilder();
        if (toolPath == null) {
            return false;
        }
        cmd.append(toolPath);
        cmd.append(" ");
        //设置cookie name及value 属性
        //cmd.append("  --cookie ");
        for (String s : cookie.keySet()) {
            cmd.append("  --cookie " + s + " " + cookie.get(s) + "");
        }
//        cmd.append("  --header-line");//页眉下面的线
//        cmd.append("  --header-center 这里是页眉这里是页眉这里是页眉这里是页眉 ");//页眉中间内容
        //cmd.append("  --margin-top 30mm ");//设置页面上边距 (default 10mm)
//        cmd.append(" --header-spacing 10 ");//    (设置页眉和内容的距离,默认0)
        cmd.append(" --margin-top 10 ");//    (设置页眉和内容的距离,默认0)
        cmd.append(" --margin-left 20 ");//    (设置页眉和内容的距离,默认0)
        cmd.append(" --margin-right 20 ");//    (设置页眉和内容的距离,默认0)
        cmd.append(" --margin-bottom 10 ");//    (设置页眉和内容的距离,默认0)
//        cmd.append(" --orientation Landscape ");//    (设置页眉和内容的距离,默认0)
        cmd.append(" --page-size A4 ");//    (设置页眉和内容的距离,默认0)
//        cmd.append(" ");
        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;
    }

调用时:

convert("/usr/local/bin/wkhtmltopdf", "http://www.baidu.com/website1.pdf", "/test/baidu.pdf",cookies);

使用这种方式可以带cookie,将需要登录的网页转化成pdf。

注意

使用wkhtmltopdf,要注意,pdf输出文件路径不能有空格,包括文件名也不能有空格

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值