Java使用OpenOffice將office文件轉(zhuǎn)換為PDF的示例方法
1. 先行工作
請(qǐng)注意,無(wú)論是windows還是liunx環(huán)境都需要安裝jdk環(huán)境,版本jdk7+
1.1 OpenOffice官網(wǎng)下載
本地開(kāi)發(fā)環(huán)境使用windows,因此下載Windows 32-bit (x86)(EXE),
測(cè)試環(huán)境使用linux,所以下載Linux 64-bit(x86-64)
1.2 JODConverter官網(wǎng)下載
1.3 下載內(nèi)容
2.介紹
OpenOffice: OpenOffice是一套跨平臺(tái)的辦公室軟件套件,功能非常強(qiáng)大,適用windows、linux、mac等各大平臺(tái),簡(jiǎn)單來(lái)說(shuō)Office能做到的OpenOffice也基本都能做到。
JODConverter: 是一個(gè)Java的OpenDocument文件轉(zhuǎn)換器,可以進(jìn)行許多文件格式的轉(zhuǎn)換。它依賴于OpenOffice.org或者LibreOffice提供的服務(wù)來(lái)進(jìn)行轉(zhuǎn)換,它能將Microsoft Office文檔(Word,Excel,PowerPoint)轉(zhuǎn)換為PDF格式。你可以將JODConverter內(nèi)嵌在Java應(yīng)用程序里,也可以單獨(dú)作為命令行由腳本調(diào)用,更可以應(yīng)用為網(wǎng)頁(yè)程序或者Web Service以供網(wǎng)絡(luò)應(yīng)用。
3. 安裝OpenOffice服務(wù)
3.1.Windows環(huán)境
- 首先安裝OpenOffice,可直接默認(rèn)安裝
- 通過(guò)命令行方式啟動(dòng)OpenOffice服務(wù)(這步可不執(zhí)行,僅作為驗(yàn)證是否安裝正確,代碼中會(huì)自動(dòng)啟動(dòng)服務(wù))
//進(jìn)入目錄 cd C:\Program Files (x86)\OpenOffice 4\program //啟動(dòng)OpenOffice服務(wù) soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard //查看是否啟動(dòng)成功 netstat -ano|findstr "8100" //終止進(jìn)程 taskkill /F /PID 2032
3.2 Linux環(huán)境
創(chuàng)建指定目錄并上傳下載的liunx下的安裝包
mkdir openoffice
執(zhí)行解壓縮命令
tar -zxvf Apache_OpenOffice_4.1.15_Linux_x86-64_install-rpm_zh-CN.tar.gz
進(jìn)入zh-CN/RPMS/目錄下安裝rpm文件
yum localinstall *.rpm
輸入y確認(rèn)安裝,安裝完成后會(huì)生成目錄:desktop-integration
進(jìn)入desktop-integration目錄 安裝
yum localinstall openoffice4.1.15-redhat-menus-4.1.15-9813.noarch.rpm
輸入y確認(rèn)安裝,如果報(bào)錯(cuò):
Transaction check error: file /usr/bin/soffice from install of openoffice4.1.15-redhat-menus-4.1.15-9813.noarch conflicts with file from package libreoffice-core-1:5.3.6.1-24.el7.x86_64
執(zhí)行以下命令
sudo yum remove libreoffice-core
然后重新執(zhí)行上一步的安裝命令,成功如下:
后臺(tái)服務(wù)方式啟動(dòng)openoffice服務(wù)
/opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
4. maven依賴
jodconverter-2.2.2中的有些jar文件的依賴并不一定會(huì)在maven倉(cāng)庫(kù)中找到,因此需要手動(dòng)install
打開(kāi)命令行執(zhí)行以下命令,注意-Dfile替換為 jodconverter-2.2.2\jodconverter-2.2.2\lib 的目錄
mvn install:install-file -Dfile="E:\開(kāi)發(fā)工具\(yùn)openoffice-word轉(zhuǎn)pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\unoil-3.0.1.jar" -DgroupId=org.apache.openoffice -DartifactId=unoil -Dversion=3.0.1 -Dpackaging=jar mvn install:install-file -Dfile="E:\開(kāi)發(fā)工具\(yùn)openoffice-word轉(zhuǎn)pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\jodconverter-2.2.2.jar" -DgroupId=org.jodconverter -DartifactId=jodconverter -Dversion=2.2.2 -Dpackaging=jar mvn install:install-file -Dfile="E:\開(kāi)發(fā)工具\(yùn)openoffice-word轉(zhuǎn)pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\jodconverter-cli-2.2.2.jar" -DgroupId=org.jodconverter -DartifactId=jodconverter-cli -Dversion=2.2.2 -Dpackaging=jar mvn install:install-file -Dfile="E:\開(kāi)發(fā)工具\(yùn)openoffice-word轉(zhuǎn)pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\juh-3.0.1.jar" -DgroupId=org.apache.odftoolkit -DartifactId=juh -Dversion=3.0.1-incubating -Dpackaging=jar mvn install:install-file -Dfile="E:\開(kāi)發(fā)工具\(yùn)openoffice-word轉(zhuǎn)pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\jurt-3.0.1.jar" -DgroupId=org.apache.odftoolkit -DartifactId=jurt -Dversion=3.0.1-incubating -Dpackaging=jar mvn install:install-file -Dfile="E:\開(kāi)發(fā)工具\(yùn)openoffice-word轉(zhuǎn)pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\ridl-3.0.1.jar" -DgroupId=org.apache.odftoolkit -DartifactId=ridl -Dversion=3.0.1-incubating -Dpackaging=jar
5. 轉(zhuǎn)換代碼
轉(zhuǎn)換工具類(lèi):FileConversionUtil.java
package com.cxstar.common.utils; import com.artofsolving.jodconverter.DocumentConverter; import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import java.io.File; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * 文件轉(zhuǎn)換工具類(lèi),支持將不同類(lèi)型的文件轉(zhuǎn)換為指定格式(pdf或html)。 */ @Slf4j public class FileConversionUtil { /** * 被轉(zhuǎn)換文件類(lèi)型的枚舉,用于表示支持的文件類(lèi)型。 */ public enum FileType { DOC, DOCX, XLS, XLSX, PPT, PPTX; /** * 獲取小寫(xiě)文件類(lèi)型列表 * * @return 小寫(xiě)文件類(lèi)型列表 */ public static List<String> getLowerCaseFileTypes() { return Arrays.stream(values()) .map(FileType::name) .map(String::toLowerCase) .collect(Collectors.toList()); } } /** * 轉(zhuǎn)換文件類(lèi)型的枚舉,用于表示支持的文件類(lèi)型。 */ public enum ConvertFileType { PDF, HTML; /** * 獲取小寫(xiě)文件類(lèi)型列表 * * @return 小寫(xiě)文件類(lèi)型列表 */ public static List<String> getLowerCaseFileTypes() { return Arrays.stream(values()) .map(ConvertFileType::name) .map(String::toLowerCase) .collect(Collectors.toList()); } } /** * 執(zhí)行文件格式轉(zhuǎn)換。 * * @param originalFilePath 原始文件路徑 * @param convertedFilePath 轉(zhuǎn)換后文件保存路徑 * @return 轉(zhuǎn)換是否成功 */ public static boolean convertToPdf(String originalFilePath, String convertedFilePath) { // 獲取原始文件擴(kuò)展名 String originalExt = FilenameUtils.getExtension(originalFilePath); List<String> lowerCaseFileTypes = FileType.getLowerCaseFileTypes(); // 檢查原始文件類(lèi)型是否支持 if (!lowerCaseFileTypes.contains(originalExt)) { throw new RuntimeException("錯(cuò)誤的轉(zhuǎn)換類(lèi)型:只允許格式為:" + StringUtils.join(lowerCaseFileTypes, ",") + " 進(jìn)行轉(zhuǎn)換"); } // 獲取目標(biāo)文件擴(kuò)展名 String convertExt = FilenameUtils.getExtension(convertedFilePath); List<String> convertFileTypes = ConvertFileType.getLowerCaseFileTypes(); // 檢查目標(biāo)文件類(lèi)型是否支持 if (!convertFileTypes.contains(convertExt)) { throw new RuntimeException("錯(cuò)誤的轉(zhuǎn)換類(lèi)型:只允許轉(zhuǎn)換為:" + StringUtils.join(convertFileTypes, ",")); } try { // 連接 OpenOffice 服務(wù)。需提前開(kāi)啟 OpenOffice 服務(wù),否則會(huì)報(bào)錯(cuò)。 OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); try { connection.connect(); } catch (Exception e) { throw new RuntimeException("連接 OpenOffice 服務(wù)失敗,請(qǐng)檢查是否啟動(dòng) OpenOffice 服務(wù),錯(cuò)誤信息:" + e.getMessage()); } // 轉(zhuǎn)化原始文件轉(zhuǎn)化為 pdf 或 html log.info("開(kāi)始轉(zhuǎn)換......"); long startTime = System.currentTimeMillis(); DocumentConverter converter = new OpenOfficeDocumentConverter(connection); converter.convert(new File(originalFilePath), new File(convertedFilePath)); long endTime = System.currentTimeMillis(); log.info("轉(zhuǎn)換完成,耗時(shí): {} 毫秒", endTime - startTime); connection.disconnect(); } catch (Exception e) { throw new RuntimeException("轉(zhuǎn)換異常:" + e.getMessage()); } return true; } }
測(cè)試類(lèi):
@Test void createIndexAndSetMapping11() { String file ="C:\\Users\\zhouquan\\Desktop\\敘述詞導(dǎo)入模板.xlsx"; String pdfFile = "C:\\Users\\zhouquan\\Desktop\\test.pdf"; FileConversionUtil.conversionPdfOrHtml(file, pdfFile); }
以上就是Java使用OpenOffice將office文件轉(zhuǎn)換為PDF的示例方法的詳細(xì)內(nèi)容,更多關(guān)于Java OpenOffice將office文件轉(zhuǎn)PDF的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring?Boot?教程之創(chuàng)建項(xiàng)目的三種方式
這篇文章主要分享了Spring?Boot?教程之創(chuàng)建項(xiàng)目的三種方式,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05Java的Struts框架中Action的編寫(xiě)與攔截器的使用方法
這篇文章主要介紹了Java的Struts框架中Action的編寫(xiě)與攔截器的使用方法,Struts框架是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下2015-11-11Java利用Poi讀取excel并對(duì)所有類(lèi)型進(jìn)行處理
這篇文章主要為大家詳細(xì)介紹了Java利用Poi讀取excel并對(duì)所有類(lèi)型進(jìn)行處理的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2024-01-01springcloud nacos的賦值均衡和動(dòng)態(tài)刷新
nacos是一個(gè)分布式的配置中心和注冊(cè)發(fā)現(xiàn)中心,這篇文章主要介紹了springcloud nacos的賦值均衡和動(dòng)態(tài)刷新,需要的朋友可以參考下2024-05-05MyBatis-Plus 如何實(shí)現(xiàn)連表查詢的示例代碼
這篇文章主要介紹了MyBatis-Plus 如何實(shí)現(xiàn)連表查詢的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Java中ThreadLocal使用原理及Synchronized區(qū)別
ThreadLocal叫做線程變量,本文詳細(xì)的介紹了ThreadLocal使用原理及Synchronized區(qū)別,有需要的朋友可以參考一下,希望對(duì)你有所幫助。2023-05-05創(chuàng)建網(wǎng)關(guān)項(xiàng)目(Spring Cloud Gateway)過(guò)程詳解
這篇文章主要介紹了創(chuàng)建網(wǎng)關(guān)項(xiàng)目(Spring Cloud Gateway)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09IDEA2020 Plugins不能用的解決辦法及Plugins 搜索不了插件的問(wèn)題
這篇文章主要介紹了IDEA2020 Plugins不能用的解決辦法,文中給大家介紹了Intellij IDEA 2020.1 的Plugins 搜索不了插件,連接超時(shí)的問(wèn)題,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-06-06