1. 程式人生 > >openOffice 轉換檔案格式

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.