此插件仅作为 付费附加组件 提供,需订阅 TinyMCE 订阅 后使用。

导出到 Microsoft Word 功能会收集通过 tinymce.editor.getContent() 方法生成的 HTML,并将其与编辑器默认内容样式及插件配置中提供的样式合并。合并后的内容和样式将由内置的服务器端转换器服务处理,该服务可自行托管或基于云端。处理完成后,系统将生成 Word 文件并返回到用户的浏览器,以便用户以 Word 格式保存到本地磁盘或驱动器。

交互示例

HTML

<textarea id="exportword">
  <h1>Streamline - 新一代学习管理系统(LMS)</h1>
  <p>本文档全面概述了Streamline学习管理系统(LMS)项目。</p>

  <figure class="image">
    <img src="https://images.unsplash.com/photo-1522199755839-a2bacb67c546?q=80&amp;w=2072&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" 
          alt="笔记本电脑置于光洁木桌上,旁边有一个青铜色杯子,营造出温馨的工作空间氛围" width="573" height="429">
    <figcaption>优雅的工作空间:笔记本电脑置于光洁木桌上,旁边有一个青铜色杯子,营造出温馨且富有成效的氛围。</figcaption>
  </figure>
  
  <p>照片作者:<a href="https://unsplash.com/@anete_lusina">Anete Lūsiņa</a>,来自<a href="https://unsplash.com">Unsplash</a></p>

  <h2>项目目标</h2>
  <p>Streamline旨在通过为教育者和学习者提供强大且用户友好的平台,彻底变革在线学习。主要目标包括:</p>
  <ul>
    <li><strong>赋能教育者</strong>:提供直观的内容创建、课程管理和学生评估工具。</li>
    <li><strong>提升学生的学习体验</strong>:通过生动的内容交付、互动功能和个性化学习路径实现。</li>
    <li><strong>提高可访问性和可扩展性</strong>:以满足多样化的学习需求,并支持不断增长的用户群体。</li>
  </ul>
  
  <h2>系统功能</h2>
  <p>Streamline旨在通过一套全面的功能来丰富学习过程:</p>
  <ul>
    <li><strong>内容管理系统(CMS)</strong>:直观的界面使教育者能够创建和上传各种学习资料,包括视频、文档、演示文稿和测验。</li>
    <li><strong>课程管理工具</strong>:以清晰的目标构建课程,组织内容模块,并有效管理学生注册。</li>
    <li><strong>互动学习活动</strong>:包括游戏化、讨论论坛、协作作业等,以保持学生的参与度。</li>
    <li><strong>评估与分析</strong>:用于创建测验、跟踪学生进度、生成报告和确定改进领域的工具。</li>
    <li><strong>个性化学习路径</strong>:机器学习算法根据学生的进度和需求提供定制的内容推荐。</li>
  </ul>
  
  <h3>表1:Streamline - 目标用户群体</h3>
  <table style="border-collapse: collapse; width: 100%;" border="1">
    <thead>
      <tr>
        <th style="text-align: left;">用户群体</th>
        <th style="text-align: left;">优势</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><strong>教育者</strong></td>
        <td>便捷的内容创建、高效的课程管理和有价值的学生洞察。</td>
      </tr>
      <tr>
        <td><strong>学习者</strong></td>
        <td>生动的学习体验、个性化学习路径和互动协作。</td>
      </tr>
      <tr>
        <td><strong>管理员</strong></td>
        <td>可扩展的平台管理、用户访问控制和全面的报告工具。</td>
      </tr>
    </tbody>
  </table>
  
  <h2>技术栈</h2>
  <p>Streamline将利用强大的技术栈来确保性能、可扩展性和安全性:</p>
  <ul>
    <li><strong>前端</strong>:ReactJS,用于构建响应式且用户友好的界面。</li>
    <li><strong>后端</strong>:Node.js,用于高效的服务器端操作。</li>
    <li><strong>数据库</strong>:MongoDB,用于灵活且可扩展的数据存储。</li>
    <li><strong>云平台</strong>:Amazon Web Services(AWS),用于可靠的托管和基础设施。</li>
  </ul>
  
  <h2>项目时间线</h2>
  <ul>
    <li><strong>阶段1(2个月)</strong>:系统设计、核心功能开发和前端原型创建。</li>
    <li><strong>阶段2(3个月)</strong>:集成高级功能,如个性化学习和评估工具。</li>
    <li><strong>阶段3(1个月)</strong>:严格的测试、错误修复和UI优化。</li>
    <li><strong>阶段4(持续进行)</strong>:部署、用户反馈收集和持续的迭代开发。</li>
  </ul>
  
  <blockquote>
    <p><em>此时间线为初步计划,可能会有变动。</em></p>
  </blockquote>
  
  <h2>结论</h2>
  <p>Streamline LMS有望成为在线教育领域的变革者。通过赋能教育者和提升学生体验,它旨在让所有人都能获得有效且易于访问的学习资源。</p>
</textarea>

JS

