office文件轉PDF
所需依賴 : jodconverter-2.2.2.jar
注:轉換文件需要部署openoffice環境,可參考博主藍色格子的文章
/**
* office文件轉PDF
* @param file
* @return
*/
public static File Office2Pdf(File file,String pdfSavePath, String openOfficeIp){
String rule = "txt|doc|docx|xlsx|xls|pdf|ppt|pptx";
String fileType = file.getName().substring(file.getName().indexOf(".") + 1);
if (!fileType.toLowerCase().matches(rule)){
logger.info("不支持的文件格式{}",fileType);
return file;
}
//判斷源文件是否存在
if (!file.exists()){
throw new RuntimeException("源文件不存在!");
}
//輸出文件
File pdfFile = new File( pdfSavePath + File.separator + file.getName().substring(0,file.getName().lastIndexOf("."))+".pdf");
// 轉換後的pdf文件保存位置
logger.info("轉換後的pdf文件保存位置:{}",pdfFile.getAbsolutePath());
OpenOfficeConnection connection = null;
try {
logger.debug("PDF開始轉換");
// PDF格式特殊處理
if ("pdf".equals(fileType)){
FileUtils.copyFile(file,pdfFile);
}else{
//創建連接
connection = new SocketOpenOfficeConnection(openOfficeIp,8100);
//遠程連接OpenOffice服務
connection.connect();
//創建文件轉換器
DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);
//開始轉換
converter.convert(file, pdfFile);
}
Thread.sleep(1000);
if (pdfFile.exists()){
logger.info("文件{}轉換成功",file.getAbsolutePath());
}else {
logger.info("文件{}轉換失敗",file.getAbsolutePath());
}
if (connection != null && connection.isConnected()){
connection.disconnect();
}
} catch (Exception e) {
if (connection != null && connection.isConnected()){
connection.disconnect();
}
e.printStackTrace();
logger.error("office轉PDF異常:{}",e.getMessage());
return file;
}
return pdfFile;
}
Main 測試
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.StreamOpenOfficeDocumentConverter;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
/**
* @Describe: office文件轉PDF工具
* @Author: zml
* @Date: 2020-5-18 17:58:51
*/
public class OfficeToPDFUtils {
private static Logger logger = LoggerFactory.getLogger(OfficeToPDFUtils.class);
public static void main(String[] args) {
File file = new File("D:\\liang\\office轉PDF\\測試文件.docx");
String pdfSavePath = "D:\\liang\\office轉PDF";
String openOfficeIp = "111.229.31.20";
Office2Pdf(file,pdfSavePath,openOfficeIp);
}
}
對比示例