麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

Java使用openOffice對于word的轉換及遇到的問題解決

2024-07-14 08:42:19
字體:
來源:轉載
供稿:網友

一:需求詳情:

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

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

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

openoffice既有windows版本也有linux版。不用擔心生產環境是linux系統。

二:過程

1:本地環境編碼(windows)

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

第二步:轉換所需要的工具包;

 <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的中央倉庫找不到關鍵的依賴jar包的問題。

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

然后和大牛商量,加入到公司內網自己的maven倉庫。

第三步:工具類

 /** * @author GH * 輸入文件 * 輸出文件 */ public class WordToPdf {//word轉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 * 參數1:要裝換的pdf位置 * 參數2:轉換后的圖片存放位置 * 參數3:中間要拼接的名字 * return:轉換后的img名字集合 */ public class PdfToImage {//pdf轉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,第二個參數是設置縮放比(即像素) // BufferedImage image = renderer.renderImageWithDPI(i, 296); // 方式2,第二個參數是設置縮放比(即像素) BufferedImage image = renderer.renderImage(i, 2f); //第二個參數越大生成圖片分辨率越高,轉換時間也就越長 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; } }

第四步:編碼

首先從數據庫讀取沒有轉換過的集合,循環下載oss對象存儲文件到指定臨時文件夾。

通過工具類轉換下載的word為pdf,錄入數據pdf記錄,上傳oss對象pdf圖片。

通過工具類轉換得到的pdf圖片,錄入數據路圖片記錄,上傳轉換得到的img圖片。

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

修改word的轉換狀態為已轉換。

問題2:因為到最后測試環境和生產環境都是Linux系統的,因為涉及到文件的操作,但是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轉換的時候的暫時存放路徑 window public final static String Convert_Tmp_Url2=File.separator+"tmp"+File.separator+"contractToImg"+File.separator;//進行word——img轉換的時候的暫時存放路徑 linux

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

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

2:測試環境測試(windows)

問題3:在Linux環境下word轉換word中文出現亂碼 空白,導致的原因是Linux缺少中文字體編碼。

解決方法:

步驟1:創建路徑。

在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:查看系統字體文件路徑。

查看方案:

[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的全部內容,拷貝到步驟3查看的路徑下, 我的字體路徑為:/usr/share/fonts。

步驟5:更新緩存

執行命令: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

執行kill:kill -9 3045

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

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

3:測試環境和生產環境內核不一樣,安裝的安裝包不一樣。

測試環境的安裝的是deb文件,使用 dpkg命令安裝所有的deb文件,啟動服務就能使用。

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

執行 rpm -ivh openoffice4.1.5-redhat-menus-4.1.5-9789.noarch.rpm

總結

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


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久久久久99 | 日韩视频一区二区在线观看 | 免费观看一级黄色片 | 亚洲精品aⅴ中文字幕乱码 欧美囗交 | 亚洲欧美不卡视频 | 色视频欧美 | 午夜精品福利视频 | 久精品久久| 免费的毛片 | 成人国产精品久久 | 久久久三级免费电影 | 经典三级在线视频 | 欧洲精品久久久久69精品 | 色中色在线视频 | 国产免费午夜 | 国产精品久久久久久久久久10秀 | 黄色大片网 | 成人影片在线免费观看 | h色在线观看 | 91成人午夜性a一级毛片 | 日韩毛片在线看 | 成年人观看免费视频 | 亚洲天堂中文字幕在线观看 | 激情视频免费看 | 午夜视频在线免费 | 国产精品视频中文字幕 | 久久免费视频精品 | 久久99网 | 中文字幕视频在线播放 | 72pao成人国产永久免费视频 | 一级大片一级一大片 | 国产99视频在线观看 | 性爱视频在线免费 | 久草在线观看资源 | 成人福利免费在线观看 | 欧美电影在线观看 | 国产精品剧情一区二区三区 | 成人毛片免费播放 | 成人在线精品视频 | 亚洲视频在线视频 | 国产一区二区欧美 |