程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java操作wkhtmltopdf完成Html轉PDF

Java操作wkhtmltopdf完成Html轉PDF

編輯:關於JAVA

Java操作wkhtmltopdf完成Html轉PDF。本站提示廣大學習愛好者:(Java操作wkhtmltopdf完成Html轉PDF)文章只能為提供參考,不一定能成為您想要的結果。以下是Java操作wkhtmltopdf完成Html轉PDF正文


做java開發的都知道,java生成pdf大局部都是用itext,itext確實是java開源組件的第一選擇。不過itext也有局限,就是要自己寫模版,零碎中的表雙數量有好幾百個,為每個表單做一個導出模版不理想。 所以找了個直接可以調用的工具wkhtmltopdf,將生成好的html直接轉換成pdf。功用很弱小。

 

wkhtmltopdf是一個運用webkit網頁渲染引擎開發的用來將 html轉成 pdf的工具,可以跟多種腳本言語停止集成來轉換文檔。

官網地址 http://wkhtmltopdf.org/

github地址 https://github.com/wkhtmltopdf/wkhtmltopdf

wkhtmltopdf把html轉成pdf很復雜,只需在windows命令行中輸出c:\wkhtmltopdf.exe http://www.cnblogs.com c:\cnblogs.pdf

就可以把博客園網頁轉成pdf,並保管到C盤根目錄。

在java中調用wkhtmltopdf的命令Runtime.getRuntime().exec("c:\wkhtmltopdf.exe http://www.cnblogs.com c:\cnblogs.pdf")就可以完成轉換。

上面把命令封裝成java工具類,方便調用。

 

/**
 * 版權一切(C) 2016 www.xiongge.club
 * @author xsw
 * @date 2016-12-8 上午10:17:33 
 */
package wkhtmltopdf;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/** 
 * @ClassName: HtmlToPdfInterceptor 
 * @Description: TODO() 
 * @author xsw
 * @date 2016-12-8 上午10:17:33 
 *  
 */

public 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);
            String line = null;
            while ((line = br.readLine()) != null) {
                System.out.println(line.toString()); //輸入內容
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
/**
 * 版權一切(C) 2016 www.xiongge.club
 * @author xsw
 * @date 2016-12-8 上午10:14:54 
 */
package wkhtmltopdf;

import java.io.File;

/** 
 * @ClassName: HtmlToPdf 
 * @Description: TODO() 
 * @author xsw
 * @date 2016-12-8 上午10:14:54 
 *  
 */

public class HtmlToPdf {
    //wkhtmltopdf在零碎中的途徑
    private static final String toPdfTool = "D:\\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("  --header-line");//頁眉上面的線
        cmd.append("  --header-center 這裡是頁眉這裡是頁眉這裡是頁眉這裡是頁眉 ");//頁眉兩頭內容
        //cmd.append("  --margin-top 30mm ");//設置頁面上邊距 (default 10mm) 
        cmd.append(" --header-spacing 10 ");//    (設置頁眉和內容的間隔,默許0)
        cmd.append(srcPath);
        cmd.append(" ");
        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();
        }catch(Exception e){
            result = false;
            e.printStackTrace();
        }
        
        return result;
    }
    public static void main(String[] args) {
        HtmlToPdf.convert("http://www.cnblogs.com/xionggeclub/p/6144241.html", "d:/wkhtmltopdf.pdf");
    }
}

 

附上wkhtmltopdf 參數詳解  

