不止是安装:用HFish在Windows搭建你的第一个‘诱饵’系统,实战检测内网扫描
2026/5/29 4:10:56
作为北京科技小巨人领军企业的项目负责人,我们在政务信息化建设领域承接了大量高规格项目。近期在政府公文系统、军工档案管理等项目中,客户对内容导入功能提出了更高要求,亟需一套符合信创标准的专业级文档处理解决方案。
tinymce-office-plugin/ ├── plugin.min.js# 插件主文件├── fonts/# 字体映射配置│ └── gb2312.json ├── styles/ │ └── office.css# 样式覆盖└── assets/# 静态资源// main.jsimport{createApp}from'vue'importAppfrom'./App.vue'importtinymcefrom'tinymce/tinymce'importOfficePluginfrom'@tinymce-office/plugin'constapp=createApp(App)// 初始化TinyMCE配置tinymce.init({selector:'#editor',plugins:'officeplugin',toolbar:'officeplugin',office_config:{oss:{provider:'huawei',endpoint:'https://your-obs-endpoint.com',bucket:'your-bucket',getAuthToken:()=>axios.get('/api/obs-token')},fontFallback:{'仿宋_GB2312':['FangSong_GB2312','SimSun']}}})app.use(OfficePlugin)app.mount('#app')@RestController@RequestMapping("/api/office")publicclassOfficeImportController{@AutowiredprivateHuaweiOBSClientobsClient;@PostMapping("/upload")publicResponseEntity>uploadImage(@RequestParam("file")MultipartFilefile,@RequestHeader("X-Office-Token")Stringtoken){// 安全验证if(!jwtUtil.validateToken(token)){returnResponseEntity.status(403).build();}// 文件类型检测StringfileType=FileTypeDetector.detect(file.getBytes());// 生成OBS存储路径StringobjectKey="office/"+UUID.randomUUID()+"."+fileType;// 上传到华为OBSobsClient.putObject(PutObjectArgs.builder().bucket("your-bucket").object(objectKey).stream(file.getInputStream(),file.getSize(),-1).build());// 返回标准响应returnResponseEntity.ok(Map.of("url",obsClient.getObjectUrl(objectKey),"originalName",file.getOriginalFilename()));}}@ServicepublicclassOfficeParserService{publicOfficeParseResultparseWord(FilewordFile){// 使用Apache POI处理文档try(XWPFDocumentdoc=newXWPFDocument(newFileInputStream(wordFile))){Listimages=newArrayList<>();StringBuilderhtmlBuilder=newStringBuilder();// 处理文档内容for(IBodyElementelement:doc.getBodyElements()){if(elementinstanceofXWPFParagraph){// 段落处理逻辑htmlBuilder.append(processParagraph((XWPFParagraph)element,images));}elseif(elementinstanceofXWPFTable){// 表格处理逻辑htmlBuilder.append(processTable((XWPFTable)element,images));}}returnnewOfficeParseResult(htmlBuilder.toString(),images);}}privateStringprocessParagraph(XWPFParagraphpara,Listimages){// 实现段落样式转换}}| 测试维度 | 测试项 | 验证方法 |
|---|---|---|
| 操作系统 | 统信UOS/银河麒麟/中标麒麟 | 实际部署验证 |
| CPU架构 | 龙芯/飞腾/兆芯 | 二进制兼容测试 |
| 浏览器 | IE8+/Chrome/Firefox | 自动化UI测试 |
| 办公软件 | WPS/永中Office | 文档互操作性测试 |
集团级永久授权方案
资质证明材料包
@TestpublicvoidtestComplexDocumentImport(){// 准备测试文档(包含政府公文要素)FiletestFile=newFile("test/政府公文模板.docx");// 执行导入OfficeParseResultresult=officeService.parseDocument(testFile);// 验证关键要素assertTrue(result.getHtml().contains("仿宋_GB2312"));assertEquals(2,result.getTables().size());assertNotNull(result.getImages().get(0).getOssUrl());}| 测试场景 | 规格要求 | 实测数据 |
|---|---|---|
| Word文档解析 | ≤3秒/100页 | 2.8秒/100页 |
| 图片上传吞吐 | ≥200TPS | 230TPS |
| 内存占用峰值 | ≤1GB | 780MB |
| 信创环境启动 | ≤5秒 | 3.2秒 |
知识产权保护
技术风险预案
# 自动降级处理示例defprocess_document(file):try:returnparse_with_poi(file)exceptPoiException:returnparse_with_backup_engine(file)商务风险防范
基于贵司业务规模和技术需求,建议采用"源码买断+长期服务"模式,该方案具有以下核心优势:
成本效益最大化
技术保障完善
实施风险可控
该方案已在中国电子某部委项目中完成全流程验证,可确保在贵司各类政务系统中快速落地应用。
npm install jquery// 引入tinymce-vueimportEditorfrom'@tinymce/tinymce-vue'import{WordPaster}from'../../static/WordPaster/js/w'import{zyOffice}from'../../static/zyOffice/js/o'import{zyCapture}from'../../static/zyCapture/z'//添加导入excel工具栏按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor).importExcel()}varregister$1=function(editor){editor.ui.registry.addButton('excelimport',{text:'',tooltip:'导入Excel文档',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('excelimport',{text:'',tooltip:'导入Excel文档',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('excelimport',function(editor){Buttons.register(editor);});}Plugin();}());//添加word转图片工具栏按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().importWordToImg()}varregister$1=function(editor){editor.ui.registry.addButton('importwordtoimg',{text:'',tooltip:'Word转图片',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('importwordtoimg',{text:'',tooltip:'Word转图片',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('importwordtoimg',function(editor){Buttons.register(editor);});}Plugin();}());//添加粘贴网络图片工具栏按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().UploadNetImg()}varregister$1=function(editor){editor.ui.registry.addButton('netpaster',{text:'',tooltip:'网络图片一键上传',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('netpaster',{text:'',tooltip:'网络图片一键上传',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('netpaster',function(editor){Buttons.register(editor);});}Plugin();}());//添加导入PDF按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().ImportPDF()}varregister$1=function(editor){editor.ui.registry.addButton('pdfimport',{text:'',tooltip:'导入pdf文档',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('pdfimport',{text:'',tooltip:'导入pdf文档',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('pdfimport',function(editor){Buttons.register(editor);});}Plugin();}());//添加导入PPT按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().importPPT()}varregister$1=function(editor){editor.ui.registry.addButton('pptimport',{text:'',tooltip:'导入PowerPoint文档',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('pptimport',{text:'',tooltip:'导入PowerPoint文档',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('pptimport',function(editor){Buttons.register(editor);});}Plugin();}());//添加导入WORD按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor).importWord()}varregister$1=function(editor){editor.ui.registry.addButton('wordimport',{text:'',tooltip:'导入Word文档',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('wordimport',{text:'',tooltip:'导入Word文档',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('wordimport',function(editor){Buttons.register(editor);});}Plugin();}());//添加WORD粘贴按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');varico="http://localhost:8080/static/WordPaster/plugin/word.png"functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor).PasteManual()}varregister$1=function(editor){editor.ui.registry.addButton('wordpaster',{text:'',tooltip:'Word一键粘贴',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('wordpaster',{text:'',tooltip:'Word一键粘贴',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('wordpaster',function(editor){Buttons.register(editor);});}Plugin();}());在线代码:
// 插件plugins:{type:[String,Array],// default: 'advlist anchor autolink autosave code codesample colorpicker colorpicker contextmenu directionality emoticons fullscreen hr image imagetools importcss insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textcolor textpattern visualblocks visualchars'default:'autoresize code autolink autosave image imagetools paste preview table powertables'},点击查看在线代码
// 初始化WordPaster.getInstance({// 上传接口:http://www.ncmem.com/doc/view.aspx?id=d88b60a2b0204af1ba62fa66288203edPostUrl:'http://localhost:8891/upload.aspx',// 为图片地址增加域名:http://www.ncmem.com/doc/view.aspx?id=704cd302ebd346b486adf39cf4553936ImageUrl:'http://localhost:8891{url}',// 设置文件字段名称:http://www.ncmem.com/doc/view.aspx?id=c3ad06c2ae31454cb418ceb2b8da7c45FileFieldName:'file',// 提取图片地址:http://www.ncmem.com/doc/view.aspx?id=07e3f323d22d4571ad213441ab8530d1ImageMatch:''})在编辑器中增加功能按钮
一键粘贴Word内容,自动上传Word中的图片,保留文字样式。
一键导入Word文件,并将Word文件转换成图片上传到服务器中。
一键导入PDF文件,并将PDF转换成图片上传到服务器中。
一键导入PPT文件,并将PPT转换成图片上传到服务器中。
一键自动上传网络图片。
点击下载完整示例