Java使用OpenOffice在线预览Office及PDF

Java使用OpenOffice在线预览Office及PDF

Scroll Down

1、下载安装包

可以去官网下载---------- 官网

下载安装包(建议开启翻墙下载速度会快点),在下载安装包的时候注意安装包的版本,注意区分centos和ubuntu的版本的不同。我这里是ubuntu虚拟机,所以下载的是ubuntu版本。

在这里插入图片描述

在这里插入图片描述

2、安装

【1】解压

下载结束后上传到虚拟机中解压缩。

tar -zxvf Apache_OpenOffice_4.1.6_Linux_x86-64_install-deb_zh-CN.tar.gz

【2】解压结果

解压后会有一个zh-CN文件夹,此文件夹下面有三个文件夹如下:

DEBS  licenses  readmes

【3】安装

在安装之前要确保本地有java环境否则无法启动,进入到 DEBS中,执行 下面命令安装安装该目录下所有的 deb 文件

sudo dpkg -i *deb

【4】Ubuntu安装deb包

在Ubuntu下安装deb包需要使用dpkg命令.Dpkg 的普通用法:
1、sudo dpkg -i <package.deb>
安装一个 Debian 软件包,如你手动下载的文件。
2、sudo dpkg -c <package.deb>
列出 <package.deb> 的内容。
3、sudo dpkg -I <package.deb>
从 <package.deb> 中提取包裹信息。
4、sudo dpkg -r <package>
移除一个已安装的包裹。
5、sudo dpkg -P <package>
完全清除一个已安装的包裹。和 remove 不同的是,remove 只是删掉数据和可执行文件,purge 另外还删除所有的配制文件。
6、sudo dpkg -L <package>
列出 <package> 安装的所有文件清单。同时请看 dpkg -c 来检查一个 .deb 文件的内容。
7、sudo dpkg -s <package>
显示已安装包裹的信息。同时请看 apt-cache 显示 Debian 存档中的包裹信息,以及 dpkg -I 来显示从一个 .deb 文件中提取的包裹信息。
8、sudo dpkg-reconfigure <package>
重新配制一个已经安装的包裹,如果它使用的是 debconf (debconf 为包裹安装提供了一个统一的配制界面)。

3、使用

【1】进入默认安装目录 /opt/openoffice4/program
【2】执行 ./soffice "-accept=socket,host=localhost,port=8100;urp;" -headless -nofirststartwizard &
【3】在命令的最后输入 & 可确保服务在后端运行
【4】貌似只能使用本机的openoffice,我本地连接虚拟机中的openoffice一直连接不上。。。

【1】Java代码

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ConnectException;
import java.text.SimpleDateFormat;
import java.util.Date;
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.OpenOfficeDocumentConverter;
/**
 * 利用jodconverter(基于OpenOffice服务)将文件(*.doc、*.docx、*.xls、*.ppt)转化为html格式或者pdf格式,
 * 使用前请检查OpenOffice服务是否已经开启, OpenOffice进程名称:soffice.exe | soffice.bin
 * 
 * @author yjclsx
 */
public class Doc2HtmlUtil{

	private static Doc2HtmlUtil doc2HtmlUtil;

	/**
	 * 获取Doc2HtmlUtil实例
	 */
	public static synchronized Doc2HtmlUtil getDoc2HtmlUtilInstance() {
		if (doc2HtmlUtil == null) {
			doc2HtmlUtil = new Doc2HtmlUtil();
		}
		return doc2HtmlUtil;
	}

	/**
	 * 转换文件成html
	 * 
	 * @param fromFileInputStream:
	 * @throws IOException 
	 */
	public String file2Html(InputStream fromFileInputStream, String toFilePath,String type) throws IOException {
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		String timesuffix = sdf.format(date);
		String docFileName = null;
		String htmFileName = null;
		if("doc".equals(type)){
			docFileName = "doc_" + timesuffix + ".doc";
			htmFileName = "doc_" + timesuffix + ".html";
		}else if("docx".equals(type)){
			docFileName = "docx_" + timesuffix + ".docx";
			htmFileName = "docx_" + timesuffix + ".html";
		}else if("xls".equals(type)){
			docFileName = "xls_" + timesuffix + ".xls";
			htmFileName = "xls_" + timesuffix + ".html";
		}else if("ppt".equals(type)){
			docFileName = "ppt_" + timesuffix + ".ppt";
			htmFileName = "ppt_" + timesuffix + ".html";
		}else{
			return null;
		}

		File htmlOutputFile = new File(toFilePath + File.separatorChar + htmFileName);
		File docInputFile = new File(toFilePath + File.separatorChar + docFileName);
		if (htmlOutputFile.exists())
			htmlOutputFile.delete();
		htmlOutputFile.createNewFile();
		if (docInputFile.exists())
			docInputFile.delete();
		docInputFile.createNewFile();
		/**
		 * 由fromFileInputStream构建输入文件
		 */
		try {
			OutputStream os = new FileOutputStream(docInputFile);
			int bytesRead = 0;
			byte[] buffer = new byte[1024 * 8];
			while ((bytesRead = fromFileInputStream.read(buffer)) != -1) {
				os.write(buffer, 0, bytesRead);
			}

			os.close();
			fromFileInputStream.close();
		} catch (IOException e) {
		}
		OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
		try {
			connection.connect();
		} catch (ConnectException e) {
			System.err.println("文件转换出错,请检查OpenOffice服务是否启动。");
		}
		// convert
		DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
		converter.convert(docInputFile, htmlOutputFile);
		connection.disconnect();
		// 转换完之后删除word文件
		docInputFile.delete();
		return htmFileName;
	}
	
