程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java使用wkhtmltox實現HTML代碼生成PDF文檔或者圖片,wkhtmltoxpdf

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

編輯:JAVA綜合教程

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


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

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

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

    使用wkhtmltoimage的時候也沒少走彎路,主要是對Linux不熟悉吧,在安裝的時候遇到了不少問題。現在把我自己摸索的知識分享給大家,大家可以參考一下,只是個人觀點,不正確的地方望大家見諒。下面就來介紹在Java調用這個軟甲的詳細用法。具體分為Windows環境和Linux環境。

 

1、軟件下載地址:

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

可以在這個頁面下載到最新版本的wkhtmltox。

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

 

2、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和轉換圖片的,後面會說到如何進行調用。

 

3、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來測試是否安裝成功。

 

4、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時會有點問題。以上是我的一些經歷,希望對大家有用!

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