最近项目有个需求,将客户提供的URI连接转化为PDF文件,本来打算使用itext转换的,发现使用itext转化后的PDF格式和html差别过大。后来经同事介绍可使用wkhtmltopdf对html或URI连接转化为PDF,通过测试确实很强大,也比较简单,可是要安装wkhtmltopdf插件。javascript
使用步骤:html
一、下载wkhtmltopdf插件java
二、安装wkhtmltopdf并配置环境变量服务器
三、测试wkhtmltopdfcookie
wkhtmltopdf html地址或URI连接 PDF文件保存路径网络
生成的PDF文件以下:app
四、java调用wkhtmltopdfless
package com.kurumi.medical.util; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class Html2PDF { /** * wkhtmltopdf命令地址 */ private static final String TOPDFTOOL = "C://Program Files//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(srcPath); cmd.append(" "); cmd.append(" --page-size A4");// 设置纸张大小 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(); System.out.println("HTML2PDF成功"); } catch (Exception e) { System.out.println(("HTML2PDF失败")); e.printStackTrace(); result = false; } return result; } public static class HtmlToPdfInterceptor extends Thread { private InputStream is; public HtmlToPdfInterceptor(InputStream is) { this.is = is; } public void run() { try { InputStreamReader isr = new InputStreamReader(is, "utf-8"); BufferedReader br = new BufferedReader(isr); br.readLine(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { String htmlPath = "http://www.baidu.com/"; String pdfPath = "D://testpdf2.pdf"; Html2PDF.convert(htmlPath, pdfPath); } }
五、经常使用参数设置post
常规选项 –allow 容许加载从指定的文件夹中的文件或文件(可重复) –book* 设置一会打印一本书的时候,一般设置的选项 –collate 打印多份副本时整理 –cookie 设置一个额外的cookie(可重复) –cookie-jar 读取和写入的Cookie,并在提供的cookie jar文件 –copies 复印打印成pdf文件数(默认为1) –cover* 使用HTML文件做为封面。它会带页眉和页脚的TOC以前插入 –custom-header 设置一个附加的HTTP头(可重复) –debug-javascript 显示的javascript调试输出 –default-header* 添加一个缺省的头部,与页面的左边的名称,页面数到右边,例如: –header-left ‘[webpage]’ –header-right ‘[page]/[toPage]’ –header-line –disable-external-links* 禁止生成连接到远程网页 –disable-internal-links* 禁止使用本地连接 –disable-javascript 禁止让网页执行JavaScript –disable-pdf-compression* 禁止在PDF对象使用无损压缩 –disable-smart-shrinking* 禁止使用WebKit的智能战略收缩,使像素/ DPI比没有不变 –disallow-local-file-access 禁止容许转换的本地文件读取其余本地文件,除非explecitily容许用 –allow –dpi 显式更改DPI(这对基于X11的系统没有任何影响) –enable-plugins 启用已安装的插件(如Flash –encoding 设置默认的文字编码 –extended-help 显示更普遍的帮助,详细介绍了不常见的命令开关 –forms* 打开HTML表单字段转换为PDF表单域 –grayscale PDF格式将在灰阶产生 –help Display help –htmldoc 输出程序HTML帮助 –ignore-load-errors 忽略claimes加载过程当中已经遇到了一个错误页面 –lowquality 产生低品质的PDF/ PS。有用缩小结果文档的空间 –manpage 输出程序手册页 –margin-bottom 设置页面下边距 (default 10mm) –margin-left 将左边页边距 (default 10mm) –margin-right 设置页面右边距 (default 10mm) –margin-top 设置页面上边距 (default 10mm) –minimum-font-size 最小字体大小 (default 5) –no-background 不打印背景 –orientation 设置方向为横向或纵向 –page-height 页面高度 (default unit millimeter) –page-offset* 设置起始页码 (default 1) –page-size 设置纸张大小: A4, Letter, etc. –page-width 页面宽度 (default unit millimeter) –password HTTP验证密码 –post Add an additional post field (repeatable) –post-file Post an aditional file (repeatable) –print-media-type* 使用的打印介质类型,而不是屏幕 –proxy 使用代理 –quiet Be less verbose –read-args-from-stdin 读取标准输入的命令行参数 –readme 输出程序自述 –redirect-delay 等待几毫秒为JS-重定向(default 200) –replace* 替换名称,值的页眉和页脚(可重复) –stop-slow-scripts 中止运行缓慢的JavaScripts –title 生成的PDF文件的标题(第一个文档的标题使用,若是没有指定) –toc* 插入的内容的表中的文件的开头 –use-xserver* 使用X服务器(一些插件和其余的东西没有X11可能没法正常工做) –user-style-sheet 指定用户的样式表,加载在每一页中 –username HTTP认证的用户名 –version 输出版本信息退出 –zoom 使用这个缩放因子 (default 1) 页眉和页脚选项 –header-center* (设置在中心位置的页眉内容) –header-font-name* (default Arial) (设置页眉的字体名称) –header-font-size* (设置页眉的字体大小) –header-html* (添加一个HTML页眉,后面是网址) –header-left* (左对齐的页眉文本) –header-line* (显示一条线在页眉下) –header-right* (右对齐页眉文本) –header-spacing* (设置页眉和内容的距离,默认0) –footer-center* (设置在中心位置的页脚内容) –footer-font-name* (设置页脚的字体名称) –footer-font-size* (设置页脚的字体大小default 11) –footer-html* (添加一个HTML页脚,后面是网址) –footer-left* (左对齐的页脚文本) –footer-line* 显示一条线在页脚内容上) –footer-right* (右对齐页脚文本) –footer-spacing* (设置页脚和内容的距离) ./wkhtmltopdf –footer-right ‘[page]/[topage]’ http://www.baidu.com baidu.pdf ./wkhtmltopdf –header-center ‘报表’ –header-line –margin-top 2cm –header-line http://192.168.212.139/oma/ oma.pdf 表内容选项中 –toc-depth* Set the depth of the toc (default 3) –toc-disable-back-links* Do not link from section header to toc –toc-disable-links* Do not link from toc to sections –toc-font-name* Set the font used for the toc (default Arial) –toc-header-font-name* The font of the toc header (if unset use –toc-font-name) –toc-header-font-size* The font size of the toc header (default 15) –toc-header-text* The header text of the toc (default Table Of Contents) –toc-l1-font-size* Set the font size on level 1 of the toc (default 12) –toc-l1-indentation* Set indentation on level 1 of the toc (default 0) –toc-l2-font-size* Set the font size on level 2 of the toc (default 10) –toc-l2-indentation* Set indentation on level 2 of the toc (default 20) –toc-l3-font-size* Set the font size on level 3 of the toc (default 8) –toc-l3-indentation* Set indentation on level 3 of the toc (default 40) –toc-l4-font-size* Set the font size on level 4 of the toc (default 6) –toc-l4-indentation* Set indentation on level 4 of the toc (default 60) –toc-l5-font-size* Set the font size on level 5 of the toc (default 4) –toc-l5-indentation* Set indentation on level 5 of the toc (default 80) –toc-l6-font-size* Set the font size on level 6 of the toc (default 2) –toc-l6-indentation* Set indentation on level 6 of the toc (default 100) –toc-l7-font-size* Set the font size on level 7 of the toc (default 0) –toc-l7-indentation* Set indentation on level 7 of the toc (default 120) –toc-no-dots* Do not use dots, in the toc 轮廓选项 –dump-outline 转储目录到一个文件 –outline 显示目录(文章中h1,h2来定) –outline-depth 设置目录的深度(默认为4) 页脚和页眉 * [page] 由当前正在打印的页的数目代替 * [frompage] 由要打印的第一页的数量取代 * [topage] 由最后一页要打印的数量取代 * [webpage] 经过正在打印的页面的URL替换 * [section] 由当前节的名称替换 * [subsection] 由当前小节的名称替换 * [date] 由当前日期系统的本地格式取代 * [time] 由当前时间,系统的本地格式取代