Apache OpenOffice开源软件转换Word到PDF(自测,踩坑,整合,一步到位)

一.目前市场能使用的产品比较:

        (参考如下文章):Java开发中Word转PDF文件5种方案横向评测_java word转pdf-CSDN博客

直接说这篇文章结果:

  • aspose        国外的 3万元      效果非常好
  • spire.doc     国内的 9000元   效果非常好
  • openoffice   国外的 免费 要安装依赖服务 测试效果还行
  • poi          难用
  • docx4j     一般

二. OpenOffice网址

        下载地址一(百度云): jdk,openoffice,windows字体,linux字体,jodconverter:2.2.2

链接: https://pan.baidu.com/s/1fPWTXiANsTuvBbJWogygfw 提取码: 9kfc --来自肥酱百度网盘超级会员v1的分享

        下载地址二(官网): Apache OpenOffice - Official Download

        下载地址二:Apache OpenOffice - Downloads

三.不同环境下运行测试

 3.1 macOs环境

参考文章:https://blog.csdn.net/ruankun521/article/details/104639193
1.直接百度云下载包,或者官网下载,(官网的复制链接以后迅雷下载比较快)
2.配置环境变量,确定自己使用的是zsh还是bash,终端输入: 
    echo $SHELL
3.我是使用的是zsh配置以下,编辑用户环境变量
  vim ~/.zshrc 
  export PATH=$PATH:/Applications/OpenOffice.app/Contents/MacOS
  source ~/.zshrc
4.配置号以后终端直接启动socket,命令如下
  soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofiertstartwizard

3.2 Windows环境

1.安装方法相同,但是注意的是安装的位置不管选哪里的最终会在c盘有安装包
2.执行的时候soffice 换成soffice.exe就可以
3.遇到问题运行桌面应用程序以后,在运行soffice没有反应,需要在任务管理器杀死soffice的进程树

3.3 Linux环境(centos7)

3.3.1 java环境安装(必须安装,运行依赖)
1.建立jdk存放目录
  mkdir /usr/local/java
2.解压压缩包并mv移动到目录
  tar -zxvf jdk1.8
​3.配置vim /etc/profile
  # java environment
  export JAVA_HOME=/usr/local/java/jdk1.8
  export PATH=$PATH:${JAVA_HOME}/bin
4.更新配置
    source /etc/profile
3.3.2 openoffice安装
1.解压压缩文件到当前目录
  tar -zxvf Apache_OpenOffice_4.1.4_Linux_x86-64_install-rpm_zh-CN.tar.gz
2.进入解压后文件
  cd zh-CN/RPMS/
3.安装文件下所有文件
  rpm -ivh *.rpm
4.安装完后进入desktop-integration安装另外一部分安装包,里面有几个安装包,如果是centos7的红帽的选下面的
  cd desktop-integration/
  rpm -ivh openoffice4.1.4-redhat-menus-4.1.4-9788.noarch.rpm
​
5.安装完成以后就启动试下
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

##如果报错就按照下面FAQ解决问题
##如果没有报错就查看有没有进程,如果有进程就成功了. 没有进程没有报错可能要删除以后重装(我就出现了这个情况)

6.启动方法

7.可以建立软连接,如果没有soffice软连接到/usr/bin那些就需要去目录启动
    soffice位置在/opt/openoffice4/program

8.本地启动直接127.0.0.1
    soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
​
9.远程启动需要把host定义本机ip地址
    soffice -headless -accept="socket,host=192.168.124.201,port=8100;urp;" -nofirststartwizard &
​
​
10.关闭服务,找到端口以后kill
查看端口
  ps -ef | grep 8100
查看进程
  ps -ef | grep soffice
查看所有端口
  netstat -lntp

四. FAQ常见问题

问题一:libXext.so.6不存在

在centos7下报错:
/opt/openoffice4/program/soffice.bin: error while loading shared libraries: libXext.so.6: cannot open shared object file: No such file or directory
​
解决办法:
  yum install -y libXext.x86_64

问题二: centos无窗口

centos中运行提示没有窗口,openOffice是应用程序可能需要这个支持,安装一个
问题:
  no suitable windowing system found, exiting.
​
解决方案:终端输入
  yum -y  groupinstall "X Window System"

问题三: 无法input载入文件

macOs使用正常 centos运行报错
问题:
com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException: conversion failed: could not load input document
解决方案:
 DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection); 
 不要用OpenOfficeDocumentConverter

问题四: centos中文无法转换

字体问题:这个问题在远程调用centos的服务时遇到了word中的中文不会转换,只有数字英文图片等会转换
(参考<<铭毅天下>>资料:http://blog.csdn.net/laoyang360/article/details/73555598)
​
解决方案:
  1.在centos上查看字体配置文件
  cat /etc/fonts/fonts.conf
  2.看到位置在<dir>/usr/share/fonts</dir>
  3.将下载的linux字体和windows字体都放在这个文件夹下
  4.刷新字体缓存
    fc-cache
  5.kill openoffice进程
  6.重启openoffice进程

问题五: centos执行后直接闪退

参考文章:https://blog.csdn.net/laoyang360/article/details/77342583
1.干掉安装包和文件
  rpm -e `rpm -qa |grep openoffice` `rpm -qa |grep ooobasis`
  rm -rf /opt/openoffice4
2.查看安装包是否还存在
  rpm -q openoffice*
  rpm -q ooobasis*
3.查看进程是否运行kill掉
4.查看多余文件
  find / -name *openoffice*
5.按照流程继续安装

问题六: 代码提示导入失败,docx无法读取


如果使用的是jodconverter:2.2.1版本的jar包是无法读取docx文件并转换的,可以下载百度云提供的2.2.2版本
jodconverter仓库没有2.2.2 需要加入scope只读取本地的

问题七:wps打开pdf在100%缩放以下字体模糊


转换以后得文件苹果缩比例情况下使用wps打开会文字糊,office打开正常,怀疑是矢量的问题

五. java调用socket实现转换代码

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;
import com.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter;
import org.junit.jupiter.api.Test;
​
import java.io.File;
import java.net.ConnectException;
​

public class MyOpenOffice {
    @Test
    public void test(){
​
        try {
            wordToPdf("/Users/chendada/Desktop/ideas.docx","/Users/chendada/Desktop/ideas3.pdf");
        } catch (ConnectException e) {
            throw new RuntimeException(e);
        }
    }
    
    public static void wordToPdf(String docFile,String pdfFile) throws ConnectException {
        // 源文件目录
        File inputFile = new File(docFile);
        System.out.println( inputFile.getName());
        // 输出文件目录
        File outputFile = new File(pdfFile);
        if (!outputFile.getParentFile().exists()) {
            outputFile.getParentFile().exists();
        }
        // 连接openoffice服务
        OpenOfficeConnection connection = new SocketOpenOfficeConnection(
//                "127.0.0.1", 8100);
                "192.168.124.201", 8100);
        connection.connect();
        // 转换word到pdf
        DocumentConverter converter = new StreamOpenOfficeDocumentConverter(
                connection);
        converter.convert(inputFile, outputFile);
        // 关闭连接
        connection.disconnect();
    }
}

六. POM文件jar​

<!-- pom 文件-->
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>juh</artifactId>
            <version>4.1.2</version>
        </dependency>
​
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>unoil</artifactId>
            <version>4.1.2</version>
        </dependency>
<!-- jodconverter仓库没有2.2.2 需要加入scope只读取本地的 -->
        <dependency>
            <groupId>com.artofsolving</groupId>
            <artifactId>jodconverter</artifactId>
            <version>2.2.2</version>
            <scope>system</scope>
        </dependency>
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值