You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中@ckeditor/ckeditor5-editor-classic配置及格式保留问题求助

React中CKEditor配置方案(保留基础功能+Office粘贴样式+内置字体)

1. 替换依赖包

先卸载预构建的@ckeditor/ckeditor5-build-classic,安装核心编辑器及所需插件(包含原build-classic的全部基础插件,新增粘贴Office和字体管理插件):

npm uninstall @ckeditor/ckeditor5-build-classic
npm install @ckeditor/ckeditor5-editor-classic @ckeditor/ckeditor5-essentials @ckeditor/ckeditor5-paragraph @ckeditor/ckeditor5-basic-styles @ckeditor/ckeditor5-heading @ckeditor/ckeditor5-list @ckeditor/ckeditor5-indent @ckeditor/ckeditor5-link @ckeditor/ckeditor5-image @ckeditor/ckeditor5-table @ckeditor/ckeditor5-media-embed @ckeditor/ckeditor5-paste-from-office @ckeditor/ckeditor5-font

2. 完整React组件配置

创建CKEditor组件,组装插件并配置粘贴、字体功能:

import React, { useState } from 'react';
import { ClassicEditor } from '@ckeditor/ckeditor5-editor-classic';
import { CKEditor } from '@ckeditor/ckeditor5-react';
// 导入所有必需插件
import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';
import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold';
import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic';
import Underline from '@ckeditor/ckeditor5-basic-styles/src/underline';
import Strikethrough from '@ckeditor/ckeditor5-basic-styles/src/strikethrough';
import Heading from '@ckeditor/ckeditor5-heading/src/heading';
import List from '@ckeditor/ckeditor5-list/src/list';
import Indent from '@ckeditor/ckeditor5-indent/src/indent';
import Link from '@ckeditor/ckeditor5-link/src/link';
import Image from '@ckeditor/ckeditor5-image/src/image';
import ImageToolbar from '@ckeditor/ckeditor5-image/src/imagetoolbar';
import ImageCaption from '@ckeditor/ckeditor5-image/src/imagecaption';
import ImageStyle from '@ckeditor/ckeditor5-image/src/imagestyle';
import ImageResize from '@ckeditor/ckeditor5-image/src/imageresize';
import Table from '@ckeditor/ckeditor5-table/src/table';
import TableToolbar from '@ckeditor/ckeditor5-table/src/tabletoolbar';
import MediaEmbed from '@ckeditor/ckeditor5-media-embed/src/mediaembed';
import PasteFromOffice from '@ckeditor/ckeditor5-paste-from-office/src/pastefromoffice';
import Font from '@ckeditor/ckeditor5-font/src/font';

// 导入编辑器样式
import '@ckeditor/ckeditor5-theme-lark/theme.css';

const CKEditorComponent = () => {
  const [editorContent, setEditorContent] = useState('');

  // 编辑器核心配置
  const editorConfig = {
    // 加载所有插件(覆盖原build-classic的全部功能)
    plugins: [
      Essentials, Paragraph, Bold, Italic, Underline, Strikethrough,
      Heading, List, Indent, Link, Image, ImageToolbar, ImageCaption,
      ImageStyle, ImageResize, Table, TableToolbar, MediaEmbed,
      PasteFromOffice, Font
    ],
    // 工具栏布局(与build-classic一致,新增字体控制项)
    toolbar: [
      'heading', '|',
      'bold', 'italic', 'underline', 'strikethrough', '|',
      'fontFamily', 'fontSize', 'fontColor', 'fontBackgroundColor', '|',
      'bulletedList', 'numberedList', 'indent', 'outdent', '|',
      'link', 'image', 'insertTable', 'mediaEmbed', '|',
      'undo', 'redo'
    ],
    // Office粘贴样式保留配置
    pasteFromOffice: {
      preserveStyles: true // 保留字体大小、颜色、加粗等样式,生成对应HTML标签
    },
    // 内置字体选项(可根据项目需求自定义)
    fontFamily: {
      options: [
        'default',
        'Arial, Helvetica, sans-serif',
        'Georgia, serif',
        'Tahoma, Geneva, sans-serif',
        'Times New Roman, Times, serif',
        'Verdana, Geneva, sans-serif'
      ],
      supportAllValues: true // 允许用户输入自定义字体(可选)
    },
    // 字体大小选项
    fontSize: {
      options: [9, 11, 13, 'default', 17, 19, 21]
    },
    // 图片工具栏配置(与build-classic一致)
    image: {
      toolbar: [
        'imageTextAlternative', 'toggleImageCaption', 'imageStyle:inline',
        'imageStyle:block', 'imageStyle:side'
      ]
    },
    // 表格工具栏配置(与build-classic一致)
    table: {
      contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells']
    }
  };

  return (
    <div className="ck-editor-wrapper">
      <CKEditor
        editor={ClassicEditor}
        config={editorConfig}
        data={editorContent}
        onChange={(event, editor) => {
          setEditorContent(editor.getData());
        }}
      />
    </div>
  );
};

export default CKEditorComponent;

3. 关键配置说明

  • 粘贴样式保留:通过pasteFromOffice.preserveStyles: true开启Office粘贴的样式保留,会自动将Office中的格式转换为对应的HTML内联样式或标签,无需额外处理字体识别。
  • 内置字体:fontFamily.options定义了项目提供的可选字体,用户可直接选择,也可通过supportAllValues开启自定义字体输入。
  • 功能对齐:插件列表和工具栏布局完全对齐原@ckeditor/ckeditor5-build-classic的默认配置,确保基础功能无缺失。

内容的提问来源于stack exchange,提问作者Hesam Feizollahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:24:54