1. 程式人生 > >基於libreOffice的doc,docx,ppt,pptx,txt,xlsx,xls轉pdf java實現

基於libreOffice的doc,docx,ppt,pptx,txt,xlsx,xls轉pdf java實現

1、安裝libreOffice

2、程式碼實現

package com.szoa.util.pdf;

import java.io.File;
import java.util.regex.Pattern;

import org.jodconverter.OfficeDocumentConverter;
import org.jodconverter.office.DefaultOfficeManagerBuilder;
import org.jodconverter.office.OfficeException;
import org.jodconverter.office.OfficeManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PDFConvert {
    private static String officeHomeDir = null;

    private final static Logger logger = LoggerFactory.getLogger(PDFConvert.class);

    /**
     * 
     *@name    文件轉換為pdf工具類
     *@description 相關說明 支援:xls,xlsx,ppt,pptx,txt,其中doc,docx轉換與原檔案有較大差異,libreOffice 預設安裝路徑
     *Linux:/opt/libreoffice6.0
     *Windows:C:/Program Files (x86)/LibreOffice
     *Mac:/Application/openOfficeSoft
     *@time    建立時間:2018年9月17日下午1:49:18
     *@param sourceFile 需要轉換的原檔案
     *@param tarPdfFile 轉換後的目標pdf檔案
     *@return
     *@throws OfficeException
     *@author   
[email protected]
*@history 修訂歷史(歷次修訂內容、修訂人、修訂時間等) */ public static String doDocToFdpLibre(String sourceFile, String tarPdfFile) throws OfficeException { File inputFile = new File(sourceFile); String libreOfficePath = getOfficeHome(); DefaultOfficeManagerBuilder builder = new DefaultOfficeManagerBuilder(); builder.setOfficeHome(new File(libreOfficePath)); // 埠號 builder.setPortNumber(8100); builder.setTaskExecutionTimeout(1000 * 60 * 5L); // 設定任務執行超時為5分鐘 builder.setTaskQueueTimeout(1000 * 60 * 60 * 24L); // 設定任務佇列超時為24小時 OfficeManager officeManager = builder.build(); startService(officeManager); OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager); File outputFile = new File(tarPdfFile); converter.convert(inputFile, outputFile); stopService(officeManager); String pdfPath = outputFile.getPath(); return pdfPath; } private static String getOfficeHome() { if (null != officeHomeDir) { return officeHomeDir; } else { String osName = System.getProperty("os.name"); if (Pattern.matches("Windows.*", osName)) { officeHomeDir = "C:/Program Files (x86)/LibreOffice"; return officeHomeDir; } else if (Pattern.matches("Linux.*", osName)) { officeHomeDir = "/opt/libreoffice6.0"; return officeHomeDir; } else if (Pattern.matches("Mac.*", osName)) { officeHomeDir = "/Application/openOfficeSoft"; return officeHomeDir; } return null; } } private static void stopService(OfficeManager officeManager) throws OfficeException { if (null != officeManager) { officeManager.stop(); } logger.info("關閉office轉換成功!"); } private static void startService(OfficeManager officeManager) { try { // 準備啟動服務 officeManager.start(); // 啟動服務 logger.info("office轉換服務啟動成功"); } catch (Exception ce) { logger.error("office轉換服務啟動失敗!詳細資訊:{}", ce); } } /** * *@name 設定libreOffice安裝目錄 *@description 相關說明:如果libreOffice安裝目錄為預設目錄,則不需要設定,否則需要設定 *@time 建立時間:2018年9月17日下午1:52:36 *@param officeHome *@author 作者 *@history 修訂歷史(歷次修訂內容、修訂人、修訂時間等) */ public static void setOfficeHome(String officeHome) { officeHomeDir = officeHome; } }

3、pom.xml 依賴

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
	<groupId>com.szoa</groupId>
  <artifactId>szoa-pdf-util</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>

  <name>soze-pdf-util</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  


  <dependencies>
	<dependency> 
		  <groupId>org.slf4j</groupId>
		  <artifactId>slf4j-log4j12</artifactId>
		  <version>1.8.0-alpha2</version>
		</dependency>
	<dependency>
	  <groupId>org.jodconverter</groupId>
	  <artifactId>jodconverter-core</artifactId>
	  <version>4.0.0-RELEASE</version>
	</dependency>
  </dependencies>
   <build>
  	<finalName>szoa-pdf-util-${project.version}</finalName>
  	  <plugins>
    		<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			
			<plugin>  
			    <groupId>org.apache.maven.plugins</groupId>  
			    <artifactId>maven-assembly-plugin</artifactId>  
			    <version>2.5.5</version>  
			    <configuration>  
			        <archive>  
			            <manifest>  
			                <mainClass>com.szoa.util.pdfmain.PdfDomain</mainClass>  
			            </manifest>  
			        </archive>  
			        <descriptorRefs>  
			            <descriptorRef>jar-with-dependencies</descriptorRef>  
			        </descriptorRefs>  
			    </configuration>  
			    <executions>  
			        <execution>  
			            <id>make-assembly</id>  
			            <phase>package</phase>  
			            <goals>  
			                <goal>single</goal>  
			            </goals>  
			        </execution>  
			    </executions>  
		</plugin>	
	</plugins>
  </build>
    
</project>

4、安裝libreOffice

  1. 下載 版本6.0.6windows版本

安裝流程:

  1. 下載linux版本

rpm安裝方式安裝

tar -zxvf LibreOffice_6.0.6_Linux_x86-64_rpm.tar.gz

cd  LibreOffice_6.0.6

cd  LibreOffice_6.0.6.2_Linux_x86-64_rpm/

  cd RPMS/

rpm -ivh *.rpm

[[email protected] RPMS]#  rpm -ivh *.rpm

Preparing...                ########################################### [100%]

   1:libreoffice6.0-ure     ########################################### [  2%]

   2:libobasis6.0-core      ########################################### [  5%]

   3:libobasis6.0-base      ########################################### [  7%]

   4:libobasis6.0-impress   ########################################### [ 10%]

   5:libobasis6.0-writer    ########################################### [ 12%]

   6:libobasis6.0-calc      ########################################### [ 15%]

   7:libobasis6.0-draw      ########################################### [ 17%]

   8:libobasis6.0-en-US     ########################################### [ 20%]

   9:libobasis6.0-images    ########################################### [ 22%]

  10:libreoffice6.0         ########################################### [ 24%]

  11:libobasis6.0-math      ########################################### [ 27%]

  12:libobasis6.0-pyuno     ########################################### [ 29%]

  13:libobasis6.0-librelogo ########################################### [ 32%]

  14:libreoffice6.0-math    ########################################### [ 34%]

  15:libreoffice6.0-base    ########################################### [ 37%]

  16:libreoffice6.0-calc    ########################################### [ 39%]

  17:libreoffice6.0-dict-en ########################################### [ 41%]

  18:libreoffice6.0-dict-es ########################################### [ 44%]

  19:libreoffice6.0-dict-fr ########################################### [ 46%]

  20:libreoffice6.0-draw    ########################################### [ 49%]

  21:libreoffice6.0-en-US   ########################################### [ 51%]

  22:libreoffice6.0-impress ########################################### [ 54%]

  23:libreoffice6.0-writer  ########################################### [ 56%]

  24:libobasis6.0-ogltrans  ########################################### [ 59%]

  25:libobasis6.0-postgresql########################################### [ 61%]

  26:libobasis6.0-extension-########################################### [ 63%]

  27:libobasis6.0-extension-########################################### [ 66%]

  28:libobasis6.0-extension-########################################### [ 68%]

  29:libobasis6.0-extension-########################################### [ 71%]

  30:libobasis6.0-extension-########################################### [ 73%]

  31:libobasis6.0-extension-########################################### [ 76%]

  32:libobasis6.0-firebird  ########################################### [ 78%]

  33:libobasis6.0-gnome-inte########################################### [ 80%]

  34:libobasis6.0-graphicfil########################################### [ 83%]

  35:libobasis6.0-kde-integr########################################### [ 85%]

  36:libobasis6.0-onlineupda########################################### [ 88%]

  37:libobasis6.0-ooofonts  ########################################### [ 90%]

  38:libobasis6.0-ooolinguis########################################### [ 93%]

  39:libobasis6.0-python-scr########################################### [ 95%]

  40:libobasis6.0-xsltfilter########################################### [ 98%]

  41:libreoffice6.0-freedesk########################################### [100%]

/usr/bin/update-desktop-database

/usr/bin/update-mime-database

mkdir: 無法建立目錄"/usr/share/icons/hicolor/icon-theme.cache": 不是目錄

mkdir: 無法建立目錄"/usr/share/icons/hicolor/index.theme": 不是目錄

/usr/bin/gtk-update-icon-cache

/usr/bin/gtk-update-icon-cache

/usr/bin/update-desktop-database

/usr/bin/update-desktop-database

預設安裝目錄:/opt/libreoffice6.0