1. 先行工作
请注意,无论是windows还是liunx环境都需要安装jdk环境,版本jdk7+
1.1 openoffice官网下载
本地开发环境使用windows,因此下载windows 32-bit (x86)(exe),
测试环境使用linux,所以下载linux 64-bit(x86-64)
1.2 jodconverter官网下载
1.3 下载内容
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
3.2 linux环境
创建指定目录并上传下载的liunx下的安装包
mkdir openoffice
执行解压缩命令
tar -zxvf apache_openoffice_4.1.15_linux_x86-64_install-rpm_zh-cn.tar.gz
进入zh-cn/rpms/目录下安装rpm文件
yum localinstall *.rpm
输入y确认安装,安装完成后会生成目录:desktop-integration
进入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
然后重新执行上一步的安装命令,成功如下:
后台服务方式启动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
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的资料请关注代码网其它相关文章!
发表评论