gitee开源程序kkFileView踩坑及解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:本人从2021年7月份开始使用开源框架kkFileView到现在已经过去了5个多月了,总提来讲kkFileView的功能很强大,由于需要集成依赖第三方软件openboffice或liberoffice,不可避免的会给开发人员或者使用部署人员带来很多兼容性和环境配置问题,我在这里踩了很多坑,这里做个总结,下面的kkFileView就简称KFV了


提示:以下是本篇文章正文内容,下面案例可供参考

一、依赖选择

示例:kkFileView需要第三方软件的功能支撑,因此如果选择的软件不符合程序能够接受的范围就会带来冲突,下面附上官方说明:

Java: 1.8+
Maven:3.4+
OpenOffice或LiberOffice(Windows下已内置,CentOS或Ubuntu下会自动下载安装,MacOS下需要自行安装)

不过这些提示并不精确,查看类OfficeUtils中getDefaultOfficeHome方法后定位到更精准范围,如下图:
在这里插入图片描述
windows下KFV自带完美兼容的windows-office,这里就不做说明了;
linux下可以选择openoffice4,而libreoffice可以选择使用libreoffice6.0-7.2版本;
作者这里选择的是libreoffice7.1版本的软件来兼容的KFV,下载地址如下:

https://downloadarchive.documentfoundation.org/libreoffice/old/7.1.4.2/rpm/x86_64/LibreOffice_7.1.4.2_Linux_x86-64_rpm.tar.gz

https://downloadarchive.documentfoundation.org/libreoffice/old/7.1.4.2/rpm/x86_64/LibreOffice_7.1.4.2_Linux_x86-64_rpm_langpack_zh-CN.tar.gz

这两个分别下载LibreOffice_7.1.4.2_Linux_x86-64_rpm.tar.gz 和LibreOffice_7.1.4.2_Linux_x86-64_rpm_langpack_zh-CN.tar.gz文件,前面提供启动程序,后面提供中文语言包

