本文摘要
文章介绍在泛微 E9 中集成开源 kkfileview 实现统一文档预览:先自行编译部署 kkfileview 服务,再新建工具类生成带 ddcode 的文件下载地址,改造 index2file.jsp 拼接并 Base64 编码预览链接嵌入 iframe,最后通过 kkfileview.properties 配置开关与地址。适合做 E9 二开的读者参考,作者提醒方案安全性与稳定性尚未全面评估,生产使用前需充分测试,并注意并发、大文件和移动端适配。
本博客只涉及部分核心操作,不是保姆级教学,希望你也能有自己的思路,感悟破局的乐趣。

背景
在日常办公中,文件预览是一个高频且重要的需求。传统的文件预览方案往往存在格式支持有限、体验不佳等问题。泛微E9自带的文档预览功能虽然基础,但在面对复杂格式或特殊需求时往往力不从心。
今天给大家介绍如何通过集成开源的kkfileview项目,为泛微E9打造一个强大、统一的文档预览解决方案。
功能亮点
- 多格式支持:支持Office、PDF、图片、视频、音频等常见格式
- 无缝集成:与泛微E9原有文档模块完美融合
- 零客户端:基于Web的纯前端预览,无需安装任何插件
- 高性能:基于Spring Boot构建,响应迅速
- 开源免费:基于Apache 2.0协议,可自由使用和修改
实施步骤
第一步:部署kkfileview服务
丸子采用的是从官方GitHub下载源码并自行编译打包的方式。如果你不想自己打包,可以私信丸子获取编译好的版本(有时间的话会分享)。
启动成功后访问演示页:

访问成功界面:

第二步:泛微E9文档功能改造
核心工具类
首先创建一个工具类,用于生成文件下载的ddcode(这是泛微文档外发的核心知识):
package com.onestools;
import weaver.docs.docs.util.DesUtils;
public class getFileDownloadUrl {
/** * 根据文件ID生成临时下载URL * @param fileid 文件ID * @return 下载URL */ public static String getFileDownloadUrl(int fileid) { try { String encrypt = new DesUtils().encrypt(1 + "_" + fileid); return "/weaver/weaver.file.FileDownload?fileid=" + fileid + "&download=1&ddcode=" + encrypt; } catch (Exception e) { e.printStackTrace(); return null; } }
/** * 根据文件ID和基础URL生成临时下载URL * @param fileid 文件ID * @param baseurl 基础URL * @return 下载URL */ public static String getFileDownloadUrl(int fileid, String baseurl) { try { String encrypt = new DesUtils().encrypt(1 + "_" + fileid); return baseurl + "/weaver/weaver.file.FileDownload?fileid=" + fileid + "&download=1&ddcode=" + encrypt; } catch (Exception e) { e.printStackTrace(); return null; } }}JSP页面改造
在ecology目录下/docs/e9/index2file.jsp中增加kkfileview预览逻辑:
增加引用:
<%@ page import="com.onestools.getFileDownloadUrl" %><%@ page import="sun.misc.BASE64Encoder" %>
添加kkfileview预览逻辑:
// 现在检查kkfileview配置boolean useKKFileView = "1".equals(rs.getPropValue("kkfileview","IsUsekkFileView"));String kkFileViewUrl = rs.getPropValue("kkfileview","kkFileViewUrl"); // kkfileview服务地址String e9BaseUrl = rs.getPropValue("kkfileview","E9BaseUrl"); // E9基础URLif(useKKFileView && !isEdit) { // KKFileView预览逻辑 if(!"".equals(Util.null2String(kkFileViewUrl)) && !"".equals(Util.null2String(e9BaseUrl))) { try { // 使用getFileDownloadUrl工具类生成下载链接 String originUrl = getFileDownloadUrl.getFileDownloadUrl(imagefileId, e9BaseUrl); String previewUrl = originUrl + "&fullfilename=" + java.net.URLEncoder.encode(imagefilename, "UTF-8");
// Base64编码previewUrl String base64Url = new BASE64Encoder().encode(previewUrl.getBytes("UTF-8")); // 生成最终的iframe地址 docContent = "<iframe id=\"officeShow\" src=\""+kkFileViewUrl+"/onlinePreview?url="+java.net.URLEncoder.encode(base64Url, "UTF-8")+"\" style=\"display: block;width: 100%;height: 100%; border:0\"></iframe>"; } catch (Exception e) { // 如果kkfileview出错,继续使用原有逻辑 e.printStackTrace(); } }}
第三步:系统配置
在ecology目录下/WEB-INF/prop新建kkfileview.properties
增加以下内容:
# 是否开启kkfileviewIsUsekkFileView=1# kkfileview的外部访问地址kkFileViewUrl=http://192.168.31.130:8012/kkpreview# 相对于kkfileview访问E9的地址(建议内网地址)E9BaseUrl=http://127.0.0.1:8080注意事项
- 安全性考虑:该方案的安全性和稳定性暂未经过全面评估,请在生产环境使用前进行充分测试
- 性能优化:大量并发预览时可能需要考虑kkfileview的集群部署
- 文件大小:超大文件预览时需要注意网络传输和服务器性能
- 移动端适配:本示例只处理了index2file.jsp,如需移动端支持,需要对index2mobile.jsp进行类似改造
总结
通过集成kkfileview,我们成功为泛微E9赋予了强大的文档预览能力。这种”破局”思路不仅适用于文档预览,还可以扩展到其他系统功能的增强和改造。
技术只是工具,思路才是关键。希望这个案例能够激发大家更多的创新想法,在现有系统的基础上创造出更多可能性。
温馨提示:本文涉及的技术方案仅供学习参考,请根据实际环境进行评估和测试。如有技术问题,欢迎交流讨论!