tinymce.init({
  selector: 'textarea#exportword',
  height: '800px',
  plugins: [
    "exportword", "advlist", "anchor", "autolink", "charmap", "code", "fullscreen",
    "help", "image", "insertdatetime", "link", "lists", "media",
    "preview", "searchreplace", "table", "visualblocks",
  ],
  toolbar: "undo redo | exportword | styles | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
  exportword_converter_options: {
    document: {
      size: 'A4',
      margins: {
        top: "1in",
        bottom: "1in",
        left: "1in",
        right: "1in"
      }
    },
    watermark: {
      source: 'http://moxiecode.cachefly.net/tinymce/v9/images/logo.png',
      washout: true
    },
  }
});
导出到 Word 的已知问题
  • 生成的 .docx 文件可能与旧版 Word 不完全兼容。

  • Enhanced Media Embed 不会包含在导出的文档中,导致控制台出现错误 "The Export to Word plugin requires the exportword_service_url to be configured"。

使用 Tiny Cloud 服务的基本设置

要将 Export to Word 插件添加到编辑器,请在编辑器配置的 plugins 选项中添加 exportword。

例如:

tinymce.init({
  selector: 'textarea',
  plugins: 'exportword',
  toolbar: 'exportword',
  // Required for the cloud-based Export to Word plugin with Tiny Cloud
  // Create a JWT key in the Customer Portal for trial functionality to enable watermark-free exports during the trial period
  exportword_token_provider: () => {
    return fetch('http://localhost:3000/jwt', { // specify your token endpoint
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
    }).then(response => response.json());
  },
});

有关如何使用 module bundlers 打包此插件的信息,请参阅 Bundling TinyMCE - Overview。

有关 exportword_token_provider 选项的更多信息,请参阅 exportword_token_provider

使用 Tiny Cloud 服务时,Export to Word 插件需要 JWT 认证。

认证设置:

  1. 在客户门户中创建 JWT 密钥

  2. 配置 exportword_token_provider 选项以指定获取 JWT token 的端点

有关如何设置 Export to Word 的 JWT 认证,请参阅示例:Export to Word with JWT authentication (Node.js) 或 Export to Word with JWT authentication (PHP)

试用期间的行为

  • 试用期间:

    • 使用 JWT:完整功能、无限使用、无水印。

    • 不使用 JWT:功能完整但有水印。

  • 试用后:

    • 使用 Export to Word 插件 + JWT:完整功能(基于订阅)

    • 不使用插件:插件权限将禁用且功能不再可用。

请访问 账户门户 以获取您的 JWT 密钥并测试完整功能。

当在防火墙或正向代理后使用云托管服务时,请确保将 *.tiny.cloud 加入允许列表,并且不会剥离所需的 HTTP 头。详情请参阅 Firewall and proxy allowlisting。

使用自托管服务的基本设置

要使用自托管版本的 Export to Word 插件,您需要将 exportword_service_url 选项设置为服务的 URL。

示例:
tinymce.init({
  selector: 'textarea',
  plugins: 'exportword',
  toolbar: 'exportword',
  exportword_service_url: 'http://localhost:8080/' // Update with the URL of the service you are using such  as 'http://myserver.com/'
});

exportword_service_url 选项会自动在提供的 URL 后附加 /v2/convert/html-docx,因此只需基础 URL。例如,如果服务托管在 http://localhost:8080/v2/convert/html-docx,则 exportword_service_url 选项应设置为 http://localhost:8080/。在生产环境中使用时,请确保将 exportword_service_url 更新为生产 URL,例如 https://myserver.com/。

附加配置

分页符支持

为确保分页符在导出文档中正常工作,请配置 pagebreak_separator 和 pagebreak_split_block 选项:

tinymce.init({
  selector: 'textarea',
  plugins: 'exportword',
  toolbar: 'exportword',
  pagebreak_separator: '<div style="break-after: page"></div>',
  pagebreak_split_block: true,
  // ... other configuration options
});

对于 DOCX 导出,分页符将被转换为 Word 兼容的分页符。

导出特定的内容过滤

要生成用于导出的内容,Export to Word 插件会使用设置为 word 的 export 属性调用 tinymce.editor.getContent() 方法。TinyMCE 会将此 export 属性添加到 GetContent 事件 和序列化器节点过滤器的数据中。序列化器节点过滤器或 GetContent 事件处理程序可以读取 export 属性,以便仅在 Export to Word 导出期间过滤内容,而不改变标准 tinymce.editor.getContent() 调用的结果。

以下序列化器节点过滤器会在 Export to Word 导出期间移除 footer 元素:

editor.serializer.addNodeFilter('footer', (nodes, name, args) => {
  if (args.export === 'word') {
    nodes.forEach((node) => node.remove());
  }
});

GetContent 事件处理程序可以读取相同的 export 属性:

editor.on('GetContent', (e) => {
  if (e.export === 'word') {
    e.content = removeFooterFromHtml(e.content);
  }
});

选项

