A. java 有關word,excel,pdf轉換成html 有幾種方式
java將Word/Excel/PDF文件轉換成HTML整理
項目開發過程中,需求涉及到了各種文檔轉換為HTML或者網頁易顯示格式,現在將實現方式整理如下:
一、使用Jacob轉換Word,Excel為HTML
「JACOB一個Java-COM中間件.通過這個組件你可以在Java應用程序中調用COM組件和Win32 libraries。」
首先下載Jacob包,JDK1.5以上需要使用Jacob1.9版本(JDK1.6尚未測試),與先前的Jacob1.7差別不大
1、將壓縮包解壓後,Jacob.jar添加到Libraries中;
2、將Jacob.dll放至「WINDOWS\SYSTEM32」下面。
需要注意的是:
【使用IDE啟動Web伺服器時,系統讀取不到Jacob.dll,例如用MyEclipse啟動Tomcat,就需要將dll文件到MyEclipse安裝目錄的「jre\bin」下面。
一般系統沒有載入到Jacob.dll文件時,報錯信息為:「java.lang.UnsatisfiedLinkError: no jacob in java.library.path」】
新建類:
1public class JacobUtil
2{
3 public static final int WORD_HTML = 8;
4
5 public static final int WORD_TXT = 7;
6
7 public static final int EXCEL_HTML = 44;
8
9 /** *//**
10 * WORD轉HTML
11 * @param docfile WORD文件全路徑
12 * @param htmlfile 轉換後HTML存放路徑
13 */
14 public static void wordToHtml(String docfile, String htmlfile)
15 {
16 ActiveXComponent app = new ActiveXComponent("Word.Application"); // 啟動word
17 try
18 {
19 app.setProperty("Visible", new Variant(false));
20 Dispatch docs = app.getProperty("Documents").toDispatch();
21 Dispatch doc = Dispatch.invoke(
22 docs,
23 "Open",
24 Dispatch.Method,
25 new Object[] { docfile, new Variant(false),
26 new Variant(true) }, new int[1]).toDispatch();
27 Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
28 htmlfile, new Variant(WORD_HTML) }, new int[1]);
29 Variant f = new Variant(false);
30 Dispatch.call(doc, "Close", f);
31 }
32 catch (Exception e)
33 {
34 e.printStackTrace();
35 }
36 finally
37 {
38 app.invoke("Quit", new Variant[] {});
39 }
40 }
41
42 /** *//**
43 * EXCEL轉HTML
44 * @param xlsfile EXCEL文件全路徑
45 * @param htmlfile 轉換後HTML存放路徑
46 */
47 public static void excelToHtml(String xlsfile, String htmlfile)
48 {
49 ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 啟動word
50 try
51 {
52 app.setProperty("Visible", new Variant(false));
53 Dispatch excels = app.getProperty("Workbooks").toDispatch();
54 Dispatch excel = Dispatch.invoke(
55 excels,
56 "Open",
57 Dispatch.Method,
58 new Object[] { xlsfile, new Variant(false),
59 new Variant(true) }, new int[1]).toDispatch();
60 Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[] {
61 htmlfile, new Variant(EXCEL_HTML) }, new int[1]);
62 Variant f = new Variant(false);
63 Dispatch.call(excel, "Close", f);
64 }
65 catch (Exception e)
66 {
67 e.printStackTrace();
68 }
69 finally
70 {
71 app.invoke("Quit", new Variant[] {});
72 }
73 }
74
75}
76
當時我在找轉換控制項時,發現網易也轉載了一偏關於Jacob使用幫助,但其中出現了比較嚴重的錯誤:String htmlfile = "C:\\AA";
只指定到了文件夾一級,正確寫法是String htmlfile = "C:\\AA\\xxx.html";
到此WORD/EXCEL轉換HTML就已經差不多了,相信大家應該很清楚了:)
二、使用XPDF將PDF轉換為HTML
1、下載xpdf最新版本,地址:http://www.foolabs.com/xpdf/download.html
我下載的是xpdf-3.02pl2-win32.zip
2、下載中文支持包
我下載的是xpdf-chinese-simplified.tar.gz
3、下載pdftohtml支持包
地址:http://sourceforge.net/projects/pdftohtml/
我下載的是:pdftohtml-0.39-win32.tar.gz
4、解壓調試
1) 先將xpdf-3.02pl2-win32.zip解壓,解壓後的內容可根據需要進行刪減,如果只需要轉換為txt格式,其他的exe文件可以刪除,只保留pdftotext.exe,以此類推;
2) 然後將xpdf-chinese-simplified.tar.gz解壓到剛才xpdf-3.02pl2-win32.zip的解壓目錄;
3) 將pdftohtml-0.39-win32.tar.gz解壓,pdftohtml.exe解壓到xpdf-3.02pl2-win32.zip的解壓目錄;
4) 目錄結構:
+---[X:\xpdf]
|-------各種轉換用到的exe文件
|
|-------xpdfrc
|
+------[X:\xpdf\xpdf-chinese-simplified]
|
|
+-------很多轉換時需要用到的字元文件
xpdfrc:此文件是用來聲明轉換字元集對應路徑的文件
5) 修改xpdfrc文件(文件原名為sample-xpdfrc)
修改文件內容為:
Txt代碼
#----- begin Chinese Simplified support package
cidToUnicode Adobe-GB1 xpdf-chinese-simplified\Adobe-GB1.cidToUnicode
unicodeMap ISO-2022-CN xpdf-chinese-simplified\ISO-2022-CN.unicodeMap
unicodeMap EUC-CN xpdf-chinese-simplified\EUC-CN.unicodeMap
unicodeMap GBK xpdf-chinese-simplified\GBK.unicodeMap
cMapDir Adobe-GB1 xpdf-chinese-simplified\CMap
toUnicodeDir xpdf-chinese-simplified\CMap
fontDir C:\WINDOWS\Fonts
displayCIDFontTT Adobe-GB1 C:\WINDOWS\Fonts\simhei.ttf
#----- end Chinese Simplified support package
6) 創建bat文件pdftohtml.bat(放置的路徑不能包含空格)
內容為:
Txt代碼
@echo off
set folderPath=%1
set filePath=%2
cd /d %folderPath%
pdftohtml -enc GBK %filePath%
exit
7) 創建類
JAVA代碼
public class ConvertPdf
{
private static String INPUT_PATH;
private static String PROJECT_PATH;
public static void convertToHtml(String file, String project)
{
INPUT_PATH = file;
PROJECT_PATH = project;
if(checkContentType()==0)
{
toHtml();
}
}
private static int checkContentType()
{
String type = INPUT_PATH.substring(INPUT_PATH.lastIndexOf(".") + 1, INPUT_PATH.length())
.toLowerCase();
if (type.equals("pdf"))
return 0;
else
return 9;
}
private static void toHtml()
{
if(new File(INPUT_PATH).isFile())
{
try
{
String cmd = "cmd /c start X:\\pdftohtml.bat \"" + PROJECT_PATH + "\" \"" + INPUT_PATH + "\"";
Runtime.getRuntime().exec(cmd);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
B. 金蝶Apusic中間件中部署 SuperMap iServer
一、系統配置要求
本文使用軟體版本為 iServer 8.1.1 、 金蝶 9.0 ;64位操作系統為 Windows 10_1607 和 Ubuntu 14.04_server 。
文件如下:
supermap_iserver_8.1.1a_war.zip
AAS-V9.0_20170309.zip
Windows 和 linux 下安裝部署過程相同 。
二、安裝金蝶
金蝶中間件需要jdk環境,所以需要先安裝jdk,jdk版本應同時高於金蝶、iServer要求的版本。本文使用的金蝶要求jdk1.6及以上、iServer 8.1.1要求jre1.8及以上,所以這里使用 JDK1.8 (64位)。
安裝JDK
可以使用安裝包也可以使用解壓包,這里省略。
安裝金蝶
解壓 AAS-V9.0_20170309.zip 文件即可,本文解壓到以下目錄:
Windows : F:WORKAAS
Linux : /opt/AAS
配置金蝶許可
將收到的許可文件重命名為 license.xml 放到金蝶解壓目錄即可,本文放到以下目錄:
Windows : F:WORKAAS
Linux : /opt/AAS
啟動、關閉&管理金蝶服務
可以通過腳本啟動金蝶中間件。腳本位置:
Windows 下: {金蝶安裝目錄}domains{域}instartapusic.cmd、stopapusic.cmd (雙擊或cmd窗口運行)
Linux 下: {金蝶安裝目錄}/domains/{域}/bin/startapusic、stopapusic (bash或sh startapusic或stopapusic)
默認域是mydomain,所以本文的啟動關閉腳本路徑是:
Windows : F:.cmd、stopapusic.cmd
Linux : /opt/AAS/domains/mydomain/bin/startapusic、stopapusic
首次啟動驗證許可通過後,會提示設置管理員密碼,管理員用戶名是: admin
管理金蝶服務
瀏覽器訪問:
http://{hostname}:6888/admin
本機訪問可以將{hostname}替換成localhost或127.0.0.1;非本機訪問則使用域名或IP。
其他可以參考金蝶安裝目錄下的 readme.html 。
部署iServer
解壓 supermap_iserver_8.1.1a_war.zip 得到以下文件:
support_win_x64.zip (Windows下iServer依賴的SuperMap iObjects Java包)
support_linux_x64.tar.gz (Linux下iServer依賴的SuperMap iObjects Java包)
iserver.war (iServer部署包)
iserver#iClient.war (iServer自帶iClient示範程序部署包)
iserver#help.war (iServer自帶幫助文檔部署包)
Guide_smiserver_war_chn.pdf (iServer安裝說明)
BUILD_14511_15 (iServer版本號)
在金蝶中部署,需要先將 iserver#iClient.war 、 iserver#help.war 依次重命名為: iClient.war 、 help.war 。
配置iServer依賴環境
Windows上解壓 support_win_x64.zip ,本文解壓到 D:SuperMap。
Linux上解壓 support_linux_x64.tar.gz (命令:tar -zxvf {*.tar.gz文件} {解壓路徑,不寫解壓到當前路徑}),本文解壓到:/opt
配置iServer依賴環境的方式有兩種:設置系統環境變數、修改中間件相關腳本。
方式一:設置環境變數
本文在PATH中增加以下路徑:
Windows: D:SuperMapsupport_win_x64objectsjavain
Linux: /opt/support_linux_x64/objectsjava/bin
方式二:修改啟動腳本
Windows下, { 金蝶安裝目錄 }domains{ 域 }insetenv.cmd 或者 { 金蝶安裝目錄 }insetenv.cmd 文件第一行之後,比如rem set JAVA_HOME variable here.這句注釋之後添加以下內容,本文:F:WORKAASinsetenv.cmd:
rem rem後面的是注釋,也可以在這里設置中間件使用的jdk路徑
rem set JAVA_HOME=D:Program FilesJavajdk1.8.0_66
set PATH=D:SuperMapsupport_win_x64objectsjavain;%PATH%
Linux下, { 金蝶安裝目錄 }/domains/{ 域 }/bin/setenv 或者 { 金蝶安裝目錄 }/bin/setenv 文件第一行之後,比如# set JAVA_HOME variable here.這句注釋之後添加以下內容,本文:/opt/AAS/bin/setenv:
# #後面的是注釋,也可以在這里設置中間件使用的jdk路徑
#JAVA_HOME=/opt/jdk1.8.0_66
PATH=/opt/support_linux_x64/objectsjava/bin:$PATH
檢查iServer依賴環境&安裝iServer許可
Linux下,可以通過運行 support_linux_x64.tar.gz 解壓目錄下的一個腳本來檢查安裝iServer依賴,先進入該目錄,然後執行以下命令:
./dependencies_check_and_install.sh install -y
若安裝的iServer沒有該腳本,請參考iServer幫助文檔解決Linux下依賴問題。
安裝許可
Windows下,進入 support_win_x64.zip 解壓目錄下的 SuperMapLicenseCenter 目錄,運行 SuperMap.LicenseCenter.exe 即可,初次安裝SuperMap GIS軟體運行該程序會安裝許可驅動並自帶3個月試用許可。
Linux下,進入 support_linux_x64.tar.gz 解壓目錄/SuperMap_License/Support下,執行以下操作:
tar -xvf aksusbd-2.4.1-i386.tar #解壓許可驅動安裝包,以實際版本為准
cd aksusbd-2.4.1-i386 #進入安裝目錄,以實際解壓目錄為准
./dinst #安裝許可驅動
首次安裝自帶3個月試用許可。
部署iServer
將 iserver.war 、 iClient.war 、 help.war 放到 { 金蝶安裝目錄 }/domains/{ 域 }/applications 目錄下即可,比如本文放到以下目錄:
Windows : F:
Linux : /opt/AAS/domains/mydomain/applications
可以在金蝶Web管理控制台應用管理中管理iServer,如圖:
修改金蝶設置
金蝶中間件中可能限制了http方法,此時需要修改中間件設置。瀏覽器訪問金蝶Web管理控制台,在系統參數-Apusic參數中刪除 apusic.http.disabledMethod 項,如圖:
若有http請求方法限制,上述修改操作完成後,需要 重啟金蝶 。
部署完成,iServer訪問地址: http://{IP 或域名 }:6888/iserver (以金蝶Web管理控制台-應用管理-查看應用模塊-訪問應用進入的地址為准)。
C. pdflib什麼是 PDFlib
PDFlib 是一個功能強大的中間件,專門用於幫助開發者生成 Adobe 可移植文檔格式 (PDF) 文件。它作為用戶程序的後端工具,專注於生成PDF輸出,而將PDF的復雜內部處理交給它來處理。當你需要處理數據並將其轉換為PDF時,PDFlib提供了一套全面的方法,讓你無需深入關注PDF的底層技術,專注於核心業務邏輯。
PDFlib軟體包包含多種功能,基礎版本包括創建PDF輸出所需的一切,包括文本、矢量圖形、圖像和超文本元素。它具備強大的格式化能力,能輕松處理單行或多行文本的排版,以及圖像的插入和表格的構建。
而PDFlib+PDI的擴展包則進一步增強了功能,它在基礎版的基礎上增加了PDF輸入庫 (PDI),允許你在輸出的PDF文件中嵌入現有的PDF頁面。此外,還提供了pCOS介面,可以查詢導入文檔中PDF對象的詳細信息,如字體列表和元數據等。
更進一步的是PDFlib Personalization Server (PPS),它整合了PDFlib+PDI的功能,並增添了自動填充PDFlib塊的功能。PDFlib塊是頁面上的可填充區域,可以是文本、圖像或PDF頁。用戶可以通過Adobe Acrobat的PDFlib塊插件在互動式界面中創建和編輯這些塊,而PPS則能自動完成填充任務,大大提高了工作效率。這個插件已隨PPS一起提供。
PDFLib是用於創建PDF文檔的開發庫,提供了簡單易用的API,隱藏了創建PDF的復雜細節且不需要第3方軟體的支持。PDFLib庫對於個人是免費的,對於商業產品需要購買許可。