欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用openOffice對于word的轉(zhuǎn)換及遇到的問題解決

 更新時間:2018年09月10日 16:52:33   作者:曾將  
開發(fā)過程中經(jīng)常會使用java將office系列文檔轉(zhuǎn)換為PDF, 一般都使用微軟提供的openoffice+jodconverter 實現(xiàn)轉(zhuǎn)換文檔,下面這篇文章主要給大家介紹了關(guān)于Java通過openOffice對于word的轉(zhuǎn)換及遇到問題的解決方法,需要的朋友可以參考下

一:需求詳情:

OpenOffice.org 是一套跨平臺的辦公室軟件套件,能在 Windows、Linux、MacOS X (X11)、和 Solaris 等操作系統(tǒng)上執(zhí)行。它與各個主要的辦公室軟件套件兼容。OpenOffice.org 是自由軟件,任何人都可以免費下載、使用、及推廣它。

公司需要存儲合同文件,用戶上傳word文檔的合同,通過openOffice去把word轉(zhuǎn)換為pdf、再把pdf轉(zhuǎn)換為圖片格式,并分別存儲。因為openOffice的轉(zhuǎn)換需要耗費挺大的內(nèi)存,所以設(shè)計為task任務(wù),凌晨自動轉(zhuǎn)換。

記錄本次需求完成的時候遇到的問題。

openoffice既有windows版本也有l(wèi)inux版。不用擔心生產(chǎn)環(huán)境是linux系統(tǒng)。

關(guān)于linux系統(tǒng)安裝openoffice軟件請參照:點擊這里

二:過程

1:本地環(huán)境編碼(windows)

第一步:因為是本地環(huán)境的編碼而且是Windows環(huán)境,所以從安裝openOffice開始,到啟動服務(wù)并沒有遇到難題。

第二步:轉(zhuǎn)換所需要的工具包;

 <dependency>
 <groupId>commons-cli</groupId>
 <artifactId>commons-cli</artifactId>
 <version>1.2</version>
 </dependency>
 
 <dependency>
 <groupId>commons-io</groupId>
 <artifactId>commons-io</artifactId>
 <version>1.4</version>
 </dependency>
 
 <dependency>
 <groupId>org.openoffice</groupId>
 <artifactId>juh</artifactId>
 <version>3.0.1</version>
 </dependency>
 
 <dependency>
 <groupId>org.openoffice</groupId>
 <artifactId>jurt</artifactId>
 <version>3.0.1</version>
 </dependency>
 
 <dependency>
 <groupId>org.openoffice</groupId>
 <artifactId>ridl</artifactId>
 <version>3.0.1</version>
 </dependency>
 
 <dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-api</artifactId>
 </dependency>
 
 <dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-jdk14</artifactId>
 <scope>test</scope>
 </dependency>
 
 <dependency>
 <groupId>org.openoffice</groupId>
 <artifactId>unoil</artifactId>
 <version>3.0.1</version>
 </dependency>
 
 <dependency>
 <groupId>com.thoughtworks.xstream</groupId>
 <artifactId>xstream</artifactId>
 <version>1.3.1</version>
 </dependency>
 
 <dependency>
 <groupId>org.apache.pdfbox</groupId>
 <artifactId>fontbox</artifactId>
 <version>2.0.8</version>
 </dependency>
 
 <dependency>
 <groupId>org.apache.pdfbox</groupId>
 <artifactId>pdfbox</artifactId>
 <version>2.0.8</version>
 </dependency>

問題1:在這里遇到了第一個問題,就是在maven的中央倉庫找不到關(guān)鍵的依賴jar包的問題。

jodconverter-cli   這個jar包中央倉庫找不到j(luò)ar包依賴,jodconverter 版本才到2.2.1(這個版本之前的不能支持docx格式轉(zhuǎn)換,2.2.2及以后才開始支持。)

然后和大牛商量,加入到公司內(nèi)網(wǎng)自己的maven倉庫。

