zoukankan      html  css  js  c++  java
  • java调用wkhtmltopdf生成pdf文件,美观,省事

          最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果,

    需要自己调整好多东西,样式,字体等等,好麻烦,毕竟博主这么懒的人,哈哈。-------jstarseven

    言归正传:

    java生成pdf文件,方式很多,以上提到的哪几种方式具体可以参考这篇文章<讲解很详细>:http://blog.csdn.net/ouyhong123/article/details/26401967

    本文说一下博主认为比较好用一个工具:wkhtmltopdf

    wkhtmltopdf是一个使用webkit网页渲染引擎开发的用来将 html转成 pdf的工具,可以跟多种脚本语言进行集成来转换文档,好用还方便,至少我的pdf没有超级复杂,哈哈

    下载地址:https://wkhtmltopdf.org/downloads.html

    下载之后安装一下,博主的安装目录:E:softwarewkhtmltopdf

    首先测试一下:

    [转载请注明原文出处]:http://www.cnblogs.com/jstarseven/p/7251711.html,这么多字,博主码的也挺累的,谢谢合作。

    进入cmd,cd E:softwarewkhtmltopdfin

    执行wkhtmltopdf.exe http://www.jstarseven.com/  E:datapdfjstarseven.pdf

    打开E:datapdfjstarseven.pdf 看一下效果还可以,至少没有很麻烦。

    然后就是写个小程序,封装一下,调一下dos命令就可以了。

    博主的思路是:事先准备好一个需要生成pdf的html模板,数据全用占位符占位,等到需要生成pdf的时候,首先向文件里面写入数据,然后调用wkhtmltopdf生成pdf文件。

    文件那部分就不说了,直接看pdf这部分吧,代码很简单。

    代码: HtmlToPdf.java

     1 package com.server.wkhtmltopdf;
     2 
     3 import java.io.*;
     4 
     5 /**
     6  * Created by jstarseven on 2017/7/25.
     7  */
     8 public class HtmlToPdf {
     9     //wkhtmltopdf在系统中的路径
    10     private static final String toPdfTool = "D:\software-dev\wkhtmltopdf\bin\wkhtmltopdf.exe";
    11 
    12     /**
    13      * html转pdf
    14      *
    15      * @param srcPath  html路径,可以是硬盘上的路径,也可以是网络路径
    16      * @param destPath pdf保存路径
    17      * @return 转换成功返回true
    18      */
    19     public static boolean convert(String srcPath, String destPath) {
    20         File file = new File(destPath);
    21         File parent = file.getParentFile();
    22         //如果pdf保存路径不存在,则创建路径
    23         if (!parent.exists())
    24             parent.mkdirs();
    25         StringBuilder cmd = new StringBuilder();
    26         cmd.append(toPdfTool);
    27         cmd.append(" ");
    28         cmd.append(srcPath);
    29         cmd.append(" ");
    30         cmd.append(destPath);
    31 
    32         boolean result = true;
    33         try {
    34             Process proc = Runtime.getRuntime().exec(cmd.toString());
    35             HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream());
    36             HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream());
    37             error.start();
    38             output.start();
    39             proc.waitFor();
    40         } catch (Exception e) {
    41             result = false;
    42             e.printStackTrace();
    43         }
    44 
    45         return result;
    46     }
    47 
    48     public static void main(String[] args) {
    49         convert("http://www.jstarseven.com/", "E:\data\pdf\jstarseven.pdf");
    50     }
    51 }
    52 
    53 class HtmlToPdfInterceptor extends Thread {
    54     private InputStream is;
    55 
    56     public HtmlToPdfInterceptor(InputStream is) {
    57         this.is = is;
    58     }
    59 
    60     public void run() {
    61         try {
    62             InputStreamReader isr = new InputStreamReader(is, "utf-8");
    63             BufferedReader br = new BufferedReader(isr);
    64             String line;
    65             while ((line = br.readLine()) != null) {
    66                 System.out.println(line); //输出内容
    67             }
    68         } catch (IOException e) {
    69             e.printStackTrace();
    70         }
    71     }
    72 }
    View Code

    效果测试图:

    最后达成的效果,其实就和采用phantomjs截了图差不多,个人感觉还不错,不知道会不会有其他的问题,尚待发现。。。

    [转载请注明原文出处]:http://www.cnblogs.com/jstarseven/p/7251711.html,这么多字,博主码的也挺累的,谢谢合作。

    注意事项

    执行./wkhtmltoimage 出现如下错误:
    ./wkhtmltoimage: error while loading shared libraries: libXext.so.6: cannot open shared object file
    安装:
    yum -y install libXrender*
    yum -y install libXext*
    yum -y install libX11*
    yum -y install freetype*
    yum -y install fontconfig*
    yum -y install zlib*

    使用:./wkhtmltopdf html_path pdf_path

    中文乱码或者空白解决方法(如果wkhtmltopdf中文显示空白或者乱码方框):
    打开windows c:Windowsfontssimsun.ttc拷贝到linux服务器/usr/share/fonts/目录下,再次生成pdf中文显示正常

     -END-

  • 相关阅读:
    gc buffer busy/gcs log flush sync与log file sync
    给Oracle年轻的初学者的几点建议
    Android 编程下帧动画在 Activity 启动时自动运行的几种方式
    Android 编程下 Touch 事件的分发和消费机制
    Java 编程下 static 关键字
    Java 编程下 final 关键字
    Android 编程下模拟 HOME 键效果
    Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?
    Extjs4 大型项目目录结构重构
    [转]SQLServer 2008 允许远程连接的配置方法
  • 原文地址:https://www.cnblogs.com/jstarseven/p/7251711.html
Copyright © 2011-2022 走看看