当前位置: 代码网 > it编程>编程语言>Java > Java使用OpenOffice将office文件转换为PDF的示例方法

Java使用OpenOffice将office文件转换为PDF的示例方法

2024年09月14日 Java 我要评论
1. 先行工作请注意,无论是windows还是liunx环境都需要安装jdk环境,版本jdk7+1.1 openoffice官网下载本地开发环境使用windows,因此下载windows 32-bit

1. 先行工作

请注意,无论是windows还是liunx环境都需要安装jdk环境,版本jdk7+

1.1 openoffice官网下载

本地开发环境使用windows,因此下载windows 32-bit (x86)(exe)

测试环境使用linux,所以下载linux 64-bit(x86-64)

openoffice官网下载

image-20240204084355610

1.2 jodconverter官网下载

jodconverter官网下载

1.3 下载内容

image-20240204143339196

2.介绍

openoffice: openoffice是一套跨平台的办公室软件套件,功能非常强大,适用windows、linux、mac等各大平台,简单来说office能做到的openoffice也基本都能做到。

jodconverter: 是一个java的opendocument文件转换器,可以进行许多文件格式的转换。它依赖于openoffice.org或者libreoffice提供的服务来进行转换,它能将microsoft office文档(word,excel,powerpoint)转换为pdf格式。你可以将jodconverter内嵌在java应用程序里,也可以单独作为命令行由脚本调用,更可以应用为网页程序或者web service以供网络应用。

3. 安装openoffice服务

3.1.windows环境

  • 首先安装openoffice,可直接默认安装
  • 通过命令行方式启动openoffice服务(这步可不执行,仅作为验证是否安装正确,代码中会自动启动服务)
//进入目录
cd c:\program files (x86)\openoffice 4\program
//启动openoffice服务
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
//查看是否启动成功
netstat -ano|findstr "8100"
//终止进程
taskkill /f /pid 2032

image-20240204144733832

3.2 linux环境

创建指定目录并上传下载的liunx下的安装包

mkdir openoffice

执行解压缩命令

tar -zxvf apache_openoffice_4.1.15_linux_x86-64_install-rpm_zh-cn.tar.gz

image-20240205113503769

进入zh-cn/rpms/目录下安装rpm文件

yum localinstall *.rpm

输入y确认安装,安装完成后会生成目录:desktop-integration

image-20240205113852876

进入desktop-integration目录 安装

yum localinstall openoffice4.1.15-redhat-menus-4.1.15-9813.noarch.rpm 

输入y确认安装,如果报错:

transaction check error:
  file /usr/bin/soffice from install of openoffice4.1.15-redhat-menus-4.1.15-9813.noarch conflicts with file from package libreoffice-core-1:5.3.6.1-24.el7.x86_64

执行以下命令

sudo yum remove libreoffice-core

然后重新执行上一步的安装命令,成功如下:

image-20240205114311409

后台服务方式启动openoffice服务

/opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

4. maven依赖

jodconverter-2.2.2中的有些jar文件的依赖并不一定会在maven仓库中找到,因此需要手动install

打开命令行执行以下命令,注意-dfile替换为 jodconverter-2.2.2\jodconverter-2.2.2\lib 的目录

mvn install:install-file -dfile="e:\开发工具\openoffice-word转pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\unoil-3.0.1.jar" -dgroupid=org.apache.openoffice -dartifactid=unoil -dversion=3.0.1 -dpackaging=jar
mvn install:install-file -dfile="e:\开发工具\openoffice-word转pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\jodconverter-2.2.2.jar" -dgroupid=org.jodconverter -dartifactid=jodconverter -dversion=2.2.2 -dpackaging=jar
mvn install:install-file -dfile="e:\开发工具\openoffice-word转pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\jodconverter-cli-2.2.2.jar" -dgroupid=org.jodconverter -dartifactid=jodconverter-cli -dversion=2.2.2 -dpackaging=jar
mvn install:install-file -dfile="e:\开发工具\openoffice-word转pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\juh-3.0.1.jar" -dgroupid=org.apache.odftoolkit -dartifactid=juh -dversion=3.0.1-incubating -dpackaging=jar
mvn install:install-file -dfile="e:\开发工具\openoffice-word转pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\jurt-3.0.1.jar" -dgroupid=org.apache.odftoolkit -dartifactid=jurt -dversion=3.0.1-incubating -dpackaging=jar
mvn install:install-file -dfile="e:\开发工具\openoffice-word转pdf\jodconverter-2.2.2\jodconverter-2.2.2\lib\ridl-3.0.1.jar" -dgroupid=org.apache.odftoolkit -dartifactid=ridl -dversion=3.0.1-incubating -dpackaging=jar

