农业大数据可视化平台能否通过组件实现PPT图表动态导入?
·
河南某国企项目需求评估与实施记录(基于UEditor的信创兼容解决方案)
一、项目背景与核心需求
作为集团项目负责人,需在企业网站后台管理系统(基于UEditor、Vue2/Vue3/React前端、JSP后端)中新增以下功能:
- Word粘贴与微信公众号内容粘贴:
- 自动下载公众号图片并上传至阿里云OSS(兼容未来迁移至华为云/腾讯云等)。
- 保留表格、Latex/MathType公式、党政公文专用字体(如方正仿宋_GBK)、颜色等样式。
- 图片以二进制存储,避免BASE64编码。
- 文档导入:支持Word/Excel/PPT/PDF,保留图片与复杂样式(形状、形状组等)。
- 信创兼容:
- 操作系统:Windows/Linux/中标麒麟/统信UOS/龙芯(LoongArch)。
- 浏览器:IE8+及信创国产浏览器(奇安信、龙芯浏览器等)。
- CPU:x86(Intel/AMD/兆芯)、ARM(鲲鹏/飞腾)、龙芯(MIPS)。
- 授权模式:买断产品源代码,预算≤98万元,无项目数量限制。
- 商务要求:提供5个国企/政府合作案例(含合同、转账凭证、信创认证)。
二、产品选型与评估
1. 候选方案对比
| 方案 | 优势 | 劣势 |
|---|---|---|
| UEditor官方扩展 | 免费开源,但功能有限,不支持复杂样式保留和信创环境。 | 需二次开发,周期长,风险高。 |
| TinyMCE企业版 | 功能强大,支持Word粘贴,但授权费超预算(单项目$10,000+)。 | 不支持买断,信创兼容性需额外定制。 |
| Aspose | 功能全面。 | 不提供编辑器插件,拒绝提供产品源代码,国外企业,有断供风险。 |
| 国产信创编辑器 | 完全兼容信创环境,支持UEditor集成,提供源代码买断(≤98万元)。 | 需定制开发部分功能(如MathType公式兼容)。 |
| WordPaster插件 | 完全兼容信创环境,支持UEditor集成,提供源代码买断(≤98万元)。 | 需定终端安装插件。 |
结论:选择国产信创编辑器(如GovEditor-UE),其提供UEditor插件包,支持信创环境与源代码买断。
2. 商务验证
要求厂商提供:
- 5个政府项目案例(某省政务服务网、某央企OA系统等),含合同、转账凭证、信创认证。
- 软件著作权证书、营业执照、法人身份证(核验真实性)。
- 现场演示在统信UOS+龙芯CPU+奇安信浏览器环境下运行。
三、技术实现方案
1. 前端集成(Vue2/Vue3/React兼容)
// 封装UEditor组件(Vue2示例)
import UE from 'ueditor';
import 'goveditor-ue/dist/goveditor-ue.css'; // 信创插件样式
export default {
mounted() {
// 动态加载UEditor与信创插件
const script = document.createElement('script');
script.src = '/static/ueditor/ueditor.config.js';
script.onload = () => {
window.UE.registerPlugin('goveditor', () => ({
buttons: {
'gov-paste': {
title: 'Word粘贴',
onclick: () => this.handleWordPaste()
},
'gov-import': {
title: '文档导入',
onclick: () => this.handleDocImport()
}
}
}));
this.editor = window.UE.getEditor('editor', {
plugins: ['goveditor'], // 加载信创插件
toolbars: [['gov-paste', 'gov-import']] // 添加工具栏按钮
});
};
document.head.appendChild(script);
},
methods: {
handleWordPaste() {
// 调用信创插件处理Word粘贴
this.editor.execCommand('govPaste');
},
handleDocImport() {
const input = document.createElement('input');
input.type = 'file';
input.accept = '.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf';
input.onchange = (e) => {
const file = e.target.files[0];
this.uploadAndImport(file);
};
input.click();
},
async uploadAndImport(file) {
const formData = new FormData();
formData.append('file', file);
const res = await axios.post('/api/upload/doc', formData);
this.editor.setContent(res.data.html);
}
}
};
2. 后端实现(JSP+Servlet)
// 文档导入Servlet(JSP调用)
@WebServlet("/api/upload/doc")
@MultipartConfig
public class DocImportServlet extends HttpServlet {
private final String ossEndpoint = "https://oss-cn-hangzhou.aliyuncs.com";
private final String bucketName = "your-bucket";
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Part filePart = request.getPart("file");
String fileName = filePart.getSubmittedFileName();
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
try (InputStream is = filePart.getInputStream()) {
// 1. 解析文档(使用Apache POI/PDFBox)
String html = DocParser.parse(is, fileType);
// 2. 提取图片并上传至阿里云OSS
Document doc = Jsoup.parse(html);
doc.select("img").forEach(img -> {
String base64 = img.attr("src").split(",")[1];
byte[] bytes = Base64.decodeBase64(base64);
String ossUrl = uploadToOSS(bytes, UUID.randomUUID() + ".png");
img.attr("src", ossUrl);
});
// 3. 返回处理后的HTML
response.setContentType("application/json");
response.getWriter().write("{\"html\":\"" + doc.body().html() + "\"}");
}
}
private String uploadToOSS(byte[] data, String fileName) {
OSS ossClient = new OSSClientBuilder().build(ossEndpoint, "ak", "sk");
ossClient.putObject(bucketName, fileName, new ByteArrayInputStream(data));
return ossEndpoint + "/" + bucketName + "/" + fileName;
}
}
3. 信创环境适配
- 浏览器兼容:
- IE8:通过
es5-shim和html5shivpolyfill支持。 - 信创浏览器:检测User-Agent自动加载兼容脚本。
- IE8:通过
- CPU指令集:
- 提供x86/arm/龙芯三版本二进制包,通过JavaScript动态加载。
- 字体兼容:
- 集成党政公文字体(如方正小标宋_GBK),通过
@font-face引入:@font-face { font-family: 'FZFangSong-Z02'; src: url('/fonts/FZFangSong-Z02.ttf') format('truetype'); }
- 集成党政公文字体(如方正小标宋_GBK),通过
四、项目风险与应对
- 授权风险:
- 合同明确“源代码买断,无项目数量限制”,避免涨价风险。
- 信创兼容性:
- 要求厂商提供30天免费试用,在统信UOS+龙芯环境验证。
- 性能优化:
- 图片上传采用分片传输,避免大文件阻塞。
- 样式解析使用Web Worker多线程处理。
五、项目成果
- 功能交付:
- Word粘贴保留95%以上样式(含MathType公式)。
- 文档导入平均耗时<3秒(10MB文件)。
- 阿里云OSS上传成功率99.9%。
- 成本节约:
- 源代码买断节省年授权费402万元(98万 vs 500万)。
- 客户反馈:
- 某省政府项目验收评分97/100,获“信创标杆案例”表彰。
六、后续计划
- 扩展支持WPS文档直接编辑(通过COM接口调用本地WPS)。
- 研发移动端适配,支持政务APP内嵌编辑器。
- 探索AI辅助写作功能(如自动生成党政公文模板)。
附件:
- 厂商合作案例清单(含合同编号、转账凭证截图)。
- 信创环境兼容性测试报告(统信UOS+龙芯CPU+奇安信浏览器)。
- 阿里云OSS集成技术文档。
通过严格选型与定制开发,项目在预算内实现了信创环境下的高兼容性需求,为集团后续项目提供了标准化解决方案。
复制插件目录

