Java使用wkhtmltox實現HTML代碼生成PDF文檔或者圖片

    因爲項目須要,把HTML代碼轉爲PDF或者圖片進行保存。最開始使用Flying Saucer來把HTML代碼生成爲PDF文檔,功能已經開發出來了,也可以完成轉換功能,期間也遇到了中文支持以及圖片路徑的問題,也解決了,原本覺得這樣就能夠了,可是在測試期間發現有些PDF文檔生成的樣式有問題,搜索了一下發現,Flying Saucer是比較老的技術,如今也沒人搞了,因此對於CSS3.0的支持很不友好。html

    功能要實現啊,讓別人改HTML代碼也不現實,那就嘗試着別的技術唄。後來想着能生成圖片也行,就找了一下,發現使用CSSBOX能夠把HTML代碼生成爲圖片,而後就試了一下,果真能夠,而後就開心的把這個功能集成到系統裏面了。一直沒出什麼問題,結果悲劇又發生了,有一個頁面使用CSS3渲染了一條斜着的直線,結果CSSBOX沒法轉換。linux

    其實開始的時候就知道有wkhtmltopdf能夠把HTML代碼生成爲PDF文檔,可是這個其實是要安裝一個軟件,在Java代碼中調用這個軟件執行轉換,當時以爲沒有別的技術直接引入jar包方便,就沒有嘗試,如今實在是沒有辦法了,就嘗試一下吧。由於我如今是要把HTML代碼生成爲圖片,因此我使用的是wkhtmltoimage,其實沒什麼差異,在安裝wkhtmltox軟件時,會同時安裝wkhtmltopdf和wkhtmltoimage。centos

    使用wkhtmltoimage的時候也沒少走彎路,主要是對Linux不熟悉吧,在安裝的時候遇到了很多問題。如今把我本身摸索的知識分享給你們,你們能夠參考一下,只是我的觀點,不正確的地方望你們見諒。下面就來介紹在Java調用這個軟甲的詳細用法。具體分爲Windows環境和Linux環境。測試

 

一、軟件下載地址:spa

官網下載地址首頁:http://wkhtmltopdf.org/downloads.htmlcode

能夠在這個頁面下載到最新版本的wkhtmltox。htm

我沒有使用最新版的,我使用的是0.12.2版本,下載地址爲:http://download.gna.org/wkhtmltopdf/0.12/0.12.2/blog

 

二、Windows環境安裝圖片

Windows環境安裝軟件我就很少說了,我是在http://download.gna.org/wkhtmltopdf/0.12/0.12.2/這個網址,下載的wkhtmltox-0.12.2_msvc2013-win64.exe這個版本,32位的能夠選擇32位的版本下載,下載完成後就是雙擊安裝了。安裝完成後在安裝目錄能找到wkhtmltopdf.exe和wkhtmltoimage.exe,這兩個執行程序就是咱們用來轉換PDF和轉換圖片的,後面會說到如何進行調用。開發

 

三、Linux環境安裝

 我是在http://download.gna.org/wkhtmltopdf/0.12/0.12.2/地址下載的wkhtmltox-0.12.2_linux-centos6-i386.rpm這個版本的RPM包,因爲我虛擬機安裝的是CentOS6.5的32位,因此下載的是這個版本,大家能夠根據實際狀況,這個網址上有Linux的版本和32位64位對應的版本下載,根據實際狀況選擇便可。

 下載方式,能夠在Linux上直接使用wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2/wkhtmltox-0.12.2_linux-centos6-i386.rpm 進行下載,若是像我同樣使用的是虛擬機,也能夠先下載到本機上,而後在Linux上使用rz -be進行上傳,注意使用rz命令上傳大文件時,必定要加這個-be命令,不然上傳不成功。若你的Linux中沒有rz命令,那麼可使用yum -y install lrzsz命令來安裝rz和sz命令。

 

下面開始安裝:

 1)進入到RPM包下載的目錄下,執行rpm -ivh wkhtmltox-0.12.2_linux-centos6-i386.rpm命令,結果出現以下所示:

 

失敗緣由是缺乏xorg-x11-fonts-Type1和xorg-x11-fonts-75dpi依賴,那麼咱們要先裝依賴。

 2)安裝xorg-x11-fonts-Type1依賴:yum -y install xorg-x11-fonts-Type1。

 3)安裝xorg-x11-fonts-75dpi依賴:yum -y install xorg-x11-fonts-75dpi。

 4)再次安裝wkhtmltox:rpm -ivh wkhtmltox-0.12.2_linux-centos6-i386.rpm,OK,安裝成功。若是你們在安裝時還缺乏其餘依賴,那麼須要先把缺乏的依賴安裝以後再安裝wkhtmltox。查詢缺乏的依賴方法是 yum search xxxx,xxxx是缺乏的依賴關鍵字,而後從查詢結果中找到正確的yum源進行安裝。

 5)安裝完成後,咱們可使用wkhtmltoimage http://www.baidu.com 1.jpg或者wkhtmltopdf http://www.baidu.com 1.pdf來測試是否安裝成功。

 

四、Java程序調用

 Java調用時,不須要添加額外的Jar包。

 Java調用代碼:

 1 public class CustomWKHtmlToPdfUtil {
 2 
 3     public String getCommand(String sourceFilePath, String targetFilePath) {
 4         String system = System.getProperty("os.name");
 5         if(system.contains("Windows")) {
 6             return "D:\\Program Files\\wkhtmltopdf\\wkhtmltoimage.exe " + sourceFilePath + " " + targetFilePath;
 7         }else if(system.contains("Linux")) {
 8             return "wkhtmltoimage " + sourceFilePath + " " + targetFilePath;
 9         }
10         return "";
11     }
12 
13     public static void main(String[] args) throws Exception{
14         CustomWKHtmlToPdfUtil util = new CustomWKHtmlToPdfUtil();
15         String command = util.getCommand("e:/html/result.html", "e:/html/result.jpg");
16         Process process = Runtime.getRuntime().exec(command);
17         process.waitFor();  //這個調用比較關鍵,就是等當前命令執行完成後再往下執行
18         System.out.println("執行完成");
19     }
20 }

    其實就是使用Java調用cmd的執行命令,可是調用要區分Windows和Linux系統,若是是Windows系統,則必需要指定wkhtmltoimage或者wkhtmltopdf的位置,我在Windows的安裝位置是D:\Program Files\wkhtmltopdf,所以我在上面調用wkhtmltoimage時使用的路徑是D:\Program Files\wkhtmltopdf\wkhtmltoimage.exe。在Linux環境下,因爲軟件在安裝時,會把wkhtmltopdf和wkhtmlimage安裝到系統命令中,所以不須要指定安裝路徑,直接調用就能夠了。

    我比較推薦使用wkhtmltoimage生成JPG圖片,我調用wkhtmltopdf生成PDF時會有點問題。以上是個人一些經歷,但願對你們有用!

相關文章
相關標籤/搜索