开发者

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

目录
  • 1. 先行工作
    • 1.1 OpenOffice官网下载
    • 1.2 JODConverter官网下载
    • 1.3 下载内容
  • 2.介绍
    • 3. 安装OpenOffice服务
      • 3.1.Windows环境
      • 3.2 linux环境
    • 4. maven依赖
      • 5. 转换代码

        1. 先行工作

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

        1.1 OpenOffice官网下载

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

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

        OpenOffice官网下载

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

        1.2 JODConverter官网下载

        JODConverter官网下载

        1.3 下载内容

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

        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
        

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

        3.2 Linux环境

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

        mkdir openoffice
        

        执行解压缩命令

        tar -zxvf Apache_OpenOffice_4.1.15_Linux_x86-64_install-rpm_zh-CN.tar.gz
        

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

        进入zh-CN/RPMS/目录下安装rpm文件

        yum localinstall *.rpm
        

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

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

        进入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
        

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

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

        后台服务方式启动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:js开发工具\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
        

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

        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 小写文件类型列表
                 *www.devze.com/
                public static List<String> getLowerCaseFileTypes() {
                    return Arrays.stream(values())
                            .map(FileType::name)
                            .map(String::toLowerCase)
                            .collect(Collectors.toList());
                }
            }
        
            /**
             * 转换文件类型的枚举,用于表示支持的文件类型。
             */
            public enum ConvertFileType {
                PDF, HTML;
        
                /**
                 * 获取小写文件类型列表
                 *
                 * @return 小写文件类型列表
                 */
                p编程客栈ublic 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\\pythonDesktop\\叙述词导入模板.xlsx";
            String pdfFile = "C:\\Users\\zhouquan\\Desktop\\test.pdf";
            FileConversionUtil.conversionPdfOrHtml(file, pdfFile);
        }
        

        以上就是Java使用OpenOffice将office文件转换为PDF的示例方法的详细内容,更多关于Java OpenOffice将office文件转PDF的资料请关注编程客栈(www.devze.com)其它相关文章!

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新开发

        开发排行榜