	/**
	 * 转换文件成pdf
	 * 
	 * @param fromFileInputStream:
	 * @throws IOException 
	 */
	public String file2pdf(InputStream fromFileInputStream, String toFilePath,String type) throws IOException {
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		String timesuffix = sdf.format(date);
		String docFileName = null;
		String htmFileName = null;
		if("doc".equals(type)){
			docFileName = "doc_" + timesuffix + ".doc";
			htmFileName = "doc_" + timesuffix + ".pdf";
		}else if("docx".equals(type)){
			docFileName = "docx_" + timesuffix + ".docx";
			htmFileName = "docx_" + timesuffix + ".pdf";
		}else if("xls".equals(type)){
			docFileName = "xls_" + timesuffix + ".xls";
			htmFileName = "xls_" + timesuffix + ".pdf";
		}else if("ppt".equals(type)){
			docFileName = "ppt_" + timesuffix + ".ppt";
			htmFileName = "ppt_" + timesuffix + ".pdf";
		}else{
			return null;
		}
		File htmlOutputFile = new File(toFilePath + File.separatorChar + htmFileName);
		File docInputFile = new File(toFilePath + File.separatorChar + docFileName);
		if (htmlOutputFile.exists())
			htmlOutputFile.delete();
		htmlOutputFile.createNewFile();
		if (docInputFile.exists())
			docInputFile.delete();
		docInputFile.createNewFile();
		/**
		 * 由fromFileInputStream构建输入文件
		 */
		try {
			OutputStream os = new FileOutputStream(docInputFile);
			int bytesRead = 0;
			byte[] buffer = new byte[1024 * 8];
			while ((bytesRead = fromFileInputStream.read(buffer)) != -1) {
				os.write(buffer, 0, bytesRead);
			}
			os.close();
			fromFileInputStream.close();
		} catch (IOException e) {

		}
		OpenOfficeConnection connection = new SocketOpenOfficeConnection( 8100);
		try {
			connection.connect();
		} catch (ConnectException e) {
			System.err.println("文件转换出错,请检查OpenOffice服务是否启动。");
		}
		// convert
		DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
		converter.convert(docInputFile, htmlOutputFile);
		connection.disconnect();
		// 转换完之后删除word文件
		docInputFile.delete();
		return htmFileName;
	}
	
	public static void main(String[] args) throws IOException {
		Doc2HtmlUtil coc2HtmlUtil = getDoc2HtmlUtilInstance();
		File file = null;
		FileInputStream fileInputStream = null;
		
		file = new File("D:\\xls_20190809140147.xls");
		fileInputStream = new FileInputStream(file);
		coc2HtmlUtil.file2Html(fileInputStream, "D:\\","xls");
		coc2HtmlUtil.file2pdf(fileInputStream, "D:\\","xls");

//
//		file = new File("D:/poi-test/test.doc");
//		fileInputStream = new FileInputStream(file);
////		coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/doc","doc");
//		coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/doc","doc");
//
//		file = new File("D:/poi-test/周报模版.ppt");
//		fileInputStream = new FileInputStream(file);
////		coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/ppt","ppt");
//		coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/ppt","ppt");
//
//		file = new File("D:/poi-test/test.docx");
//		fileInputStream = new FileInputStream(file);
////		coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/docx","docx");
//		coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/docx","docx");
	}
}

【2】Maven Jar

下载jodconverter,引入jodconverter-2.2.2.jar,其它的jar可以通过maven引入。

<dependency>
   <groupId>org.openoffice</groupId>
   <artifactId>juh</artifactId>
   <version>4.1.2</version>
</dependency>
<dependency>
   <groupId>org.openoffice</groupId>
   <artifactId>jurt</artifactId>
   <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.openoffice</groupId>
    <artifactId>ridl</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
     <groupId>org.openoffice</groupId>
     <artifactId>unoil</artifactId>
     <version>4.1.2</version>
</dependency>

【3】目前发现的问题

将word转换成pdf,pdf里面没内容.....,转成html没问题。