java使用wkhtmltopdf实现Html转pdf,并在centos服务器部署步骤。

	由于项目中要求将HTML页面转换成pdf,itext的确是java开源组件的第一选择。不过itext也有局限,itext不支持css样式格式,就是要自己写模板,后来用了Flying Saucer,它也是基于iText的,支持CSS2,后来项目要求支持HTML5 CSS3,最后,wkhtmltopdf进入了我的选择范围。wkhtmltopdf是一个使用webkit网页渲染引擎开发的用来将 html转成 pdf的工具,可以跟多种脚本语言进行集成来转换文档。

官网地址 http://wkhtmltopdf.org/

github地址 https://github.com/wkhtmltopdf/wkhtmltopdf

wkhtmltopdf的使用很简单,安装好以后,直接命令行调用即可。
windows中:c:\wkhtmltopdf.exe http://36kr.com/ c:\36kr.pdf

Linux中:wkhtmltopdf http://36kr.com/ 36kr.pdf

下面是java调用方法:
public static void main(String[] args) {
        String tmpFileName = UUID.randomUUID().toString();
        String htmlUrl = "http://36kr.com/";
        String pdfFilePath = tmpFileName + ".pdf";

        try {
            pdfTest(htmlUrl, pdfFilePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

public static void pdfTest(final String htmlUrl, final String pdfFilePath) {

        // 只能5个线程同时访问
        final Semaphore semaphore = new Semaphore(2);
        final String whktmlExe = "wkhtmltopdf";
        try {
            System.out.println(" inside for before " + semaphore.availablePermits());
            // 获取许可
            semaphore.acquire();
            System.out.println(" inside for after " + " ---" + htmlUrl);
            new java.lang.Thread() {
                public void run() {
                    try {
                        ProcessBuilder pb = new ProcessBuilder(whktmlExe, "--print-media-type", "--margin-left", "10mm", "--margin-right", "10mm", htmlUrl, pdfFilePath); // 使用print样式
                        //ProcessBuilder pb = new ProcessBuilder(whktmlExe, htmlUrl, pdfFilePath);
                        pb.redirectErrorStream(true);
                        Process process = pb.start();
                        BufferedReader errStreamReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                        String line = errStreamReader.readLine();
                        while (line != null) {
                            System.err.println(line); //or whatever else
                            line = errStreamReader.readLine();
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        System.out.println("in finally releasing " + semaphore.availablePermits());
                        // 访问完后,释放
                        semaphore.release();
                    }
                }
            }.start();

        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println(" *** Error in pdf generation *** ");
        }
    }

<centos root权限下安装 wkhtmltopdf>

1、安装字体文件(由于centos服务器没有内置字库,所以需要安装字库文件)

#将本地字体文件拷贝到linux服务器/usr/share/fonts/目录下:

scp -i ~/.ssh/xxxx.pem msyh.ttf centos@xxxx:~

#如果英文无法显示,继续安装字体:

yum install dejavu-sans-fonts

2、查看centos版本

cat /etc/redhat-release

3、下载软件

wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm

4、安装依赖的软件包

yum install fontconfig libXrender libXext xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi freetype libpng zlib libjpeg-turbo openssl

5、安装wkhtmltopdf

rpm -ivh wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm

6、修改权限

#查看安装路径:whereis wkhtmltopdf

#修改权限:chmod +x /usr/local/bin/wkhtmltopdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值