广告位联系
返回顶部
分享到

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

java 来源:互联网 作者:佚名 发布时间:2024-09-14 21:50:06 人浏览
摘要

1. 先行工作 请注意,无论是windows还是liunx环境都需要安装jdk环境,版本jdk7+ 1.1 OpenOffice官网下载 本地开发环境使用windows,因此下载Windows 32-bit (x86)(EXE), 测试环境使用linux,所以下载Linux 64-b

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服务(这步可不执行,仅作为验证是否安装正确,代码中会自动启动服务)

1

2

3

4

5

6

7

8

//进入目录

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下的安装包

1

mkdir openoffice

执行解压缩命令

1

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

image-20240205113503769

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

1

yum localinstall *.rpm

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

image-20240205113852876

进入desktop-integration目录 安装

1

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

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

1

2

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

执行以下命令

1

sudo yum remove libreoffice-core

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

image-20240205114311409

后台服务方式启动openoffice服务

1

/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 的目录

1

2

3

4

5

6

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

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;

    }

}

测试类:

1

2

3

4

5

6

@Test

void createIndexAndSetMapping11() {

    String file ="C:\\Users\\zhouquan\\Desktop\\叙述词导入模板.xlsx";

    String pdfFile = "C:\\Users\\zhouquan\\Desktop\\test.pdf";

    FileConversionUtil.conversionPdfOrHtml(file, pdfFile);

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计