军工级富文本内容迁移解决方案技术评估日志
2023年X月X日 于长沙研发中心
一、需求拆解与技术调研
1.1 核心需求矩阵
需求类型 | 技术指标 | 信创要求 |
---|---|---|
Word粘贴 | 保留形状/表格/公式等复杂样式,图片自动转存OSS | 支持银河麒麟V10+飞腾FT-2000环境 |
文档导入 | 支持Office/PDF格式解析,保持原始排版 | 通过龙芯LoongArch架构验证 |
公众号抓取 | 自动下载远程图片并替换为OSS地址 | 在奇安信浏览器v6.0+龙芯3A5000平台测试通过 |
1.2 市场方案对比
竞品分析表
供应商 | 产品名称 | 信创适配性 | 买断报价 | 致命缺陷 |
---|---|---|---|---|
某某互联 | WebOffice SDK | 仅x86架构 | 62万 | 无国产CPU二进制包 |
某某软件 | DocHub | 缺少龙芯MIPS支持 | 78万 | 图片强制BASE64编码 |
自研方案 | CKEditor魔改套件 | 全栈国产化适配 | 45-85万 | 需投入2名高级Java工程师 |
泽优软件 | WordPaster | 全栈国产化适配 | 45-85万 | 需投入1名前端工程师 |
二、技术实现路径
2.1 系统架构设计
2.2 关键技术选型
- 文档解析引擎:Apache POI 5.2 + PDFBox 3.0(需针对龙芯重编译)
- 公式转换:MathJax 3.2 + 自研OMML2LaTeX转换器
- 跨浏览器方案:ES5语法降级 + IE8专用polyfill
三、核心代码实现
3.1 前端插件注册(Vue2环境)
// wordPastePlugin.js
CKEDITOR.plugins.add('wordpaste', {
init: function(editor) {
editor.addCommand('importWord', {
exec: function() {
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = '.doc,.docx,.pdf';
fileInput.onchange = (e) => this._handleFile(e.target.files[0]);
fileInput.click();
}
});
editor.ui.addButton('WordPaste', {
label: '导入文档',
command: 'importWord',
icon: this.path + 'icons/word.png'
});
editor.on('paste', this._handlePasteEvent);
},
_handleFile: function(file) {
const formData = new FormData();
formData.append('file', file);
axios.post('/jsp/upload.jsp', formData, {
headers: {'Content-Type': 'multipart/form-data'}
}).then(response => {
this.insertHtml(response.data.html);
});
}
});
3.2 服务端文档解析(JSP示例)
<%@ page import="org.apache.poi.xwpf.usermodel.*" %>
<%@ page import="com.aliyun.oss.*" %>
<%
// 国密SM3文件校验
String fileHash = SM3Util.hash(request.getPart("file").getInputStream());
// 多格式分流处理
String ext = FilenameUtils.getExtension(filename);
switch(ext) {
case "docx":
XWPFDocument doc = new XWPFDocument(
request.getPart("file").getInputStream()
);
// 表格转换逻辑...
break;
case "pdf":
PDDocument pdf = PDDocument.load(
request.getPart("file").getInputStream()
);
// PDFBox解析处理...
%>
3.3 龙芯平台编译注意事项
# 龙芯MIPS64架构编译命令
./configure --host=mips64el-loongson-linux \
--with-java-home=/opt/loongson/jdk8 \
CFLAGS="-march=loongson3a"
# 生成WPS文档解析的so库
gcc -shared -fPIC wps_parser.c -o libwpsparser.so \
-I/opt/loongnix/office/include
四、信创环境验证报告
4.1 兼容性测试数据
测试环境 | Word样式保留率 | 公式转换成功率 | 100页PPT耗时 |
---|---|---|---|
银河麒麟V10+鲲鹏920 | 98.7% | 95.2% | 4.3s |
统信UOS+飞腾FT-2000/64 | 97.1% | 93.8% | 5.1s |
IE8 on Windows XP | 89.5% | 82.4% | 8.7s |
4.2 典型问题解决方案
- 龙芯WPS字体缺失:预装党政机关GB18030字体包
- IE8内存泄漏:采用分片加载+定时GC策略
- 奇安信浏览器CSS兼容:!important强制样式覆盖
五、商务实施关键点
-
源代码交付标准
- 包含ARM/MIPS架构的Makefile
- 提供国密算法SM4/SM3的实现类
- 附CNAS认证的代码审计报告
-
合同特殊条款
第七条 知识产权条款: - 乙方需转让全部技术专利(含PCT国际专利) - 甲方有权对代码进行军品级安全改造 - 禁止乙方在5年内向同类军工单位提供相似技术
-
交付里程碑
- 第15日:完成在湖南省政务云平台的部署验证
- 第30日:通过军委装备发展部信息安全检测
- 第45日:获得麒麟软件NeoCertify认证
六、后续优化方向
- 二进制差异存储:研发基于rsync的文档增量更新算法
- 涉密内容检测:集成中科院的敏感信息识别引擎
- 多级缓存策略:针对党政机关大文件加载优化
备注:今日与集团CIO汇报后,决定采用"85万买断+分3期支付"的合作模式。突然意识到需要立即启动保密室建设——毕竟这些代码将来可能要运行在南海岛礁的哨所电脑里。明天的党组会上,得重点讨论如何通过等保2.0三级认证的实施方案了。
复制插件
说明:此教程以CKEditor4.x为例,使用其他编辑器的查看对应教程。
将下列文件夹复制到项目中
/WordPaster
/ckeditor/plugins/imagepaster
/ckeditor/plugins/netpaster
/ckeditor/plugins/pptpaster
/ckeditor/plugins/pdfimport
上传插件
上传插件文件夹
将imagepaster,netpaster文件夹上传到现有项目ckeditor/plugins目录中
在工具栏中增加插件按钮
CKEDITOR.config.extraPlugins = 'zycapture,imagepaster,importwordtoimg,netpaster,wordimport,excelimport,pptimport,pdfimport,importword,exportword,importpdf';
引用js
初始化控件
WordPaster.getInstance({
//上传接口:http://www.ncmem.com/doc/view.aspx?id=d88b60a2b0204af1ba62fa66288203ed
PostUrl: api,
//为图片地址增加域名:http://www.ncmem.com/doc/view.aspx?id=704cd302ebd346b486adf39cf4553936
ImageUrl: "",
//设置文件字段名称:http://www.ncmem.com/doc/view.aspx?id=c3ad06c2ae31454cb418ceb2b8da7c45
FileFieldName: "file",
//提取图片地址:http://www.ncmem.com/doc/view.aspx?id=07e3f323d22d4571ad213441ab8530d1
ImageMatch: '',
Cookie: 'PHPSESSID='
});//加载控件
配置上传接口
WordPaster.getInstance({
//上传接口:http://www.ncmem.com/doc/view.aspx?id=d88b60a2b0204af1ba62fa66288203ed
PostUrl:api,
//为图片地址增加域名:http://www.ncmem.com/doc/view.aspx?id=704cd302ebd346b486adf39cf4553936
ImageUrl: "",
//设置文件字段名称:http://www.ncmem.com/doc/view.aspx?id=c3ad06c2ae31454cb418ceb2b8da7c45
FileFieldName: "file",
//提取图片地址:http://www.ncmem.com/doc/view.aspx?id=07e3f323d22d4571ad213441ab8530d1
ImageMatch: '',
Cookie: '<%=clientCookie%>',
event:{
dataReady:function(e){
//e.word,
//e.imgs:tag1,tag2,tag3
console.log(e.imgs)
}
}
});//加载控件
注意
1.如果接口字段名称不是file,请配置FileFieldName。ueditor接口中使用的upfile字段
点击查看详细教程
配置ImageMatch
用于匹配JSON数据,
点击查看详细教程
配置ImageUrl
用于为图片增加域名前缀
点击查看详细教程
配置Session
如果接口有权限验证(登陆验证,SESSION验证),请配置COOKIE。或取消权限验证。
参考:点击查看详细教程
说明
1.请先测试您的接口:点击查看详细教程
功能演示
编辑器界面
导入Word文档,支持doc,docx
导入Excel文档,支持xls,xlsx
粘贴Word
一键粘贴Word内容,自动上传Word中的图片,保留文字样式。
Word转图片
一键导入Word文件,并将Word文件转换成图片上传到服务器中。
导入PDF
一键导入PDF文件,并将PDF转换成图片上传到服务器中。
导入PPT
一键导入PPT文件,并将PPT转换成图片上传到服务器中。
上传网络图片
一键自动上传网络图片,自动下载远程服务器图片,自动上传远程服务器图片