image-20240204164608484

5. 转换代码

转换工具类:fileconversionutil.java

package com.cxstar.common.utils;

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 lombok.extern.slf4j.slf4j;
import org.apache.commons.io.filenameutils;
import org.apache.commons.lang3.stringutils;

import java.io.file;
import java.util.arrays;
import java.util.list;
import java.util.stream.collectors;

/**
 * 文件转换工具类,支持将不同类型的文件转换为指定格式(pdf或html)。
 */
@slf4j
public class fileconversionutil {

    /**
     * 被转换文件类型的枚举,用于表示支持的文件类型。
     */
    public enum filetype {
        doc, docx, xls, xlsx, ppt, pptx;

        /**
         * 获取小写文件类型列表
         *
         * @return 小写文件类型列表
         */
        public static list<string> getlowercasefiletypes() {
            return arrays.stream(values())
                    .map(filetype::name)
                    .map(string::tolowercase)
                    .collect(collectors.tolist());
        }
    }

    /**
     * 转换文件类型的枚举,用于表示支持的文件类型。
     */
    public enum convertfiletype {
        pdf, html;

        /**
         * 获取小写文件类型列表
         *
         * @return 小写文件类型列表
         */
        public static list<string> getlowercasefiletypes() {
            return arrays.stream(values())
                    .map(convertfiletype::name)
                    .map(string::tolowercase)
                    .collect(collectors.tolist());
        }
    }

    /**
     * 执行文件格式转换。
     *
     * @param originalfilepath  原始文件路径
     * @param convertedfilepath 转换后文件保存路径
     * @return 转换是否成功
     */
    public static boolean converttopdf(string originalfilepath, string convertedfilepath) {
        // 获取原始文件扩展名
        string originalext = filenameutils.getextension(originalfilepath);
        list<string> lowercasefiletypes = filetype.getlowercasefiletypes();
        // 检查原始文件类型是否支持
        if (!lowercasefiletypes.contains(originalext)) {
            throw new runtimeexception("错误的转换类型:只允许格式为:" + stringutils.join(lowercasefiletypes, ",") + " 进行转换");
        }

        // 获取目标文件扩展名
        string convertext = filenameutils.getextension(convertedfilepath);
        list<string> convertfiletypes = convertfiletype.getlowercasefiletypes();

        // 检查目标文件类型是否支持
        if (!convertfiletypes.contains(convertext)) {
            throw new runtimeexception("错误的转换类型:只允许转换为:" + stringutils.join(convertfiletypes, ","));
        }

        try {
            // 连接 openoffice 服务。需提前开启 openoffice 服务,否则会报错。
            openofficeconnection connection = new socketopenofficeconnection(8100);
            try {
                connection.connect();
            } catch (exception e) {
                throw new runtimeexception("连接 openoffice 服务失败,请检查是否启动 openoffice 服务,错误信息:" + e.getmessage());
            }

            // 转化原始文件转化为 pdf 或 html
            log.info("开始转换......");
            long starttime = system.currenttimemillis();

            documentconverter converter = new openofficedocumentconverter(connection);
            converter.convert(new file(originalfilepath), new file(convertedfilepath));

            long endtime = system.currenttimemillis();
            log.info("转换完成,耗时: {} 毫秒", endtime - starttime);

            connection.disconnect();

        } catch (exception e) {
            throw new runtimeexception("转换异常:" + e.getmessage());
        }
        return true;
    }
}

测试类:

@test
void createindexandsetmapping11() {
    string file ="c:\\users\\zhouquan\\desktop\\叙述词导入模板.xlsx";
    string pdffile = "c:\\users\\zhouquan\\desktop\\test.pdf";
    fileconversionutil.conversionpdforhtml(file, pdffile);
}

以上就是java使用openoffice将office文件转换为pdf的示例方法的详细内容,更多关于java openoffice将office文件转pdf的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com