纯文本(TXT)是最轻量的文本载体,常用于日志导出、数据交换与内容归档;Word 则承担排版与正式交付。在浏览器端把两者互转是文档处理中的常见需求:TXT 转 Word 可以把采集到的纯文本整理成规范文档,Word 转 TXT 则用于从文档中抽取可被程序继续处理的正文。Spire.Doc for JavaScript 基于 WebAssembly 在浏览器端直接完成这两个方向的转换,通过虚拟文件系统(VFS)管理字体和文件资源,无需后端服务支持。
需要说明的是,TXT 是纯文本格式,本身不承载任何排版信息,因此两个方向的转换都只在文字层面成立:Word 一侧的样式、表格结构与图片不会进入 TXT,反过来 TXT 转出的 Word 也只有正文段落。明确这条边界后再使用,可以避免对转换结果产生过高预期。
本文介绍两个核心功能点:
有关安装和项目配置,请参考 React 项目中集成 Spire.Doc for JavaScript 的方法。以下示例默认已安装 Spire.Doc 并完成 WebAssembly 模块初始化。
将 TXT 文件转换为 Word
TXT 转 Word 的核心流程分为三个阶段:首先通过 FetchFileToVFS 将字体文件和目标 TXT 文件载入 WASM 虚拟文件系统;然后实例化 Document 并调用 LoadFromFile 加载文件——这里没有显式传入 fileFormat,Spire.Doc 会按文件扩展名自动识别为纯文本;最后调用 SaveToFile 将结果保存为 docx,从 VFS 读取生成的文件,封装为 Blob 后触发浏览器下载。
function App() {
const TxtToWord = async () => {
const docModule = window.wasmModule?.spiredoc;
if (!docModule) {
alert('Spire.Doc is not ready yet');
return;
}
// 将示例文件载入 VFS
let inputFileName = "TxtToWord.txt";
await window.spire.FetchFileToVFS(inputFileName, "", `${process.env.PUBLIC_URL}/static/data/`);
// 创建文档实例
const doc = new docModule.Document();
// 从虚拟文件系统加载文档
doc.LoadFromFile(inputFileName);
// 定义输出文件名
const outputFileName = "TxtToWord-result.docx";
// 将文档保存为指定格式
doc.SaveToFile({fileName: outputFileName, fileFormat: docModule.FileFormat.Docx2013});
// 释放资源
doc.Dispose();
const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([modifiedFileArray], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
a.click();
URL.revokeObjectURL(url);
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>将 TXT 文件转换为 Word 文档</h1>
<button onClick={TxtToWord}>开始</button>
</div>
);
}
export default App;
由于 TXT 不携带样式信息,转换结果完全由 Spire.Doc 的默认排版规则决定,有两点需要留意:文件中的每一个换行都会被转换为 Word 中的一个段落,空行则保留为空段落,若输入文件以换行结尾,文末会多出一个空段落;输出的所有段落都使用默认的 Normal 样式,标题、编号与项目符号的层级不会自动产生,写在 TXT 里的 1.、- 等符号只会作为普通字符保留。
通过 LoadFromFile 加载 TXT 文件并另存为 Word 文档后,文本按行还原为段落,全部使用 Normal 样式

将 Word 文档转换为 TXT
Word 转 TXT 的流程与前一个方向基本一致:通过 FetchFileToVFS 将字体文件和目标 Word 文档载入虚拟文件系统,实例化 Document 后调用 LoadFromFile 加载文档;区别在于保存时指定 FileFormat.Txt,由 Spire.Doc 按纯文本规则抽取文档内容;最后从 VFS 读取生成的 txt 文件,封装为 text/plain 类型的 Blob 后触发浏览器下载。
function App() {
const WordToTxt = async () => {
const docModule = window.wasmModule?.spiredoc;
if (!docModule) {
alert('Spire.Doc is not ready yet');
return;
}
// 将示例文件载入 VFS
let inputFileName = "WordToTxt.docx";
await window.spire.FetchFileToVFS(inputFileName, "", `${process.env.PUBLIC_URL}/static/data/`);
// 创建文档实例
const doc = new docModule.Document();
// 从虚拟文件系统加载文档
doc.LoadFromFile(inputFileName);
// 定义输出文件名
const outputFileName = "WordToTxt-result.txt";
// 将文档保存为纯文本格式
doc.SaveToFile({fileName: outputFileName, fileFormat: docModule.FileFormat.Txt});
// 释放资源
doc.Dispose();
const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([modifiedFileArray], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
a.click();
URL.revokeObjectURL(url);
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>将 Word 文件转换为 TXT 文档</h1>
<button onClick={WordToTxt}>开始</button>
</div>
);
}
export default App;
FileFormat.Txt 的导出遵循“只取文字”的规则,以一份包含标题、项目符号列表、编号列表、表格与图片的 Word 文档为例,导出结果可以归纳为以下几点:
- 标题、正文与列表项的字体、字号、颜色、加粗等样式全部丢弃,统一还原为普通文本行;
- 项目符号列表写出
*前缀,编号列表写出1.前缀,列表层级信息随之丢失; - 表格被逐单元格展开为独立行,行与列的对应关系不再保留;
- 图片不会被导出,其所在段落变成空行。
此外,导出的 txt 采用 UTF-8 编码并带 BOM,换行为 CRLF,封装 Blob 时使用 text/plain 类型即可。
通过 SaveToFile 指定 FileFormat.Txt 后,Word 文档中的样式、表格与图片均不保留,仅按顺序写出文本内容

常见问题
Word 转 TXT 后表格错位、列表符号变成星号
原因:TXT 没有行列与列表结构的概念,FileFormat.Txt 只做文本抽取:表格按单元格顺序逐行写出,项目符号被替换成 *,编号被替换成序号文本。这是格式本身的限制,而不是转换出错。
解决:如果下游需要的只是可读文本,可以按上述规则在读取端还原结构;如果必须保留表格与列表的版式,应当改用能够承载结构的格式,例如导出为 HTML 或 OpenXML。
转换出的 Word 文档里没有标题和列表样式
原因:TXT 不携带样式信息,LoadFromFile 加载纯文本时只能把每一行按默认的 Normal 样式写成段落,TXT 中的 1.、- 等符号只是普通字符,不会被解析为标题或列表。
解决:转换完成后按约定对指定段落重新设置样式;如果不希望逐段设置,也可以改用本身带结构的输入格式(如 HTML)来完成这一步。
加载 TXT 时提示无法识别文件类型
原因:LoadFromFile 未指定 fileFormat 时按文件扩展名判断格式。当输入文件的扩展名不是 .txt(例如 .log、.dat 或不带扩展名)时,Spire.Doc 无法识别,会抛出 Cannot detect current file type 一类的异常。
解决:显式指定纯文本格式:
doc.LoadFromFile({ fileName: inputFileName, fileFormat: wasmModule.FileFormat.Txt });
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。







