CKEditor5 支持 WPS 贴贴文字图片,默认贴贴进入空白空格

简介: CKEditor5 支持 WPS 贴贴文字图片,默认贴贴进入空白空格

一、简介

  • 现在国内用 WPS 的人很多,有时候文档编辑好了,想直接贴贴到 CKEditor 编辑中,发现贴贴进去之后都是空格符号,显示空白的,无法识别内容,这个是 WPSOffice 的格式问题。
  • 想要支持 WPS 解析,那就必须要会 自定义编辑器自定义编辑器 步骤很简单并不难,然后官方提供了 Office 的解析插件 @ckeditor/ckeditor5-paste-from-office,现在只需要在这个插件的基础上加上 WPS 的解析代码,然后打包生成一个自定义编辑器,导入使用即可。

二、操作步骤

  • 按照下面调整完成之后, WPSOffice 都可以支持贴贴。
  • 在自定义编辑过程中,看项目中是否已经安装好了 @ckeditor/ckeditor5-paste-from-office,一般默认编辑器是有的,所以直接去找到 node_modules/@ckeditor/ckeditor5-paste-from-office 文件夹即可。
$ npm install --save-dev @ckeditor/ckeditor5-paste-from-office
  • 打开 ckeditor5-paste-from-office/src/filters 文件夹,调整过滤代码。


  • space.js 文件调整,这个是支持文字的。
export function normalizeSpacerunSpans( htmlDocument ) {
    htmlDocument.querySelectorAll( 'span[style*=spacerun]' ).forEach( el => {
        const innerTextLength = el.innerText.length || 0;
        el.innerHTML = Array( innerTextLength + 1 ).join( '\u00A0 ' ).substr( 0, innerTextLength );
    } );
}
  • 上面是原代码,调整为下面的代码,其实就是加了个 if 判断,其他代码没变。
export function normalizeSpacerunSpans( htmlDocument ) {
    htmlDocument.querySelectorAll( 'span[style*=spacerun]' ).forEach( el => {
        // 针对 wps 添加的判断
        if (el.childNodes[ 0 ].data) {
            const innerTextLength = el.innerText.length || 0;
            el.innerHTML = Array( innerTextLength + 1 ).join( '\u00A0 ' ).substr( 0, innerTextLength );
        }
    });
}
  • image.js 文件调整,这个是支持 WPS 图片的。
    只需要添加 if (!images) {} 这段代码放到 if (images) {} 之前即可。
function extractImageDataFromRtf( rtfData ) {
    if ( !rtfData ) {
        return [];
    }
    const regexPictureHeader = /{\\pict[\s\S]+?\\bliptag-?\d+(\\blipupi-?\d+)?({\\\*\\blipuid\s?[\da-fA-F]+)?[\s}]*?/;
    const regexPicture = new RegExp( '(?:(' + regexPictureHeader.source + '))([\\da-fA-F\\s]+)\\}', 'g' );
    const images = rtfData.match( regexPicture );
    const result = [];
    // 针对 wps 添加的判断
    if (!images) {
        regexPictureHeader = /{\\pict[\s\S]+?(\\pngblip-?\d+)?(\\wmetafile8-?\d+)?{\\\*\\blipuid\s?[\da-fA-F]+[\s}]*?/;
        regexPicture = new RegExp( '(?:(' + regexPictureHeader.source + '))([\\da-fA-F\\s]+)\\}', 'g' );
        images = rtfData.match( regexPicture );
    }
    if ( images ) {
        for ( const image of images ) {
            let imageType = false;
            if ( image.includes( '\\pngblip' ) ) {
                imageType = 'image/png';
            } else if ( image.includes( '\\jpegblip' ) ) {
                imageType = 'image/jpeg';
            }
            if ( imageType ) {
                result.push( {
                    hex: image.replace( regexPictureHeader, '' ).replace( /[^\da-fA-F]/g, '' ),
                    type: imageType
                } );
            }
         }
    }
    return result;
}


相关文章
|
1月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
38734 72
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
API 对象存储 Java
实现从oss(阿里云)服务器以附件形式下载文件(含批量下载)
实现从oss(阿里云)服务器以附件形式下载文件(含批量下载) 笔者在项目中写一个从阿里云服务器上面以附件形式下载文件的接口时,遇到了问题,网上搜索无任何相关的解决方案,最后通过通过自己查阅API文档,再结合自己的经验,实现了下载功能。
7293 0
|
1月前
|
人工智能 Linux API
阿里云无影云电脑秒级部署OpenClaw教程:+千问Qwen3.6-Plus/Coding Plan API配置指南
2026年,OpenClaw(原Clawdbot)凭借本地数据可控、跨平台兼容、AI自动化能力全面的优势,成为个人与团队搭建智能助手的首选框架。阿里云无影云电脑提供预装OpenClaw的专属镜像,实现秒级启动、图形化操作、零命令门槛部署,搭配阿里云千问Qwen3.6-Plus高性能模型或免费Coding Plan API,即可拥有7×24小时稳定运行的AI自动化服务。同时支持本地MacOS、Linux、Windows11全平台部署,满足隐私与离线需求。本文全程提供可直接复制的代码命令,从无影云电脑部署、本地多系统安装、大模型API配置到常见问题排查,形成完整闭环,零基础用户也能快速完成全流程搭
940 3
|
虚拟化 Windows
M1/M2 Pro VMware Fusion虚拟机安装Win11教程(超详细) 3
M1/M2 Pro VMware Fusion虚拟机安装Win11教程(超详细)
4088 1
|
人工智能 安全 数据安全/隐私保护
克劳德/claude国内能用吗?回答是: 能用! 教你两种使用方法!
Claude AI 是一款强大的对话式 AI 工具 🤖,但由于网络限制等原因 🚧,国内用户访问 Claude 的官方网站或使用集成 Claude 的第三方应用可能会遇到困难
|
JSON JavaScript 前端开发
vue如何更好的解决浏览器兼容问题
vue如何更好的解决浏览器兼容问题
586 1
|
存储 安全 前端开发
在前端开发中需要考虑的常见web安全问题和攻击原理以及防范措施
在前端开发中需要考虑的常见web安全问题和攻击原理以及防范措施
1933 0
|
存储 开发框架 JavaScript
程序与技术分享:CKEditor与CKFinder使用
程序与技术分享:CKEditor与CKFinder使用
751 0
|
JavaScript
Vue CKEditor5 自定义编辑器详细流程(插件安装使用流程)
Vue CKEditor5 自定义编辑器详细流程(插件安装使用流程)
1944 0
|
JavaScript
http-server实现本地服务器
使用Node.js的http-server模块创建本地服务器:先确保安装Node.js和npm,然后在命令行中安装http-server模块,运行`npm install http-server -g`。接着,切换到目标文件夹并启动服务器,输入`http-server`或带端口号的`http-server -p 3000`。最后,通过`http://localhost:8080`(或指定端口)访问服务器。