第三步:工具類

 /**
 * @author GH
 * 輸入文件
 * 輸出文件
 */
 public class WordToPdf {//word轉(zhuǎn)pdf
 public static void docToPdf(File inputFile, File outputFile){
 OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
 try{
 connection.connect();
 DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
 converter.convert(inputFile, outputFile);
 }catch(ConnectException cex){
 cex.printStackTrace();
 }finally{
 if(connection!=null){
 connection.disconnect();
 connection = null;
 }
 }
 }
 }
 /**
 * @author GH
 * 參數(shù)1:要裝換的pdf位置
 * 參數(shù)2:轉(zhuǎn)換后的圖片存放位置
 * 參數(shù)3:中間要拼接的名字
 * return:轉(zhuǎn)換后的img名字集合
 */
 public class PdfToImage {//pdf轉(zhuǎn)img
 public static List<String> pdfToImagePath(String srcFile,String contractFromSrc,String name){
 List<String> list = new ArrayList<>();
 String imagePath;
 File file = new File(srcFile);
 try {
 File f = new File(contractFromSrc);
 if(!f.exists()){
 f.mkdir();
 }
 PDDocument doc = PDDocument.load(file);
 PDFRenderer renderer = new PDFRenderer(doc);
 int pageCount = doc.getNumberOfPages();
 for(int i=0; i<pageCount; i++){
 // 方式1,第二個參數(shù)是設(shè)置縮放比(即像素)
 // BufferedImage image = renderer.renderImageWithDPI(i, 296);
 // 方式2,第二個參數(shù)是設(shè)置縮放比(即像素)
 BufferedImage image = renderer.renderImage(i, 2f); //第二個參數(shù)越大生成圖片分辨率越高,轉(zhuǎn)換時間也就越長
 imagePath = contractFromSrc+name+"-"+i +".jpg";
 ImageIO.write(image, "PNG", new File(imagePath));
 list.add(name+"-"+i +".jpg");
 }
 doc.close();
 } catch (IOException e) {
 e.printStackTrace();
 }
 return list;
 }
 }

第四步:編碼

首先從數(shù)據(jù)庫讀取沒有轉(zhuǎn)換過的集合,循環(huán)下載oss對象存儲文件到指定臨時文件夾。

通過工具類轉(zhuǎn)換下載的word為pdf,錄入數(shù)據(jù)pdf記錄,上傳oss對象pdf圖片。

通過工具類轉(zhuǎn)換得到的pdf圖片,錄入數(shù)據(jù)路圖片記錄,上傳轉(zhuǎn)換得到的img圖片。

try catch捕捉異常,有異常就回滾數(shù)據(jù)庫,刪除oss對象上傳的文件。

修改word的轉(zhuǎn)換狀態(tài)為已轉(zhuǎn)換。

問題2:因為到最后測試環(huán)境和生產(chǎn)環(huán)境都是Linux系統(tǒng)的,因為涉及到文件的操作,但是Linux和Windows的文件路徑是不一樣的,例如:Windows文件路徑為(C:\tmp\test.txt)Linux則為(/tmp/test.txt)

因此 采用這種方式

   public final static String Convert_Tmp_Url="C:"+File.separator+"temp"+File.separator+"contractToImg"+File.separator;//進行word——img轉(zhuǎn)換的時候的暫時存放路徑 window
 public final static String Convert_Tmp_Url2=File.separator+"tmp"+File.separator+"contractToImg"+File.separator;//進行word——img轉(zhuǎn)換的時候的暫時存放路徑 linux

File.separator 與系統(tǒng)有關(guān)的默認名稱分隔符,為了方便,它被表示為一個字符串 在Linux此字段的值為 '/' Windows為'\'

第五步:本地測試,沒有問題。

2:測試環(huán)境測試(windows)

問題3:在Linux環(huán)境下word轉(zhuǎn)換word中文出現(xiàn)亂碼 空白,導致的原因是Linux缺少中文字體編碼。

解決方法:

步驟1:創(chuàng)建路徑。

在centos的/usr/java/jdk1.8.0_91/jre/lib/fonts下新建路徑:fallback。

步驟2:上傳字體。

將字體:simhei.ttf 黑體、simsun.ttc 宋體(windows下通過everything找下)上傳至/usr/java/jdk1.8.0_91/jre/lib/fonts/fallback路徑下。

步驟3:查看系統(tǒng)字體文件路徑。

查看方案:

[root@80ec6 fallback]# cat /etc/fonts/fonts.conf
<!-- Font directory list -->
<dir>/usr/share/fonts</dir>
<dir>/usr/share/X11/fonts/Type1</dir> <dir>/usr/share/X11/fonts/TTF</dir> <dir>/usr/local/share/fonts</dir>
<dir>~/.fonts</dir>

步驟4:字體拷貝。

