OpenOffice 將word文件轉為pdf再轉為圖片
package com.ist.util;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import java.net.ConnectException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import org.apache.commons.io.FilenameUtils;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;
import com.artofsolving.jodconverter.DefaultDocumentFormatRegistry;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.DocumentFormat;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
/**
* 將檔案轉換為圖片工具類
* @author songqiang
* @createtime 2015-11-11
*/
public class FileToImgUtil {
private static OpenOfficeConnection startOpenOffice(){
//openOfficePath="C:\\Program Files (x86)\\OpenOffice 4\\program\\soffice.exe"
//opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
//ip=127.0.0.1
//port=8100
//OpenOffice的安裝目錄,linux環境下需要手動啟動openoffice服務
String OpenOffice_HOME = PropertiesUtil.getOpenOfficeParam("openOfficePath");
String OpenOffice_IP = PropertiesUtil.getOpenOfficeParam("ip");
int OpenOffice_Port = Integer.parseInt(PropertiesUtil.getOpenOfficeParam("port"));
// 啟動OpenOffice的服務
String command = OpenOffice_HOME+ " -headless -accept=\"socket,host="+OpenOffice_IP+",port="+OpenOffice_Port+";urp;\"";
try {
Process pro = Runtime.getRuntime().exec(command);
} catch (IOException e) {
e.printStackTrace();
}
//建立連線
OpenOfficeConnection connection = new SocketOpenOfficeConnection(OpenOffice_IP, OpenOffice_Port);
return connection;
}
private static void doc2Pdf(String docPath, String pdfPath) throws ConnectException {
File inputFile = new File(docPath);
File outputFile = new File(pdfPath);
OpenOfficeConnection connection = startOpenOffice();
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
//converter.convert(inputFile, outputFile);
DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();
DocumentFormat txt = formatReg.getFormatByFileExtension("odt") ;
DocumentFormat pdf = formatReg.getFormatByFileExtension("pdf") ;
converter.convert(inputFile, txt, outputFile, pdf);
connection.disconnect();
}
/**
* 把ppt word excel等檔案生成圖片檔案
* @param docPath 檔案路徑
* @param imgDirPath 圖片儲存資料夾
* @param fileName 檔名稱點的前部分
*/
public static void doc2Imags(String docPath, String imgDirPath,String fileName){
String pdfPath =String.format("%s%s.pdf", FilenameUtils.getFullPath(docPath), FilenameUtils.getBaseName(docPath));
try {
doc2Pdf(docPath, pdfPath);
pdf2Imgs(pdfPath, imgDirPath,fileName);
File pdf = new File(pdfPath);
if(pdf.isFile()){
pdf.delete();
}
} catch (ConnectException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 將pdf轉換成圖片
*
* @param pdfPath
* @param imagePath
* @return 返回轉換後圖片的名字
* @throws Exception
*/
private static List<String> pdf2Imgs(String pdfPath, String imgDirPath,String fileName) throws Exception {
Document document = new Document();
document.setFile(pdfPath);
float scale = 2f;//放大倍數
float rotation = 0f;//旋轉角度
List<String> imgNames = new ArrayList<String>();
int pageNum = document.getNumberOfPages();
File imgDir = new File(imgDirPath);
if (!imgDir.exists()) {
imgDir.mkdirs();
}
for (int i = 0; i < pageNum; i++) {
BufferedImage image = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN,
Page.BOUNDARY_CROPBOX, rotation, scale);
RenderedImage rendImage = image;
try {
String filePath = imgDirPath + File.separator +fileName+i + ".jpg";
File file = new File(filePath);
ImageIO.write(rendImage, "jpg", file);
imgNames.add(FilenameUtils.getName(filePath));
} catch (IOException e) {
e.printStackTrace();
return null;
}
image.flush();
}
document.dispose();
return imgNames;
}
public static void main(String[] args) {
//String docPath = "d:/94_storage安裝.doc";
String docPath = "d:/公司通訊錄.xlsx";
String pdfPath = "d:/pdf/";
doc2Imags(docPath, pdfPath,"公司通訊錄");
}
}
maven的jar包引用
<!-- openoffice生成pdf -->
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.1</version>
</dependency>
<!-- 手動注入包FileToImgUtil轉化包 -->
<dependency>
<groupId>org.icepdf</groupId>
<artifactId>icepdf-core</artifactId>
<version>1.0</version>
</dependency>
linux環境可能出現的bug
1. Office圖片亂碼
因為沒有執行步驟4
2.Fatal exception: Signal6
Word文件中使用的字型樣式linux系統中沒有。可以把所有的字型樣式都改成宋體,或是把你需要的字型,安裝步驟4 移到linux openoffice中。/opt/openoffice4/share/fonts/truetype/simhei.ttf下