前言
项目中需要使用在线预览Word的功能,可借助Apache OpenOffice服务然先将word转换成pdf,然后在通过在线pdf在线预览的迂回方式实现,以下记录此过程。
一、安装并启动OpenOffice的服务(RPM安装方式)(需要使用root用户安装启动)
1.安装OpenOffice,启动服务
去官网找下载包,官网地址:www.openoffice.org/download/M
我下载的是4.1.10这个,下载地址:udomain.dl.sourceforge.net/project/ope…
下载速度特别慢,因此我将下载的文件已上传在csdn资源中
download.csdn.net/download/jx…
先参考着官网安装文档来进行,官网安装文档地址:www.openoffice.org/download/co…
##解压
mkdir /root/openoffice
tar -zxvf /root/Apache_OpenOffice_4.1.10_Linux_x86-64_install-rpm_zh-CN.tar.gz -C /root/openoffice
cd /root/openoffice/zh-CN/RPMS
yum localinstall *.rpm
cd /root/openoffice/zh-CN/RPMS/desktop-integration
yum localinstall openoffice4.1.10-redhat-menus-4.1.10-9807.noarch.rpm
复制代码
##安装成功后,会在 /opt目录下生成openoffice4文件夹, 即/opt/openoffice4
##添加字体库(ps:不然会出现转换中文字体乱码或直接不显示中文字体)
在 /usr/share/fonts 目录下新建文件夹,windowfonts,如图
##如果上面的步骤中发现找不到/usr/share/fonts目录说明部分依赖没安装,增加以下依赖安装
yum install libXext.x86_64
yum groupinstall "X Window System"
复制代码
然后将我们windows系统得字体库文件拷贝到windowfonts下,windows字体库路径如下图
##启动服务,启动命令为:
/opt/openoffice4/program/soffice.bin -headless -accept="socket,host=0.0.0.0,port=8100;urp;" -nofirststartwizard &
##查看进程
ps -ef|grep openoffice4
##或者
netstat -luntp|grep 8100
复制代码
至此,安装并启动OpenOffice的服务完成,接下来进行Java调用测试
二、Java使用Openoffice进行word转Pdf,并进行预览试验。
1.进行单元测试
编写OpenOfficeTransferTest单元测试类
package openofficetest;
import java.io.File;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;
public class OpenOfficeTransferTest {
private Logger logger = LoggerFactory.getLogger(this.getClass());
private String connectIp = "192.168.56.101";
private int connectPort = 8100;
// word转pdf,使用openoffice进行转换
@Test
public void wordToPdfTest() {
OpenOfficeConnection connection = null;
logger.info("connecting start...");
try {
connection = new SocketOpenOfficeConnection(connectIp, connectPort);
connection.connect();
logger.info("connected...> " +connection);
DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);
logger.info("convert starting.....");
long startMs = System.currentTimeMillis();
converter.convert(new File("D:\\temp\\1.docx"), new File("D:\\temp\\1.pdf"));
long endMs = System.currentTimeMillis();
logger.info("convert success, spend time is : {} ms.",(endMs-startMs) );
} catch (Exception e) {
logger.error("", e);
} finally {
if(connection != null) {
connection.disconnect();
logger.info("connection disconnected. ");
}
}
}
}
复制代码
##以上单元测试的jar包依赖如下,(有部分是直接依赖本地的jar,因为maven下载不到)
<dependencies>
<!-- junit start -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<!-- junit end -->
<!-- office to pdf need install something start -->
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.2</version>
<scope>system</scope>
<systemPath>${basedir}/lib/jodconverter-2.2.2.jar</systemPath>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>ridl</artifactId>
<version>4.1.2</version>
<scope>system</scope>
<systemPath>${basedir}/lib/ridl-4.1.2.jar</systemPath>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>juh</artifactId>
<version>4.1.2</version>
<scope>system</scope>
<systemPath>${basedir}/lib/juh-4.1.2.jar</systemPath>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>jurt</artifactId>
<version>4.1.2</version>
<scope>system</scope>
<systemPath>${basedir}/lib/jurt-4.1.2.jar</systemPath>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>unoil</artifactId>
<version>4.1.2</version>
<scope>system</scope>
<systemPath>${basedir}/lib/unoil-4.1.2.jar</systemPath>
</dependency>
<!-- office to pdf need install something end-->
<!-- commons-io start -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<!-- commons-io end -->
<!-- jackson start -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.1</version>
</dependency>
<!-- jackson end -->
<!-- log start -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- log end -->
</dependencies>
复制代码
##不能下载到的jar如下,可直接在maven上搜索然后手工下载下来。
2.测试效果
转换后:
3.测试代码地址
测试代码地址:gitee.com/jxlhljh/ope…
近期评论