第三个需要下载的是KFV官网的linux能运行的jar包下载地址如下:(https://kkfileview.keking.cn

https://kkfileview.keking.cn/kkFileView-4.0.0.tar.gz

二、环境部署安装

2.1解压

将下载好的程序传到某个目录下,我这里的文件目录是
/export/server/LibreOffice_7.1.4.2_Linux_x86-64_rpm.tar.gz
/export/server/LibreOffice_7.1.4.2_Linux_x86-64_rpm_langpack_zh-CN.tar.gz
/export/server/kkFileView-4.0.0.tar.gz

接下来需要解压文件:
使用命令如下:

#进入解压文件位置后
 tar -zxvf  /export/server/LibreOffice_7.1.4.2_Linux_x86-64_rpm.tar.gz 
 tar -zxvf  /export/server/LibreOffice_7.1.4.2_Linux_x86-64_rpm_langpack_zh-CN.tar.gz
 tar -zxvf  /export/server/kkFileView-4.0.0.tar.gz

2.2启动程序

解压后目录结构如图所示;
在这里插入图片描述

进入 cd ./kkFileView4.0.0/bin ,然后执行命令sh ./startup.sh sh ./showlog.sh
这个时候你就会发现第一个坑:office.home配置有误

2.3踩坑--------office.home配置有误

在这里插入图片描述
这个是由于KFV的加载程序找不到office.home,在OfficePluginManager类的,startOfficeManager方法下,源码截图:
在这里插入图片描述 OfficeUtils.getDefaultHome()方法是获取 配置文件application.properties的office.home的加载位置,这个不配置的话,在linux中有启动程序会扫描openoffice、libreoffice文件夹自动获取并加载,因此不是导致office.home出现的主要原因,主要原因是上面我们下载的2个程序并没有编译生成可被KFV扫描的程序。

2.3踩坑问题解决

编译LibreOffice_7.1.4.2_Linux_x86-64_rpm和LibreOffice_7.1.4.2_Linux_x86-64_rpm_langpack_zh-CN文件,命令如下:

#进入到/export/server目录
sudo yum install -y  ./LibreOffice_7.1.4.2_Linux_x86-64_rpm/RPMS/*.rpm
#然后再执行
sudo yum install -y  ./LibreOffice_7.1.4.2_Linux_x86-64_rpm_langpack_zh-CN/RPMS/*.rpm

这里还要很多命令,如卸载libreoffice程序语句:
sudo yum remove libreoffice7.1-*
这里的7.1是版本号

这个时候我们再执行启动程序./startip.sh突然发现程序启动成功,这是由于我们编译后会在
目录/opt下创建了libreoffice7.1文件,如图所示:
在这里插入图片描述
到这里我们初步成功似乎很完美了,接下来我为你表演各种坑,如下:

三、踩坑-------OFFICE组件不可用

确认是否是office组件的问题

大部分office组件不可用是由于未关闭office程序导致的,先验证office程序是否关闭:

ps -ef |grep office

如果有就说明,office程序未关闭,我这里提供了一个./shutdown.sh脚本,可用拿着用,替换KFV的./shutdown.sh即可

#!/bin/bash
FIDS=`ps -ef|grep kkFileView-4.0.0.jar|awk '{print $2}'`
PIDS=`ps -ef|grep office|awk '{print $2}'`

if [ -z "$FIDS" ]; then
    echo "ERROR: The kkFileView does not started!"
    exit 1
fi
for FID in $FIDS ; do
    kill -9 $FID
done
echo "OK!"
echo "FID: $FIDS"

if [ -z "$PIDS" ]; then
    echo "ERROR: The office does not started!"
    exit 1
fi
for PID in $PIDS ; do
    kill -9 $PID
done
echo "OK!"
echo "PID: $PIDS"

如果你发现office已经关闭了还是出现以上问题,接下来你需要注释掉如下代码,再编译上传到Linux运行加载判断是否是KFV的office监听程序异常导致的。我测试的时候,发现绝大部分office.home报错都是这个检测程序导致的。
在这里插入图片描述
如图所示,注释掉OfficeProcess.java程序start方法下的,用来判断soffice.bin程序是否存在,注释掉后如果程序还是启动不起来,就说明是office组件的问题了,不过一般都不是组件的问题,下面是来检测组件是否存在问题的步骤3:

验证office组件是否不可用

第一步验证文件是否安装成功
执行以下命令:

/opt/libreoffice7.1/program/soffice -help

截图如下:
在这里插入图片描述
这里讲解以下为什么需要执行这条语句,主要是验证soffice.exe程序是否可用,KFV这里有对该程序的启动代码,如下所示:
在这里插入图片描述
也就是说程序启动时会获取soffice.bin程序和启动配置文件application.properyies的office.plugin.server.ports = 2001,2002端口号进行加载,
这也就是starting process with acceptString ‘%s’ and profileDir '%s’等等提示语句该类为OfficeProcess。

当我们发现-help语句执行成功后,等于程序成功编译完成了,接下来我们需要判断程序是否能用

验证office组件是否可用

上传一个excel文件one.xlsx到/opt,通过libreoffice程序转换成pdf文件,

#准备一个文件夹做输出文件夹output,我这里的是rh
 /opt/libreoffice7.1/program/soffice --headless --convert-to pdf:writer_pdf_Export /opt/one.xlsx --outdir /opt/rh/

在这里插入图片描述

在浏览器打开,如图所示:
在这里插入图片描述
发现office程序没问题了,以上流程只要有一出流程加载有问题就可能导致office组件真的存在问题,所以只要程序出错,我建议删除–重装大法。

为了保险起见我建议配置环境变量,操作如下

vi /etc/profile

export PATH=$PATH:/opt/libreoffice7.1/program

#保存退出
source /etc/profile

#执行成功代表配置完成
soffice --version

到这一步后为避免程序出现office组件不可用的情况,需要进行如下操作

#进入kkFileView目录
cd conf/
vi application.properties
#修改office.home
office.home=/opt/liberoffice7.1

在这里插入图片描述
然后重新启动,接下来有惊喜

在windows版本下验证office组件是否不可用

1、环境搭建:
下载Libreoffice7.1压缩包,下载路径我已经为大家准备好了:https://downloadarchive.documentfoundation.org/libreoffice/old/7.1.0.1/win/x86_64/
如图所示:
在这里插入图片描述

直接下载它就行了,安装的时候一路默认选项,你会发现在C:\Program Files\LibreOffice下有一个program文件夹,我在桌面上已经实现准备好了一个测试文件one.xlsx,现在我要通过office组件将它转换成pdf格式,在C:\Program Files\LibreOffice\program文件路径输入cmd,进入命令行窗口,
执行

soffice --headless --convert-to pdf:writer_pdf_Export C:\Users\Administrator\Desktop/one.xlsx --outdir C:\Users\Administrator\Desktop

如图:
在这里插入图片描述
最后我发现在桌面上生成了一个one.pdf文件,打开看看,如下图。

在这里插入图片描述

说明office组件可用,验证成功。

四、踩坑-------officeHome must exist and be a directory

如图所示:
在这里插入图片描述
出现这个bug的原因是我们配置office.home时office.home=/opt/liberoffice7.1的后面有空格即占位符,导致程序并不是访问的指定路径,删除掉空格后即可成功,如图:(空格导致的程序报错)

在这里插入图片描述

至此程序导致的office.home原因完美解决

五、程序优化

1、无法打开dox文件,使用KFV程序转义成pdf时会报500,体验感很糟糕,我这里通过异常捕获,返回I‘m sorry图像

代码如下:
在这里插入图片描述

位置:OfficeFilePreviewImpl.class
步骤:第一步添加日志程序:

  private final Logger logger = LoggerFactory.getLogger(OfficeFilePreviewImpl.class);

##########################
  try {
                    officeToPdfService.openOfficeToPDF(filePath, outFilePath);
                    if (isHtml) {
                        // 对转换后的文件进行操作(改变编码方式)
                        fileHandlerService.doActionConvertedFile(outFilePath);
                    }
                    if (ConfigConstants.isCacheEnabled()) {
                        // 加入缓存
                        fileHandlerService.addConvertedFile(pdfName, fileHandlerService.getRelativePath(outFilePath));
                    }
                }catch (Exception e){
                    logger.error("文件解析异常,请检测文件是否可用,file name is {} and error is {}",fileName,e.getMessage());
                    String errorMsg = "文件解析异常,请检测文件是否可用";
                    return otherFilePreview.notSupportedFile(model, errorMsg);
                }

其它位置需要捕获的同理。

2、文件无法打开,报404

这是由于通过缓存的在这里插入图片描述
方式进行的判断,可以是redis,也可以是Map等等,但是这些严格意义上来讲没错,但是实际上缺并不好用,
我这里修改成最简单的文件判断,如下:

File file = new File(outFilePath);
if(!file.exists){
}

3、解决文件编译乱码问题

上面的one.xlsx文件转换成one.pdf后发现有部分数据已经出现了乱码,而KFV提供了很强的帮助来针对文件乱码问题。步骤如下:
fonts文件的来源:windows下的C:\Windows\Fonts下文件拷贝就行了,然后放到chinese目录下。

cd /usr/share/fonts

mkdir chinese

chmod -R 755 /usr/share/fonts/chinese

vi /etc/fonts/fonts.conf

<dir>/usr/share/fonts/chinese</dir>
6、按 esc键进入安全模式,输出 :wq 保存更改推出,如下图

7、fc-cache   更新更改生效 刷新缓存

8、fc-list   查看是否成功

如图所示:
请添加图片描述

总结

提示:这里对文章进行总结:
如果后面还遇到一些坑,也会继续补充的。

要在IDEA中部署Gitee开源项目,你需要按照以下步骤进行操作: 1. 在IDEA中创建一个新项目。可以使用已有的项目,或者新建一个项目。 2. 将项目初始化为git仓库。在IDEA的终端或者命令行中,使用git init命令初始化git仓库。 3. 将代码添加到暂存区。可以使用git add命令将修改的文件添加到暂存区。例如,使用git add .命令将所有修改的文件添加到暂存区。 4. 提交代码到本地库。使用git commit命令将暂存区的代码提交到本地库。例如,使用git commit -m "Initial commit"命令提交代码,并添加相应的提交信息。 5. 在Gitee上注册账号并登录。Gitee是一个基于Git的代码托管和研发协作平台。 6. 在Gitee上创建一个新的远程仓库。可以使用Gitee的网址https://gitee.com/,登录后创建一个新的远程仓库。 7. 将本地库与Gitee远程仓库关联。在IDEA的终端或者命令行中,使用git remote add命令将本地库与Gitee远程仓库关联。例如,使用git remote add origin https://gitee.com/your_username/your_repository.git命令将本地库与Gitee远程仓库关联。 8. 推送代码到Gitee远程仓库。使用git push命令将本地库的代码推送到Gitee远程仓库。例如,使用git push origin master命令将本地库的master分支推送到Gitee远程仓库。 9. 现在你的项目已经部署到了Gitee上,其他用户可以在Gitee上访问你的开源项目。 请注意,这只是一个简单的步骤指南,具体的操作可能会根据你的项目和环境而有所不同。你可以根据需要进行进一步的配置和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [IDEA 集成 Gitee](https://blog.csdn.net/qq_45917176/article/details/126272623)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [IDEA使用Gitee插件教程](https://blog.csdn.net/weixin_59610127/article/details/125253619)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值