导出区块为 ODT
可以将 BlockNote 文档导出为 ODT 文件,完全在客户端完成。
该功能由 @blocknote/xl-odt-exporter
提供。xl-
系列包完全开源,但采用了Copyleft许可证发布。对于在闭源专有产品中的商业使用,商业许可证包含在商务订阅中。
首先,安装 @blocknote/xl-odt-exporter
包:
npm install @blocknote/xl-odt-exporter
接着,创建一个 ODTExporter
类的实例。它暴露了以下方法:
import {
ODTExporter,
odtDefaultSchemaMappings,
} from "@blocknote/xl-odt-exporter";
// 创建导出器
const exporter = new ODTExporter(editor.schema, odtDefaultSchemaMappings);
// 将区块转换为 ODT 文档(Blob)
const odtDocument = await exporter.toODTDocument(editor.document);
请参阅下面的完整示例:
Pro Example
Get access to the full source code for pro examples by subscribing to BlockNote Pro
Or sign in
自定义 ODT 输出文件
toODTDocument
接受一个可选的 options
参数,可用于自定义不同的选项(如页眉和页脚)。
示例用法:
const odt = await exporter.toODTDocument(testDocument, {
// XML 字符串
footer: "<text:p>FOOTER</text:p>",
// XMLDocument
header: new DOMParser().parseFromString(
`<text:p xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0">HEADER</text:p>`,
"text/xml",
),
});
自定义映射 / 自定义模式
ODTExporter
构造函数接收 schema
、mappings
和 options
参数。
映射(mapping)定义了如何将 BlockNote 模式元素(区块、内联内容或样式)转换为 ODT (opens in a new tab) 的 XML 元素。
如果你在编辑器中使用了自定义模式,或者你想覆盖默认 BlockNote 元素转换为 ODT XML 元素的方式,可以传入你自己的 mappings
:
例如,若你的模式包含一个 extraBlock
类型,可以使用如下代码:
import {
ODTExporter,
odtDefaultSchemaMappings,
} from "@blocknote/xl-odt-exporter";
new ODTExporter(schema, {
blockMapping: {
...odtDefaultSchemaMappings.blockMapping,
myCustomBlock: (block, exporter) => {
return <text:p>My custom block</text:p>;
},
},
inlineContentMapping: odtDefaultSchemaMappings.inlineContentMapping,
styleMapping: odtDefaultSchemaMappings.styleMapping,
});
导出器选项
ODTExporter
构造函数接受一个可选的 options
参数。
虽然转换在客户端完成,默认配置使用了一个服务器端代理来解析文件:
const defaultOptions = {
// 用于解析外部资源以避免 CORS 问题的函数
// 默认情况下,这会调用 BlockNote 托管的服务器端代理来解析文件
resolveFileUrl: corsProxyResolveFileUrl,
// ODT 中用于高亮、背景色和字体颜色等的颜色配置
colors: COLORS_DEFAULT, // 来自 @blocknote/core 的默认值
};