wkhtmltopdf [OPTIONS]... <input file> [More input files] <output file>
慣例選項
     --allow <path>  允許加載從指定的文件夾中的文件或文件(可反復)
    --book*  設置一會打印一本書的時分,通常設置的選項 
     --collate  打印多份正本時整理 
     --cookie <name> <value>  設置一個額定的cookie(可反復) 
     --cookie-jar <path>  讀取和寫入的Cookie,並在提供的cookie jar文件 
     --copies <number>  復印打印成pdf文件數(默許為1) 
     --cover* <url>  運用HTML文件作為封面。它會帶頁眉和頁腳的TOC之前拔出 
     --custom-header <name> <value>  設置一個附加的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>  顯式更改DPI(這對基於X11的零碎沒有任何影響) 
     --enable-plugins  啟用已裝置的插件(如Flash
     --encoding <encoding>  設置默許的文字編碼 
     --extended-help  顯示更普遍的協助,詳細引見了不罕見的命令開關 
     --forms*  翻開HTML表單字段轉換為PDF表單域 
    --grayscale  PDF格式將在灰階發生
    --help  Display help 
     --htmldoc  輸入順序HTML協助
     --ignore-load-errors  疏忽claimes加載進程中曾經遇到了一個錯誤頁面 
    --lowquality  發生低質量的PDF/ PS。有用減少後果文檔的空間 
     --manpage  輸入順序手冊頁 
    --margin-bottom <unitreal>  設置頁面下邊距 (default 10mm) 
    --margin-left <unitreal>  將右邊頁邊距 (default 10mm) 
    --margin-right <unitreal>  設置頁面左邊距 (default 10mm) 
    --margin-top <unitreal>  設置頁面上邊距 (default 10mm) 
     --minimum-font-size <int>  最小字體大小 (default 5) 
     --no-background  不打印背景
    --orientation <orientation>  設置方向為橫向或縱向 
     --page-height <unitreal>  頁面高度 (default unit millimeter) 
     --page-offset* <offset>  設置起始頁碼 (default 1) 
    --page-size <size>  設置紙張大小: A4, Letter, etc. 
    --page-width <unitreal>  頁面寬度 (default unit millimeter) 
     --password <password>  HTTP驗證密碼 
     --post <name> <value>  Add an additional post field (repeatable) 
     --post-file <name> <path>  Post an aditional file (repeatable) 
     --print-media-type*  運用的打印介質類型,而不是屏幕 
    --proxy <proxy>  運用代理 
    --quiet  Be less verbose 
    --read-args-from-stdin  讀取規范輸出的命令行參數 
    --readme  輸入順序自述
    --redirect-delay <msec>  等候幾毫秒為JS-重定向(default 200) 
    --replace* <name> <value>  交換稱號,值的頁眉和頁腳(可反復) 
    --stop-slow-scripts  中止運轉遲緩的JavaScripts 
    --title <text>  生成的PDF文件的標題(第一個文檔的標題運用,假如沒有指定) 
    --toc*  拔出的內容的表中的文件的掃尾
    --use-xserver*  運用X服務器(一些插件和其他的東西沒有X11能夠無法正常任務) 
    --user-style-sheet <url>  指定用戶的款式表,加載在每一頁中
    --username <username>  HTTP認證的用戶名 
    --version  輸入版本信息加入
     --zoom <float>  運用這個縮放因子 (default 1) 

頁眉和頁腳選項
--header-center*    <text>    (設置在中心地位的頁眉內容)  
--header-font-name* <name>    (default Arial)  (設置頁眉的字體稱號)
--header-font-size* <size>    (設置頁眉的字體大小)
--header-html*  <url> (添加一個HTML頁眉,前面是網址)
--header-left*  <text>   (左對齊的頁眉文本)
--header-line*      (顯示一條線在頁眉下)
--header-right* <text>    (右對齊頁眉文本)
--header-spacing*   <real>    (設置頁眉和內容的間隔,默許0)
--footer-center*    <text>    (設置在中心地位的頁腳內容)  
--footer-font-name* <name>    (設置頁腳的字體稱號) 
--footer-font-size* <size>    (設置頁腳的字體大小default 11)
--footer-html*  <url> (添加一個HTML頁腳,前面是網址)
--footer-left*  <text>    (左對齊的頁腳文本)
--footer-line*      顯示一條線在頁腳內容上)
--footer-right* <text>    (右對齊頁腳文本)
--footer-spacing*   <real>    (設置頁腳和內容的間隔)
./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* <level>  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* <name>  Set the font used for the toc (default Arial) 
 --toc-header-font-name* <name>  The font of the toc header (if unset use --toc-font-name) 
 --toc-header-font-size* <size>  The font size of the toc header (default 15) 
 --toc-header-text* <text>  The header text of the toc (default Table Of Contents) 
 --toc-l1-font-size* <size>  Set the font size on level 1 of the toc (default 12) 
 --toc-l1-indentation* <num>  Set indentation on level 1 of the toc (default 0) 
 --toc-l2-font-size* <size>  Set the font size on level 2 of the toc (default 10) 
 --toc-l2-indentation* <num>  Set indentation on level 2 of the toc (default 20) 
 --toc-l3-font-size* <size>  Set the font size on level 3 of the toc (default 8) 
 --toc-l3-indentation* <num>  Set indentation on level 3 of the toc (default 40) 
 --toc-l4-font-size* <size>  Set the font size on level 4 of the toc (default 6) 
 --toc-l4-indentation* <num>  Set indentation on level 4 of the toc (default 60) 
 --toc-l5-font-size* <size>  Set the font size on level 5 of the toc (default 4) 
 --toc-l5-indentation* <num>  Set indentation on level 5 of the toc (default 80) 
 --toc-l6-font-size* <size>  Set the font size on level 6 of the toc (default 2) 
 --toc-l6-indentation* <num>  Set indentation on level 6 of the toc (default 100) 
 --toc-l7-font-size* <size>  Set the font size on level 7 of the toc (default 0) 
 --toc-l7-indentation* <num>  Set indentation on level 7 of the toc (default 120) 
 --toc-no-dots*  Do not use dots, in the toc
輪廓選項
 --dump-outline <file>  轉儲目錄到一個文件
 --outline  顯示目錄(文章中h1,h2來定)
 --outline-depth <level>  設置目錄的深度(默許為4)
頁腳和頁眉
 * [page]       由以後正在打印的頁的數目替代
 * [frompage]   由要打印的第一頁的數量取代
 * [topage]     由最後一頁要打印的數量取代
 * [webpage]    經過正在打印的頁面的URL交換
 * [section]    由以後節的稱號交換
 * [subsection] 由以後大節的稱號交換
 * [date]       由以後日期零碎的本地格式取代
 * [time]       由以後時間,零碎的本地格式取代

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved