HTML转PDF工具(wkhtmltopdf)介绍,支持widows和linux
2016-08-11 18:19
821 查看
最近项目中客户提了一个奇葩的需求;批量把html转为pdf文件用于存档。听到这个需求不知所错,最开始研究iText使用java开发,各种中文乱码,中文不显示问题。后来在网上搜索到wkhtmltopdf工具,以下是完整的说明以及代码。
首先下载文件:html转为pdf文件(wkhtmltox)(包括windows下exe安装文件和linux下可执行文件),官方下载地址
一、windows下操作步骤
安装:wkhtmltox-0.12.3.2_msvc2013-win64.exe,cmd命令进入安装目录
运行:wkhtmltopdf.exe [参数,可选,可多个;wkhtmltopdf中文参数详解] <需要转的html路径,必填,可多个> <转成功后的pdf文件存放地址,必填>
a.例子: wkhtmltopdf.exe –page-size A4 www.baidu.com test.pdf
二、linux下操作步骤
解压:命令:tar -xvf wkhtmltox-0.12.3_linux-generic-amd64.tar.xz
解决中文不显示或乱码问题:需要字体文件cjkuni-uming、smc、stix放入/usr/share/fonts目录下
运行:进入wkhtmltox/bin目录 ./wkhtmltopdf [参数,可选,可多个;wkhtmltopdf中文参数详解] <需要转的html路径,必填,可多个> <转成功后的pdf文件存放地址,必填>
a.例子: ./wkhtmltopdf –page-size A4 www.baidu.com pdf.pdf
三、通过java调用wkhtmltox的可执行文件实现批量html转pdf
注:html的table中不能用thead,用了后换页会出现两个表头问题如图:
大概就是这些,如果有什么问题请留言。
首先下载文件:html转为pdf文件(wkhtmltox)(包括windows下exe安装文件和linux下可执行文件),官方下载地址
一、windows下操作步骤
安装:wkhtmltox-0.12.3.2_msvc2013-win64.exe,cmd命令进入安装目录
运行:wkhtmltopdf.exe [参数,可选,可多个;wkhtmltopdf中文参数详解] <需要转的html路径,必填,可多个> <转成功后的pdf文件存放地址,必填>
a.例子: wkhtmltopdf.exe –page-size A4 www.baidu.com test.pdf
二、linux下操作步骤
解压:命令:tar -xvf wkhtmltox-0.12.3_linux-generic-amd64.tar.xz
解决中文不显示或乱码问题:需要字体文件cjkuni-uming、smc、stix放入/usr/share/fonts目录下
运行:进入wkhtmltox/bin目录 ./wkhtmltopdf [参数,可选,可多个;wkhtmltopdf中文参数详解] <需要转的html路径,必填,可多个> <转成功后的pdf文件存放地址,必填>
a.例子: ./wkhtmltopdf –page-size A4 www.baidu.com pdf.pdf
三、通过java调用wkhtmltox的可执行文件实现批量html转pdf
public class Htmltopdf { private static final Logger LOG = LoggerFactory.getLogger(Htmltopdf.class); private static final String TOPDFTOOL = "/root/wkhtmltox/bin/wkhtmltopdf"; /** * 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("--page-size A2");// 参数 cmd.append(" "); cmd.append(srcPath); cmd.append(" "); cmd.append(destPath); boolean result = true; try { Process proc = Runtime.getRuntime().exec(cmd.toString()); HtmlToPdfInter error = new HtmlToPdfInter( proc.getErrorStream()); HtmlToPdfInter output = new HtmlToPdfInter( proc.getInputStream()); error.start(); output.start(); proc.waitFor(); LOG.info("HTML2PDF成功,参数---html路径:{},pdf保存路径 :{}", new Object[] {srcPath, destPath }); } catch (Exception e) { LOG.error("HTML2PDF失败,srcPath地址:{},错误信息:{}", new Object[]{srcPath, e.getMessage()}); result = false; } return result; } }
/** * 当java调用wkhtmltopdf时,用于获取wkhtmltopdf返回的内容 */ public class HtmlToPdfInter extends Thread { private static final Logger LOG = LoggerFactory .getLogger(HtmlToPdfInter.class); private InputStream is; public HtmlToPdfInter(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) { LOG.error(e.getMessage()); e.printStackTrace(); } } }
/** * 测试 */ public class Test { public static void main(String[] args) { String htmlUrl = "www.baidu.com"; String path = "/root/file/pdf_test.pdf"; HtmlToPdf.convert(htmlUrl , path ); } }
注:html的table中不能用thead,用了后换页会出现两个表头问题如图:
大概就是这些,如果有什么问题请留言。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序