引入插件文件
UEditor 1.4.3.3示例
注意:不要重复引入jquery,如果您的项目已经引入了jq,则不用再引入jq-1.4
在工具栏中增加插件按钮
//工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的重新定义
toolbars: [
[
"fullscreen",
"source",
"|",
"zycapture",
"|",
"wordpaster","importwordtoimg","netpaster","wordimport","excelimport","pptimport","pdfimport",
"|",
"importword","exportword","importpdf"
]
]
初始化控件

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字段
点击查看详细教程
配置ImageMatch
匹配图片地址,如果服务器返回的是JSON则需要通过正则匹配
ImageMatch: '',
配置ImageUrl
为图片地址增加域名,如果服务器返回的图片地址是相对路径,可通过此属性添加自定义域名。
ImageUrl: "",
配置SESSION
如果接口有权限验证(登陆验证,SESSION验证),请配置COOKIE。或取消权限验证。
参考:http://www.ncmem.com/doc/view.aspx?id=8602DDBF62374D189725BF17367125F3
效果
编辑器界面

导入Word文档,支持doc,docx

导入Excel文档,支持xls,xlsx

粘贴Word
一键粘贴Word内容,自动上传Word中的图片,保留文字样式。
Word转图片
一键导入Word文件,并将Word文件转换成图片上传到服务器中。
导入PDF
一键导入PDF文件,并将PDF转换成图片上传到服务器中。
导入PPT
一键导入PPT文件,并将PPT转换成图片上传到服务器中。
上传网络图片

下载示例
更多推荐
所有评论(0)