当前位置:首页 - 博客 - 正文

使用wkhtmltopdf将html转成pdf

1、特点

  1. Wkhtmltopdf可直接把浏览器中浏览的网页转换成一个pdf,他是一个把html页面转换成pdf的软件(需要安装在服务器上)。使用时可通过java代码调用cmd指令完成网页转换为pdf的功能。

官网地址: https://wkhtmltopdf.org/downloads.html

2、Linux下的使用

无需任何安装,现在可以开始直接使用了。

  1. 1、先将刚才下载的包解压:tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
  2. 2、然后运行/data/wkhtmltox/bin/wkhtmltopdf www.baidu.com 1.pdf

3、windows下的使用

  1. 进入wkhtmltopdf安装的bin目录下,执行
  2. wkhtmltopdf.exe www.baidu.com 1.pdf

4、java代码

HtmlToPdfInterceptor.java

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. public class HtmlToPdfInterceptor extends Thread {
  6. private InputStream is;
  7. public HtmlToPdfInterceptor(InputStream is) {
  8. this.is = is;
  9. }
  10. @Override
  11. public void run() {
  12. try {
  13. InputStreamReader isr = new InputStreamReader(is, "utf-8");
  14. BufferedReader br = new BufferedReader(isr);
  15. String line = null;
  16. while ((line = br.readLine()) != null) {
  17. System.out.println(line); //输出内容
  18. }
  19. } catch (IOException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }

HtmlToPdf.java

  1. import java.io.File;
  2. public class HtmlToPdf {
  3. // wkhtmltopdf在系统中的路径,需要换成自己的目录地址
  4. //private static String toPdfcmd = "wkhtmltopdf-amd64";
  5. private static String toPdfcmd = "D:\\software\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
  6. /**
  7. * html转pdf
  8. *
  9. * @param srcPath
  10. * html路径,可以是硬盘上的路径,也可以是网络路径
  11. * @param destPath
  12. * pdf保存路径
  13. * @return 转换成功返回true
  14. */
  15. public static boolean convert(String srcPath, String destPath) {
  16. System.out.println("--------html转pdf start----------");
  17. File file = new File(destPath);
  18. File parent = file.getParentFile();
  19. // 如果pdf保存路径不存在,则创建路径
  20. if (!parent.exists()) {
  21. parent.mkdirs();
  22. }
  23. StringBuilder cmd = new StringBuilder();
  24. cmd.append(toPdfcmd);
  25. cmd.append(" ");
  26. cmd.append(" --page-size A4 ");//默认的页面尺寸是 A4 指定你想要的页面尺寸,如:A3,Letter 和 Legal等
  27. cmd.append(" --minimum-font-size 18 ");// 字体大小调整
  28. // wkhtmltopdf-amd64 --page-size A3 iversion.html iversion.pdf
  29. // cmd.append(" --footer-html file:///" + "https://www.speechb.com");// (添加一个HTML页脚,后面是网址)
  30. /* cmd.append(" --header-line");// 页眉下面的线
  31. cmd.append(" --header-center 这里是页眉这里是页眉这里是页眉这里是页眉 ");//页眉中间内容
  32. cmd.append(" --margin-top 3cm ");// 设置页面上边距 (default 10mm)
  33. cmd.append(" --header-html file:///" + "https://blog.csdn.net/x6582026/article/details/53835835");// (添加一个HTML页眉,后面是网址)
  34. cmd.append(" --header-spacing 5 ");// (设置页眉和内容的距离,默认0)
  35. cmd.append(" --footer-center 第[page]页/共[topage]页");//设置在中心位置的页脚内容
  36. //cmd.append(" --footer-html file:///" + "https://blog.csdn.net/x6582026/article/details/53835835");// (添加一个HTML页脚,后面是网址)
  37. cmd.append(" --footer-line");// * 显示一条线在页脚内容上)
  38. cmd.append(" --footer-spacing 5 ");// (设置页脚和内容的距离)*/
  39. cmd.append(srcPath);
  40. cmd.append(" ");
  41. cmd.append(destPath);
  42. System.out.println("--------html转pdf cmd----------"+cmd.toString());
  43. boolean result = true;
  44. try {
  45. Process proc = Runtime.getRuntime().exec(cmd.toString());
  46. HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream());
  47. HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream());
  48. error.start();
  49. output.start();
  50. proc.waitFor();
  51. } catch (Exception e) {
  52. result = false;
  53. e.printStackTrace();
  54. }
  55. return result;
  56. }
  57. public static void main(String[] args) {
  58. convert("www.blog.speechb.com", "1.pdf");
  59. }
  60. }