以下配置选项会影响 Export to Word 插件的行为。

exportword_service_url

Export to Word 插件使用 HTML-to-DOCX 转换器服务来生成 Word 文件。

在为 on-premise 设置配置 Export to Word 插件时,此选项为必需。如果您需要访问此功能,请联系我们。有关使用 Docker 部署 Export to Word 服务端组件的详细说明,请参阅本地部署文档。

使用自定义主机时,请在 TinyMCE 配置中设置 exportword_service_url 选项以匹配您的主机。例如,如果您的自定义主机是 mycustomhost.com,则将 URL 设置为 https://mycustomhost.com/。

类型: String

示例:设置 exportword_service_url

tinymce.init({
  selector: 'textarea',
  plugins: 'exportword',
  toolbar: 'exportword',
  exportword_service_url: '<service_URL>' // 仅本地部署设置时需要
});

exportword_token_provider

exportword_token_provider 选项可启用与基于令牌的身份验证服务的集成,以便导出 Word 文档。它提供了一种从指定端点获取身份验证令牌的机制。这确保了导出过程可以与服务器安全地通信。

类型: Function

默认值: undefined

返回数据: Token 对象

示例:使用 exportword_token_provider

tinymce.init({
  selector: 'textarea',
  plugins: 'exportword',
  toolbar: 'exportword',
  exportword_token_provider: () => { // 与 Tiny Cloud 一起使用 Export to Word 插件时需要。
    return fetch('http://localhost:3000/jwt', { // 指定您的令牌端点
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
    }).then(response => response.json());
  },
});

JWT 令牌的数据结构

包含有效编码令牌的对象必须符合以下结构:

{
  token: "<encoded JWT string>"
}
字段 类型 是否必需? 描述

token

string

必需

用于身份验证和授权的 Base64 编码的 JSON Web Token (JWT)。

exportword_converter_options

exportword_converter_options 选项用于指定和配置与从编辑器转换和导出内容到 .docx Word 文件相关的各种选项。

类型: Object

从 TinyMCE 7.5.0 开始,exportword_converter_options 设置的默认值已更新为以下内容:
默认值:
exportword_converter_options: {
  document: {
    size: 'letter'
  }
}

示例:使用 exportword_converter_options

tinymce.init({
  selector: 'textarea',
  plugins: 'exportword',
  toolbar: 'exportword',
  exportword_service_url: '<service_URL>', // 使用本地部署服务时需要
  exportword_converter_options: {
    headers: {
      first: {
        html: "<p>我的文档页眉</p>",
        css: "p { color: gray; }"
      },
      default: {
        html: "<p>我的默认页眉</p>",
        css: "p { color: blue; }"
      }
    },
    footers: {
      odd: {
        html: "<p>我的奇数页页脚</p>",
        css: "p { font-size: 10px; }"
      },
      even: {
        html: "<p>我的偶数页页脚</p>",
        css: "p { font-size: 12px; }"
      }
    },
    document: {
      orientation: "landscape",
      size: "a3",
      margins: {
        top: "10mm",
        bottom: "10mm",
        left: "20mm",
        right: "15mm"
      }
    },
  },
});
要使用此选项,Export to Word 插件需要配置 exportword_service_url 选项。

有关 exportword_converter_options 的详细信息,请参阅 Export to Word Premium 插件的 API 文档。

exportword_converter_style

exportword_converter_style 选项允许自定义应用于导出的 Word 文档的样式,提供了控制其外观的灵活性;但此选项不影响 header 和 footer 的独特样式。

类型: String

默认值: ''

示例:使用 exportword_converter_style

tinymce.init({
  selector: 'textarea.tinymce',
  plugins: 'exportword',
  toolbar: 'exportword',
  exportword_service_url: '<service_URL>', // 使用本地服务时需要
  exportword_converter_options: {
    headers: {
      first: {
        html: "<p>My document header</p>",
        css: "p { color: gray; }"
      },
      default: {
        html: "<p>My default header</p>",
        css: "p { color: blue; }"
      }
    },
  },
  exportword_converter_style: 'p { color: cyan !important }' // 将覆盖 HTML 内容中设置的 <p> 标签样式
});

watermark

watermark 选项允许集成者在导出的文档的每一页上包含半透明图像水印,这对于品牌推广、版权保护或装饰目的非常有用。

类型: Object

示例:使用 watermark

tinymce.init({
  selector: "textarea",
  plugins: ['exportword'],
  toolbar: 'exportword',
  exportword_converter_options: {
    watermark: {
      source: 'https://<your domain>/some-image.png',
      washout: true,
    }
  }
});
使用水印功能需要 exportword_converter_options。

命令

Export to Word 插件提供以下 TinyMCE 命令。

命令描述

ExportWord

使用 editor.getContent() 并生成一个新的 document.docx Word 文件,可保存到本地磁盘。

示例
tinymce.activeEditor.execCommand('ExportWord');

API 参考

在 Export to Word API 参考文档中探索 Export to Word Premium 插件的全面 API 文档。