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

文章目录

  • 前言
  • 一、依赖选择
  • 二、环境部署安装
    • 2.1解压
    • 2.2启动程序
    • 2.3踩坑--------office.home配置有误
    • 2.3踩坑问题解决
  • 三、踩坑-------OFFICE组件不可用
    • 确认是否是office组件的问题
    • 验证office组件是否不可用
    • 验证office组件是否可用
    • 在windows版本下验证office组件是否不可用
  • 四、踩坑-------officeHome must exist and be a directory
  • 五、程序优化
    • 1、无法打开dox文件,使用KFV程序转义成pdf时会报500,体验感很糟糕,我这里通过异常捕获,返回I‘m sorry图像
    • 2、文件无法打开,报404
    • 3、解决文件编译乱码问题
  • 总结

前言

提示:本人从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.gztar -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" ]; thenecho "ERROR: The kkFileView does not started!"exit 1
fi
for FID in $FIDS ; dokill -9 $FID
done
echo "OK!"
echo "FID: $FIDS"if [ -z "$PIDS" ]; thenecho "ERROR: The office does not started!"exit 1
fi
for PID in $PIDS ; dokill -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/profileexport 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/fontsmkdir chinesechmod -R 755 /usr/share/fonts/chinesevi /etc/fonts/fonts.conf<dir>/usr/share/fonts/chinese</dir>
6、按 esc键进入安全模式,输出 :wq 保存更改推出,如下图7、fc-cache   更新更改生效 刷新缓存8、fc-list   查看是否成功

如图所示:

总结

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

gitee开源程序kkFileView踩坑及解决方案相关推荐

  1. 【浙政钉】微信-专有钉钉小程序-开发踩坑实记

    文章目录 ⭐[浙政钉]微信-专有钉钉小程序-开发踩坑实记 ⭐ 创建项目 ⭐ 转化方案 ⭐ 政务钉钉调试 ⭐ 上传发布 ⭐[浙政钉]微信-专有钉钉小程序-开发踩坑实记 最近有个需求,要将微信小程序转为浙 ...

  2. otter 带表情包同步踩坑及解决方案

    otter 带表情包同步踩坑及解决方案 一.事情发生 ​ 在年末22点44分突然收到微信告警otter同步异常告警,channel_id为6的同步channel挂起,而且一直没有恢复,一直在告警 微信 ...

  3. 微信小程序开发踩坑合集

    微信搜索:凯小白学编程   回复 小程序   领取1000套小程序源码 本文分享一下开发小程序是遇到的一些问题.展示了曾经开发过的两个小程序中遇到的坑 下一篇文章预告:<Maven入门> ...

  4. 微信小程序开发踩坑日记

    2017.12.29  踩坑记录 引用图片名称不要使用中文,尽量使用中文命名,IDE中图片显示无异样,手机上图片可能出现不显示的情况. 2018.1.5  踩坑记录 微信小程序设置元素满屏,横向直接w ...

  5. 微信小程序入门踩坑记(妥妥的干货,新手快快看过来)

    初次上手微信小程序,各种踩坑各种百度,草草扫过官网的文字,呃....表示记不住不想看,然后看了一本入门基础, 诺,就这本啦(链接:https://pan.baidu.com/s/15hKlDNpowU ...

  6. 发布开源库的踩坑经历:jitpack.io

    前言 很多小伙伴自己写了一个库,打算开源出来,但是直接给别人发jar包或者aar包,别人使用都很不方便,而且版本更新也不方便,所以很多小伙伴把开源库放到了远程仓库里(如maven或jcenter),但 ...

  7. 程序员踩坑之旅:将 75000 行 iOS 原生代码迁移到 Flutter!

    人们普遍认为,如果想构建一个良好的移动应用,则必须建立iOS和Android两个版本.与此同时大多数企业想要的是:只实现一次业务逻辑,并快速打包成具有原生体验感的用户界面. 作者 | Gary Hun ...

  8. 微信小程序开发踩坑经验——小蜗社群

    2019独角兽企业重金招聘Python工程师标准>>> 之前遇到并且解决的坑,这边也渐渐忘记了,在这里就不列出来了-- 1.wx.redirectTo和wx.navigateTo   ...

  9. 小程序的踩坑-持续更新-建议收藏

    微信小程序的坑 小程序渲染层内核不一致导致某些 api 不可用 数组的扁平化方法 Array.prototype.flat() 不支持 解决: 重新定义此方法到数组对象的原型链上 /*** 2019年 ...

最新文章

  1. poj 3254 Corn Fields (状态压缩DP)
  2. 低功耗wifi soc_36氪首发研发低功耗蓝牙芯片,联睿微完成数千万元A+轮融资
  3. python开发自己的工具包_爬虫开发python工具包介绍 (4)
  4. Effective objective-C 读书笔记 (第一部分)
  5. 渗透测试入门20之渗透测试七阶段
  6. 2017.10.28 压缩 思考记录
  7. UE3 移动设备分析
  8. 15_传智播客iOS视频教程_OC语言完全兼容C语言
  9. 奇安信代码卫士帮助微软修复多个高危漏洞,获官方致谢
  10. 数据库学习笔记5-隔离级别 Repeatable Read
  11. 孔浩javacript基础笔记一
  12. python sobel算子_图像边缘检测:Canny算子、Prewitt算子和sobel算子
  13. 一键加速,华为云CDN加速满足多行业需要
  14. Docker Nginx 如何重新加载配置
  15. 怎么压缩过大的GIF图片?三步缩小动态图片
  16. 你可以忍受大城市 365 天的孤独,却不能忍受小城市 7 天的热闹
  17. json后台的一些处理方式
  18. 高中计算机教师专业,高中计算机教师资格证,要计算机专业证书吗
  19. JavaScript获取鼠标控制权
  20. f15纸飞机折法_A4纸折F15战斗机的折法视频折纸飞机教程

热门文章

  1. 隧道人员定位考勤软件详细介绍
  2. 基于地理位置的校园交友社区APP
  3. java的特征多态,java基础(三)—–java的三大特征之多态
  4. 本地账户用户文件夹重命名
  5. 蝶衣王推荐在家就能做的副业
  6. 华为od机考真题(JAVA)
  7. c语言实现扫雷秒杀挂
  8. 48小时开发实践:如何开发一款可实时视频的智能小车
  9. 给一个不多于5位的正整数,并要求求出它的位数,且正序输出和反序输出
  10. NPN和PNP传感器区别及接线