2023年XX月XX日 | 政务项目富文本编辑器增强方案实施报告


一、需求分析与技术选型

1.1 核心诉求
  • 政企合规要求:必须通过信创适配认证(麒麟软件认证+龙芯生态认证)
  • 老旧系统兼容:IE8及国产浏览器(奇安信/红莲花)全支持
  • 文档保真度:需完美还原政府公文格式(GB2312字体、红头文件版式等)
  • 安全架构:文件传输需使用国密SM4加密,存储隔离需符合等保2.0三级要求
1.2 技术方案对比
方案优点缺点
Microsoft 365功能齐全不支持私有部署
WPS 365功能齐全不支持私有部署
永中Office功能齐全拒绝提供产品源代码
腾讯文档功能齐全不支持私有部署
钉钉文档功能齐全不支持私有部署
飞书功能齐全不支持私有部署
石墨文档功能齐全拒绝提供产品源代码
UEditor插件开发无缝集成现有系统公式支持需二次开发
定制商业SDK开箱即用龙芯适配不全
开源改造成本低安全审计风险高
WordPaster完全开源(下载源码)
功能齐全终端安装插件

决策:采用WordPaster 插件开发+源码买断混合模式,采购武汉某厂商的文档解析引擎(含源码)。


二、系统架构设计

2.1 技术栈拓扑
AJAX
SM4加密
JDBC
Vue2前端
JSP服务层
阿里云OSS
MySQL主从
信创存储灾备节点
2.2 信创适配矩阵
环境关键问题解决方案
银河麒麟v10+飞腾字体渲染错位预装方正GB2312字体包
龙芯LoongArch+统信UOSWASM兼容性定制LLVM编译版本
IE8+Windows XPActiveX控件拦截部署本地签名证书

三、关键代码实现

3.1 前端插件核心(Vue2+UEditor)
// ueditor-gov-plugin.js
UE.registerUI('officeimport', function(editor) {
  // 创建公文导入按钮
  var btn = new UE.UI.Button({
    name: 'gov-import',
    title: '红头文件导入',
    onclick: function() {
      // 调用国产化文件选择器
      const fileInput = document.createElement('input');
      fileInput.type = 'file';
      fileInput.accept = '.docx,.xlsx,.pptx,.pdf';
      fileInput.onchange = (e) => {
        const file = e.target.files[0];
        // 国密加密传输
        const encrypted = SM4Encrypt(file);
        axios.post('/gov/upload', encrypted, {
          headers: { 'X-Browser-Type': detectBrowser() } // 区分IE8特殊处理
        }).then(res => {
          editor.execCommand('insertHtml', res.data.html);
        });
      };
      fileInput.click();
    }
  });
  return btn;
});

// 国产浏览器检测
function detectBrowser() {
  if (window.ActiveXObject) return 'ie';
  if (navigator.userAgent.includes('QAXSafe')) return 'qax'; 
  if (navigator.userAgent.includes('Loongson')) return 'loong';
}
3.2 后端文件处理(JSP+阿里云OSS)
<%@ page import="com.aliyun.oss.OSSClient" %>
<%@ page import="cn.gov.sm4.SM4Util" %>

<%-- 文件上传处理器 --%>
<%
  try {
    // 国密解密
    byte[] encrypted = request.getInputStream().readAllBytes();
    SM4Util sm4 = new SM4Util(System.getenv("SM4_KEY")); 
    byte[] decrypted = sm4.decrypt(encrypted);

    // 存储到阿里云OSS
    OSSClient oss = new OSSClient(
      "https://oss-cn-hangzhou.aliyuncs.com",
      System.getenv("OSS_AK"),
      System.getenv("OSS_SK")
    );
    String objectName = "redhead/" + UUID.randomUUID() + ".docx";
    oss.putObject("gov-bucket", objectName, new ByteArrayInputStream(decrypted));

    // 返回HTML片段(保留公文格式)
    out.print(String.format(
      "" +
      "" +
      "文件已加密存储", 
      objectName
    ));
  } catch (Exception e) {
    response.sendError(500, "公文处理失败:" + e.getMessage());
  }
%>

四、商务实施要点

4.1 采购条款
  • 买断费用:¥95万(含源代码及龙芯专项适配补丁)
  • 交付物清单
    • 中央网信办信创适配证书
    • 3家部委级单位使用证明
    • 等保2.0三级测评报告
  • 违约条款:每项信创环境不达标扣款10万元
4.2 部署流程
  1. 开发阶段:厂商驻场1周完成环境适配
  2. 测试阶段:在XX市委内网完成压力测试(1000并发文档导入)
  3. 上线阶段:通过麒麟软件商店分发安装包

五、风险控制

风险项等级应对措施
龙芯性能不足采购数学加速卡(预算¥20万)
公文样式失真开发样式强制校验工具
IE8内存泄漏每2小时自动重启编辑器实例

专项保障:建立政企项目应急响应小组(7×24小时待命)。

(注:所有代码需在信创环境中使用JDK1.8_龙芯定制版编译,敏感配置已脱敏)


附件

  1. [XX部委项目验收报告.pdf]
  2. [麒麟软件兼容性证书.jpg]
  3. [SM4算法国密认证文件.zip]

(报告人:XXX 政企事业部技术总监)

复制插件目录

WordPaster插件目录

引入插件文件


	
	UEditor 1.4.3.3示例
	
    
	
	
    
    
    
    
    
    
	
    

注意:不要重复引入jquery,如果您的项目已经引入了jq,则不用再引入jq-1.4
image

在工具栏中增加插件按钮

//工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的重新定义
    toolbars: [
      [
        "fullscreen",
        "source",
        "|",
        "zycapture",
        "|",
        "wordpaster","importwordtoimg","netpaster","wordimport","excelimport","pptimport","pdfimport",
        "|",
        "importword","exportword","importpdf"
      ]
    ]

初始化控件

image

        var pos = window.location.href.lastIndexOf("/");
        var api = [
            window.location.href.substr(0, pos + 1),
            "asp/upload.asp"
        ].join("");
        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: ''			
        });//加载控件

注意

如果接口字段名称不是file,请配置FileFieldName。ueditor接口中使用的upfile字段
image
点击查看详细教程

配置ImageMatch

匹配图片地址,如果服务器返回的是JSON则需要通过正则匹配

ImageMatch: '',

点击参考链接

配置ImageUrl

为图片地址增加域名,如果服务器返回的图片地址是相对路径,可通过此属性添加自定义域名。

ImageUrl: "",

点击查看详细教程

配置SESSION

如果接口有权限验证(登陆验证,SESSION验证),请配置COOKIE。或取消权限验证。
参考:http://www.ncmem.com/doc/view.aspx?id=8602DDBF62374D189725BF17367125F3

效果

编辑器界面

image

导入Word文档,支持doc,docx

粘贴Word和图片

导入Excel文档,支持xls,xlsx

粘贴Word和图片

粘贴Word

一键粘贴Word内容,自动上传Word中的图片,保留文字样式。
粘贴Word和图片

Word转图片

一键导入Word文件,并将Word文件转换成图片上传到服务器中。
导入Word转图片

导入PDF

一键导入PDF文件,并将PDF转换成图片上传到服务器中。
导入PDF转图片

导入PPT

一键导入PPT文件,并将PPT转换成图片上传到服务器中。
导入PPT转图片

上传网络图片

自动上传网络图片

下载示例

点击下载完整示例

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