java使用wkhtmltopdf实现Html转pdf,并在centos服务器部署步骤。
2015-11-04 09:56
771 查看
由于项目中要求将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/wkhtmltopdfwkhtmltopdf的使用很简单,安装好以后,直接命令行调用即可。windows中:c:\wkhtmltopdf.exe http://36kr.com/ c:\36kr.pdfLinux中: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、安装wkhtmltopdfrpm -ivh wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
6、修改权限#查看安装路径:whereis wkhtmltopdf#修改权限:chmod +x /usr/local/bin/wkhtmltopdf
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 小心服务器内存居高不下的元凶--WebAPI服务
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- 运维入门
- CSS3属性教程与案例分享
- CSS3属性教程与案例分享
- CSS3的calc()使用
- 使用CSS3的appearance属性改变元素的外观
- CSS3美化图片
- CSS3质感分析——表面线性渐变