openOffice 轉換檔案格式
引言:突然接到任務,要將word或者ppt轉換成HTML的格式在頁面上顯示,類似於百度文庫的效果。以前也聽說過,覺得用java實現起來還是很簡單的。於是我就帶著我的任務以及我的好奇心出發了,在網上找了些資料,最終決定用OpenOffice。
首先簡單的介紹下轉換需要的環境:
2、需要下載jodconverter包
在此我提供了jodconverter包(包括jodconverter2、jodconverter3,注:jodconverter2需要手動啟動openoffice服務,如有不清楚的地方可以在我文章下面留言),
JODConverter是一個開源文件轉換工具,既可以應用於Linux平臺,也可其應用於Windows平臺。其基於OpenOffice.org或者LibreOffice。因此,文件轉換伺服器上必須安裝有OpenOffice或者LibreOffice。
目前最新版本的JODConverter為JODConverter3.0,它要求JDK1.5以上的Java環境,同時還需要OpenOffice.org 3.x版本。本文基於最新版本3.0設計實現,如果是版本為2,則有不同的實現。(版本2需要手動啟動OpenOffice.org服務,或者建立Windows服務設定為開機啟動,而版本3提供了開啟服務的介面,在此我使用的是版本3)
一切準備就緒那就直接開始了...
下面是一個比較完整的例子,可以實現 WORD==>HTML 、PPT==>HTML、WORD==>PDF、PPT==>PDF的轉換。
package core; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.artofsolving.jodconverter.OfficeDocumentConverter; import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration; import org.artofsolving.jodconverter.office.OfficeManager; //轉換文件為pdf public class OpenOfficePdfConvert { /** * @param args */ private static OfficeManager officeManager; private static String OFFICE_HOME = "d:\\Program Files\\OpenOffice.org 3";// 安裝OPenOffice // 的路徑 private static int port[] = { 8100 }; //1、客戶上傳Word文件到伺服器 //2、伺服器呼叫OpenOffice程式開啟上傳的Word文件 //3、OpenOffice將Word文件另存為Html格式 public File convertToHtml(String inputFile, String outputFile) throws FileNotFoundException { // 建立儲存html的檔案 File wantFile = new File(outputFile + File.separator + new Date().getTime() + ".html"); // 開啟伺服器 startService(); // 進行轉換 System.out.println("進行文件轉換轉換:" + inputFile + " --> " + outputFile); OfficeDocumentConverter converter = new OfficeDocumentConverter( officeManager); converter.convert(new File(inputFile), wantFile); // 關閉伺服器 stopService(); System.out.println(); return wantFile; } // 開啟伺服器 public static Boolean startService() { DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration(); try { System.out.println("準備啟動服務...."); configuration.setOfficeHome(OFFICE_HOME);// 設定OpenOffice.org安裝目錄 configuration.setPortNumbers(port); // 設定轉換埠,預設為8100 configuration.setTaskExecutionTimeout(1000 * 60 * 5L);// 設定任務執行超時為5分鐘 configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);// 設定任務佇列超時為24小時 officeManager = configuration.buildOfficeManager(); officeManager.start(); // 啟動服務 System.out.println("office轉換服務啟動成功!"); return true; } catch (Exception ce) { System.out.println("office轉換服務啟動失敗!詳細資訊:" + ce); return false; } } // 關閉伺服器 public static void stopService() { System.out.println("關閉office轉換服務...."); if (officeManager != null) { officeManager.stop(); } System.out.println("關閉office轉換成功!"); } /* * 進行測試轉換是否成功 */ public static void main(String[] args) { String inputFile = "c:\\test\\test.docx"; String outputFile = "c:\\test"; OpenOfficePdfConvert opc = new OpenOfficePdfConvert(); try { opc.convertToHtml(inputFile,outputFile); } catch (FileNotFoundException e1) { e1.printStackTrace(); } /*try { * 如果想看到不帶HTML標籤的字串可以呼叫這個方法進行簡化 System.out.println(toHtmlString(inputFile, outputFile));} catch (FileNotFoundException e) { e.printStackTrace(); }*/ System.out.println("恭喜您,轉換成功..."); } /** * 將word轉換成html檔案,並且獲取html檔案程式碼。 * * @param docFile * 需要轉換的文件 * @param filepath * 文件中圖片的儲存位置 * @return 轉換成功的html程式碼 * @throws FileNotFoundException */ public static String toHtmlString(String docFile, String filepath) throws FileNotFoundException { System.out.println("文件中圖片的儲存位置 ==>" + filepath); // 轉換word文件 OpenOfficePdfConvert opc = new OpenOfficePdfConvert(); File htmlFile = opc.convertToHtml(docFile, filepath); // 獲取html檔案流 StringBuffer htmlSb = new StringBuffer(); try { BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(htmlFile))); while (br.ready()) { htmlSb.append(br.readLine()); } br.close(); // 刪除臨時檔案 // htmlFile.delete(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // HTML檔案字串 String htmlStr = htmlSb.toString(); // 返回經過清潔的html文字 return clearFormat(htmlStr, filepath); } /** * 清除一些不需要的html標記 * * @param htmlStr 帶有複雜html標記的html語句 * * @return 去除了不需要html標記的語句 */ protected static String clearFormat(String htmlStr, String docImgPath) { // 獲取body內容的正則 String bodyReg = "<BODY .*</BODY>"; Pattern bodyPattern = Pattern.compile(bodyReg); Matcher bodyMatcher = bodyPattern.matcher(htmlStr); if (bodyMatcher.find()) { // 獲取BODY內容,並轉化BODY標籤為DIV htmlStr = bodyMatcher.group().replaceFirst("<BODY", "<DIV") .replaceAll("</BODY>", "</DIV>"); } // 調整圖片地址 htmlStr = htmlStr.replaceAll("<IMG SRC=\"", "<IMG SRC=\"" + docImgPath + "/"); // 把<P></P>轉換成</div></div>保留樣式 // content = content.replaceAll("(<P)([^>]*>.*?)(<\\/P>)", // "<div$2</div>"); // 把<P></P>轉換成</div></div>並刪除樣式 htmlStr = htmlStr.replaceAll("(<P)([^>]*)(>.*?)(<\\/P>)", "<p$3</p>"); // 刪除不需要的標籤 htmlStr = htmlStr .replaceAll( "<[/]?(font|FONT|span|SPAN|xml|XML|del|DEL|ins|INS|meta|META|[ovwxpOVWXP]:\\w+)[^>]*?>", ""); // 刪除不需要的屬性 htmlStr = htmlStr .replaceAll( "<([^>]*)(?:lang|LANG|class|CLASS|style|STYLE|size|SIZE|face|FACE|[ovwxpOVWXP]:\\w+)=(?:'[^']*'|\"\"[^\"\"]*\"\"|[^>]+)([^>]*)>", "<$1$2>"); return htmlStr; } }
主要類說明:
OfficeManager是一個介面,主要定義了三個方法:
1.public void start( )啟動OpenOffice服務
2.public void stop( )停止OpenOffice服務
3.public void execute(OfficeTask task)執行轉換任務
DefaultOfficeManagerConfiguration是一個實現了OfficeManager介面的實體類,其提供了相關方法配置OpenOffice.org,比如:
public DefaultOfficeManagerConfiguration setOfficeHome(String officeHome)設定OpenOffice.org或者LibreOffice安裝目錄,
windows下預設值為” C:\Program Files\OpenOffice.org 3”(LibreOffice進行相應更改),因此如果OpenOffice.org安裝在別的目錄,必須設定此項。
public DefaultOfficeManagerConfiguration setConnectionProtocol(OfficeConnectionProtocol conn)設定連線協議,確定使用管道通訊,還是socekt通訊。
pubcli DefaultOfficeManagerConfiguration setTemplateProfileDir(File templateProfileDir)設定臨時目錄。
除以上幾個方法之外,DefaultOfficeManagerConfiguration還提供了別的配置OpenOffice.org的方法,具體方法可以查詢JODConverter API手冊。
配置完之後,必須要執行方法buildOfficeManager(),實現真正的配置。
OfficeDocumentConverter中主要包含convert方法,該方法實際上呼叫的是實現OfficeManager介面的類中的execute方法。
相關推薦
openOffice 轉換檔案格式
引言:突然接到任務,要將word或者ppt轉換成HTML的格式在頁面上顯示,類似於百度文庫的效果。以前也聽說過,覺得用java實現起來還是很簡單的。於是我就帶著我的任務以及我的好奇心出發了,在網上找了些資料,最終決定用OpenOffice。 首先簡單的介紹
如何實現視訊格式轉換 檔案格式轉換攻略
格式轉換,相信大家都聽過,無論是視訊格式之間相互轉換,還是PDF等檔案之間的格式相互轉換,現在都是比較常見的。今天小編就3個比較常見的格式轉換問題,來給大家介紹一下對應的轉換方法。 一、PPT轉視訊 1、PPT自帶轉換 可能還有很多人不知道,PPT 2010以上的版本就有自帶視訊錄製的功能了
Notepadpp批量轉換檔案格式
<在網上下載一些開原始碼後,在Eclipse中、在SourceInsight中開啟,都是亂碼。——因為這些程式碼是utf-8編碼格式,而si不支援。所以需要對檔案格式進行轉換。 Notepad++可以自動轉換,比如開啟一個檔案,選單“轉換為ANSI編碼格
java利用openoffice轉換doc、docx、txt、pptx、xlxs為PDF格式檔案
1、首先安裝openoffice(安裝包可在我的資源中查到名稱:(openoffice))2、安裝完成後cmd 執行命令(1)cd C:\Program Files (x86)\openoffice\program(2)soffice -headless -accept=
java 調用OpenOffice將word格式文件轉換為pdf格式
一次 復制代碼 端口 rto system files runtime 存在 tco 一:環境搭建 OpenOffice 下載地址http://www.openoffice.org/ JodConverter 下載地址http://sourceforge.net/proje
如何將Excel檔案轉換WPS格式?
說起Excel和WPS兩種格式相信大家都知道,在大家平常辦公中都常常遇到,那麼小編在這裡問大家一個問題,Excel檔案轉換成WPS格式該如何進行操作呢?1、可以嘗試一下面的這種操作。同樣也需要藉助到輔助工具,這個需要大家在電腦上安裝一款PDF轉換器然後使用它進行Excel檔案轉換成WPS格式的操作了。2、安裝
乾貨|Word、PPT、TXT檔案快速轉換Excel格式,轉換全技巧!
在日常工作中各種檔案格式之間的相互轉換十分頻繁,但一直都有人對此一知半解,那麼今天就讓小編為大家詳細講解一下,PPT、Word、TXT檔案如何轉換為Excel檔案格式。 一、Word轉Excel Word檔案轉換Excel,方法十分簡單,具體方法有兩種。 1、複製貼上 步驟:選中Word文
【經驗分享】PPT檔案轉換PDF格式操作方法
說到PPT檔案和PDF格式的檔案,應該都比較熟悉了吧!畢竟使我們辦公中常用所使用到的檔案格式。有時候在處理完PPT檔案的時候為了不讓別人隨意改動裡面的內容,就可以將PPT檔案轉成PDF格式,對於怎麼進行檔案轉換呢?可能部分人就會問到這樣一個問題,接下來小編可以將自己所知道的方法告訴大家! 1:在操作的電腦桌
PDF檔案格式轉換攻略:PDF格式轉換圖片格式
關於PDF檔案格式的轉換大家有了解多少嗎?就比如將PDF格式轉換成圖片格式,可能之前大家對於PDF件大家都有了解到,辦公中我們經常遇到過。現在小編在這裡教大家如何將PDF格式轉換成圖片格式,有興趣的夥伴可以學著嘗試一下! 1、操作之前可以將轉換成圖片格式的PDF檔案另存到電腦桌面上,這樣便於在後面的操作。
Word檔案格式轉換:Word如何轉換成PDF格式
Word檔案如何轉換成PDF格式呢? 可能大部分人都知道PDF轉換成word格式,畢竟這也是一種常用的轉換。就word轉換成PDF小編在這裡告訴大家一種方法! 1、首先我們需要藉助輔助工具進行檔案格式轉換,大家可以在百度瀏覽器上搜索迅捷PDF轉換器,安裝在我們所操作的電腦上。 2、滑鼠雙擊執行開啟PDF轉換
WPS檔案格式轉換技巧 如何將WPS轉換成Excel
WPS檔案格式如何轉換?如何將WPS轉換成Excel?對於一些不熟悉WPS檔案的人來說,那麼在處理WPS檔案來說,習慣將WPS轉換成Excel的格式,小編在這裡考慮到部分人還不知道如何操作,下面就是它的操作方法,有需要的可以學著操作! 1、開啟自己的電腦,先需要在電腦上安裝一款可以轉換WPS檔案格式的工具,
2018中國高校計算機大賽——大資料挑戰賽 --資料轉換為csv檔案格式
python3 # -*- coding: utf-8 -*- # 載入pandas庫 import pandas as pd # 實現資料集轉換。。。。原始資料集header都沒有。。。
在伺服器端,轉換amr格式音訊檔案為MP3格式
由於當前pc端瀏覽器及移動端瀏覽器都不支援直接播放amr格式檔案,因此考慮在伺服器端,將amr檔案轉換為MP3檔案,使瀏覽器可直接播放。 在伺服器使用ffmpeg工具,供php呼叫,用來轉換amr檔案。 基本流程是:微信瀏覽器中錄音並上傳(上傳到微信平臺伺服器)—
Tensorflow 模型檔案格式轉換
Tensorflow模型的graph結構可以儲存為.pb檔案或者.pbtxt檔案,或者.meta檔案,其中只有.pbtxt檔案是可讀的 網上大牛們訓練好的網路,往往會利用我上篇部落格講的方法,將模型儲存為一個統一的.pb檔案,這個檔案中不止儲存著模型網路的結構和變數名, 還
【深度學習】【caffe實用工具3】筆記25 Windows下caffe中將影象資料集合轉換為DB(LMDB/LEVELDB)檔案格式之convert_imageset
/********************************************************************************************************************************* 檔案說明:
將.ini配置檔案轉換為.xml檔案格式
1 /* 2 * FILE: p670_convert.c 3 * DATE: 20180125 4 * ============== 5 * DESCRIPTION: 將.ini配置檔案轉換為.xml檔案 6 * fgets, fput
支援檔案格式HDR, OpenEXR, 檔案格式轉換
一個在linux 下使用的強大圖形工具 在 Ubuntu 上挺好使。 幾個例子 1. 看當前檔案下的所有hdr檔案 pfsv *.hdr 2. 把所有HDR轉換成OpenEXR for img in *.hdr; do pfsin ${img} | pfso
使用python實現批量轉換檔案編碼格式
最近在學習redis的原始碼,從網上下載了一份大神註釋好的程式碼,但是檔案編碼格式是utf-8的使用sourcesight開啟會出現亂碼,sourceinsight不支援utf-8格式,網上找了一下,說需要安裝外掛解決,今天主要目的不是整sourceinsight,主要最近在
KMZ轉換為KML,KML轉換為shp檔案格式方法
最近專案使用谷歌地球的kmz資料,請教了各位高手收了解了kmz轉換為kml到shp格式的方法; 參考資料 操作步驟 1.如果拿到的是kmz格式檔案,則修改檔案格式字尾為.zip,使用解壓工具解壓後為kml格式檔案; 2.開啟ArcMap軟體,開啟ArcToolbox工具
python 時間格式 及 轉換 檔案時間說明
#coding: utf-8 __author__ = 'KK' import time #獲取當前時間的字串形式 Wed Sep 06 20:14:46 2017 print time.ctime() #獲取當前時間戳 1504700086.44 print time.