金融风控系统如何通过CKEditor保留PDF加密内容格式?
各位爷们儿,咱西安程序员又双叒叕接到个神仙需求!客户要给CKEditor装个"超级粘贴板",说是要能直接从Word里Ctrl+C/V,连Excel表格、PPT公式、PDF图片都要原样搬过来。这哪是编辑器啊,这分明是要造个"文档搬运工"啊!
不过咱是谁?西安码农界的扛把子!先给各位秀段Vue3的骚操作:
import { ref } from 'vue';
import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
const Editor = ClassicEditor.create(document.createElement('div'), {
extraPlugins: [require('./plugins/wordimport')] // 重点在这儿!
});
const importFromWord = async () => {
// 调起文件选择器
const file = await showFilePicker(['.docx', '.xlsx', '.pdf']);
// 偷偷告诉后端:"快处理这个文件!"
const result = await fetch('/api/import', {
method: 'POST',
body: file
});
// 把处理好的HTML塞进编辑器
const html = await result.text();
Editor.setData(html);
};
后端咱用PHP写个接口(毕竟要兼容IIS嘛):
{
const button = new ButtonView(locale);
button.set({
label: '导入Word',
icon: '📄',
tooltip: true
});
button.on('execute', () => {
// 调起前端文件选择器
const input = document.createElement('input');
input.type = 'file';
input.accept = '.docx,.xlsx,.pdf';
input.onchange = async e => {
const file = e.target.files[0];
const formData = new FormData();
formData.append('file', file);
const response = await fetch('/api/import', {
method: 'POST',
body: formData
});
const html = await response.text();
editor.model.change(writer => {
// 这里要处理CKEditor的模型转换
// 实际代码比这复杂100倍...
});
};
input.click();
});
return button;
});
}
}
module.exports = WordImport;
【技术难点破解】
- 公式处理:用pandoc转换LaTeX到MathML,配合MathJax渲染
- 形状组:先转成SVG再上传,用canvas处理复杂图形
- 微信内容:专门写个爬虫模拟浏览器复制
- 兼容性:测试了200种Word样式,发现最坑的是"宋体+红色下划线"组合
【群主卖瓜时间】
各位老铁,这插件包现在群里限时特惠!原价680,现在加入QQ群223813913:
- 立领1-99元红包(手气最佳经常领88)
- 推荐客户拿20%提成(比如680的项目直接赚136)
- 每周三晚8点技术直播(手把手教你怎么改源码)
- 群文件有完整Demo(含React版本)
上周末刚帮某政府网站搞定这个需求,客户爸爸直接打赏了888!现在躺着赚提成不香吗?群里@群主还能领《CKEditor插件开发秘籍》电子版!
(突然正经)说真的,这需求在政企市场特别吃香,咱们群里有现成的解决方案,比自己开发省90%时间。要赚外快的兄弟赶紧上车,错过这村可没这店了!
复制插件
说明:此教程以CKEditor4.x为例,使用其他编辑器的查看对应教程。
将下列文件夹复制到项目中
/WordPaster
/ckeditor/plugins/imagepaster
/ckeditor/plugins/netpaster
/ckeditor/plugins/pptpaster
/ckeditor/plugins/pdfimport
上传插件

上传插件文件夹
将imagepaster,netpaster文件夹上传到现有项目ckeditor/plugins目录中
在工具栏中增加插件按钮

CKEDITOR.replace('editor1',{
extraPlugins:'zycapture,imagepaster,importwordtoimg,netpaster,wordimport,excelimport,pptimport,pdfimport,importword,exportword,importpdf',
keystrokes:[[CKEDITOR.CTRL + 86/*V*/,'imagepaster']],
on:
{
currentInstance:function()
{
//多个编辑器时为控件设置当前编辑器
WordPaster.getInstance().SetEditor(CKEDITOR.currentInstance);
window.zyCapture.setEditor(this);
window.zyOffice.SetEditor(this);
}
},
//https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-allowedContent
allowedContent:true//不过滤样式
});
引用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转换成图片上传到服务器中。
上传网络图片
一键自动上传网络图片,自动下载远程服务器图片,自动上传远程服务器图片
下载示例
更多推荐


所有评论(0)