將 /usr/java/jdk1.8.0_91/jre/lib/fonts的全部內(nèi)容,拷貝到步驟3查看的路徑下, 我的字體路徑為:/usr/share/fonts。

步驟5:更新緩存

執(zhí)行命令:fc-cache

步驟6:kill掉openoffice進程。

  [root@80ec6 fonts]# ps -ef | grep openoffice

  root 3045 3031 0 06:19 pts/1 00:00:03 /opt/openoffice4/program/soffice.bin -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard

執(zhí)行kill:kill -9 3045

步驟7:重啟后臺運行openoffice。

 [root@a3cf78780ec6 openoffice4]# soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

3:測試環(huán)境和生產(chǎn)環(huán)境內(nèi)核不一樣,安裝的安裝包不一樣。

測試環(huán)境的安裝的是deb文件,使用 dpkg命令安裝所有的deb文件,啟動服務(wù)就能使用。

生產(chǎn)環(huán)境的是dpkg命令找不到。改換安裝prm文件,執(zhí)行安裝之后,竟然啟動不了,查找原因之后盡然是沒有安裝完,RPMS目錄下有desktop-integration文件夾,進入到desktop-integration目錄,里面有四個rpm  文件,選擇相應(yīng)的安裝即可,這里我選擇的是redhat版本。

執(zhí)行 rpm -ivh openoffice4.1.5-redhat-menus-4.1.5-9789.noarch.rpm

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 詳解JAVA中static的作用

    詳解JAVA中static的作用

    這篇文章主要介紹了JAVA中static的作用,文中講解非常細致,代碼幫助大家更好的理解,感興趣的朋友可以了解下
    2020-06-06
  • java后臺發(fā)起get請求獲取響應(yīng)數(shù)據(jù)

    java后臺發(fā)起get請求獲取響應(yīng)數(shù)據(jù)

    這篇文章主要為大家詳細介紹了java后臺發(fā)起get請求獲取響應(yīng)數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • springboot配置http跳轉(zhuǎn)https的過程

    springboot配置http跳轉(zhuǎn)https的過程

    SSL是為網(wǎng)絡(luò)通信提供安全以及保證數(shù)據(jù)完整性的的一種安全協(xié)議,SSL在網(wǎng)絡(luò)傳輸層對網(wǎng)絡(luò)連接進行加密,這篇文章主要介紹了springboot配置http跳轉(zhuǎn)https的過程,需要的朋友可以參考下
    2023-04-04
  • Spring實戰(zhàn)之使用p:命名空間簡化配置操作示例

    Spring實戰(zhàn)之使用p:命名空間簡化配置操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之使用p:命名空間簡化配置操作,結(jié)合實例形式分析了spring p:命名空間簡單配置與使用操作技巧,需要的朋友可以參考下
    2019-12-12
  • Java應(yīng)用開源框架實現(xiàn)簡易web搜索引擎

    Java應(yīng)用開源框架實現(xiàn)簡易web搜索引擎

    本篇文章主要介紹了Java應(yīng)用開源框架實現(xiàn)簡易web搜索引擎,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • SpringBoot獲取Request對象的常見方法

    SpringBoot獲取Request對象的常見方法

    HttpServletRequest 簡稱 Request,它是一個 Servlet API 提供的對象,用于獲取客戶端發(fā)起的 HTTP 請求信息,那么在SpringBoot中,獲取 Request對象的方法有哪些呢,本文小編將給大家講講SpringBoot獲取Request對象的常見方法
    2023-08-08
  • 簡單了解Java斷言利器AssertJ原理及用法

    簡單了解Java斷言利器AssertJ原理及用法

    這篇文章主要介紹了簡單了解Java斷言利器AssertJ原理及用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 詳談java線程與線程、進程與進程間通信

    詳談java線程與線程、進程與進程間通信

    下面小編就為大家?guī)硪黄斦刯ava線程與線程、進程與進程間通信。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 使用BigDecimal去掉小數(shù)點后無用的0

    使用BigDecimal去掉小數(shù)點后無用的0

    這篇文章主要介紹了使用BigDecimal去掉小數(shù)點后無用的0操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java處理圖片實現(xiàn)base64編碼轉(zhuǎn)換

    Java處理圖片實現(xiàn)base64編碼轉(zhuǎn)換

    這篇文章主要介紹了Java處理圖片實現(xiàn)base64編碼轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02

最新評論