java將html轉為pdf


將html轉為pdf的組件有很多,但是還沒有哪一款能達到這個效果,其只要原因是wkhtmltopdf使用webkit網頁渲染引擎開發的用來將 html轉成 pdf的工具,可以跟多種腳本語言進行集成來轉換文檔。但是就使用簡便性來說還是itext等組件占據優勢,如果你要轉換格式有比較高的要求,那么wkhtmltopdf絕對是不二之選!

下載路徑

官網地址 wkhtmltopdf.org/

github地址 github.com/wkhtmltopdf…

使用方法

windows直接使用:只要在windows命令行中輸入c:\wkhtmltopdf.exe my.oschina.net/papio/blog/… c:\blog.pdf 就可以把這篇文章轉成pdf,並保存到C盤根目錄。

java調用:java中調用wkhtmltopdf的命令Runtime.getRuntime().exec("c:\wkhtmltopdf.exe my.oschina.net/papio/blog/… c:\blog.pdf")就可以實現轉換。

java調用demo

 

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();
    }
}
    }
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("https://my.oschina.net/papio/blog/835645", "d:/wkhtmltopdf.pdf");
}

 

}

wkhtmltopdf 參數詳解

wkhtmltopdf [OPTIONS]... [More input files]

常規選項

--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]       由當前時間,系統的本地格式取代


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM