将 Word 文档转换为 PDF 能够跨平台保持排版一致,同时便于分发和归档。Spire.Doc for JavaScript 基于 WebAssembly 在浏览器端直接完成此转换,通过虚拟文件系统(VFS)管理输入输出文件,无需后端服务支持。
本文介绍两个核心功能点:
有关安装和项目配置,请参考 React 项目中集成 Spire.Doc for JavaScript。以下示例默认已安装 Spire.Doc 并完成 WebAssembly 模块初始化。
转换 Word 到 PDF
Word 转 PDF 仅需几行核心代码。无论是文档加载、格式重排还是文件输出,均通过极简 API 一键触发,让文档处理像复制粘贴一样轻松。
function App() {
const convertToPDF = async () => {
// 获取 Spire.Doc WASM 模块
const docModule = window.wasmModule?.spiredoc;
// 检查模块是否就绪
if (!docModule) {
alert('Spire.Doc is not ready yet');
return;
}
// 将字体和 Word 文件载入 VFS
await window.spire.FetchFileToVFS('MSYH.TTC', '/Library/Fonts/', `${process.env.PUBLIC_URL}/font/`);
const inputFileName = 'AI对人类的影响.docx';
await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/data/`);
// 加载文档
const doc = new docModule.Document();
doc.LoadFromFile(inputFileName);
// 保存为 PDF
const outputFileName = 'ToPDF-result.pdf';
doc.SaveToFile({ fileName: outputFileName, fileFormat: docModule.FileFormat.PDF });
// 从 VFS 读取转换后的文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
a.click();
URL.revokeObjectURL(url);
// 释放资源
doc.Dispose();
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>Convert Word To PDF</h1>
<button onClick={convertToPDF}>
Generate
</button>
</div>
);
}
export default App;
Word 文档通过 SaveToFile 转换后生成的 PDF 输出

转换 Word 到 PDF 并配置转换选项
在实际业务场景中,仅做基础转换往往不够。Spire.Doc 提供 ToPdfParameterList 类,允许开发者在转换时精细化控制字体嵌入、PDF/A 合规、超链接行为、图片质量和文档加密等参数。以下示例演示如何通过 ToPdfParameterList 保留 Word 标题为 PDF 书签:
function App() {
const convertWithOptions = async () => {
// 获取 Spire.Doc WASM 模块
const docModule = window.wasmModule?.spiredoc;
// 检查模块是否就绪
if (!docModule) {
alert('Spire.Doc is not ready yet');
return;
}
// 将字体和 Word 文件载入 VFS
await window.spire.FetchFileToVFS('MSYH.TTC', '/Library/Fonts/', `${process.env.PUBLIC_URL}/font/`);
const inputFileName = 'AI对人类的影响.docx';
await window.spire.FetchFileToVFS(inputFileName, '', `${process.env.PUBLIC_URL}/data/`);
// 加载文档
const doc = new docModule.Document();
doc.LoadFromFile(inputFileName);
// 创建转换参数对象
let parames = new docModule.ToPdfParameterList();
// 不转换手动插入的书签
parames.CreateWordBookmarks = false;
// 根据 Heading 1/2/3 自动生成 PDF 书签
parames.CreateWordBookmarksUsingHeadings = true;
// 保存为 PDF(传入配置参数)
const outputFileName = 'WordToPDF-Options-result.pdf';
doc.SaveToFile({ fileName: outputFileName, paramList: parames });
// 从 VFS 读取转换后的文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
a.click();
URL.revokeObjectURL(url);
// 释放资源
doc.Dispose();
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>Convert Word To PDF With Options</h1>
<button onClick={convertWithOptions}>
Generate
</button>
</div>
);
}
export default App;
通过 ToPdfParameterList 配置转换选项后生成的 PDF 输出

ToPdfParameterList 提供的核心配置选项接口如下:
| 选项 | 属性 / 方法 | 说明 |
|---|---|---|
| 嵌入所有字体 | IsEmbeddedAllFonts |
将文档中使用的所有字体嵌入 PDF 文件,确保在未安装对应字体的设备上仍能正确渲染 |
| 嵌入未安装字体 | PrivateFontPaths |
通过 PrivateFontPath 对象指定字体文件路径,嵌入系统未安装的自定义字体 |
| 指定嵌入字体 | EmbeddedFontNameList |
指定需要嵌入的字体名称列表,而非嵌入全部字体,以控制文件体积 |
| PDF/A 合规 | PdfConformanceLevel |
设置 PDF 的归档标准级别(如 Pdf_A1B),满足长期保存和合规性需求 |
| 超链接控制 | DisableLink |
设置转换后 PDF 中是否保留超链接效果(true=移除,false=保留) |
| 保留隐藏文本 | IsHidden |
是否保留 Word 文档中的隐藏文本内容到输出的 PDF 中 |
| PDF 书签 | CreateWordBookmarks / CreateWordBookmarksUsingHeadings |
CreateWordBookmarks 控制是否转换手动插入的书签;CreateWordBookmarksUsingHeadings 控制是否按 Heading 1/2/3 自动生成 |
| PDF 加密 | PdfSecurity.Encrypt() |
为输出的 PDF 设置打开密码与权限密码,控制文档访问权限 |
各选项对应的核心代码片段如下:
// 嵌入所有字体
parames.IsEmbeddedAllFonts = true;
// 嵌入未安装字体(通过 PrivateFontPath 指定字体文件)
let fonts = [new docModule.PrivateFontPath("PT Serif Caption", "PT_Serif-Caption-Web-Regular.ttf")];
parames.PrivateFontPaths = fonts;
// 指定嵌入字体名称列表
parames.EmbeddedFontNameList = ["PT Serif Caption"];
// PDF/A 合规
parames.PdfConformanceLevel = docModule.PdfConformanceLevel.Pdf_A1B;
// 禁用超链接
parames.DisableLink = true;
// 设置图片质量(0-100)
doc.JPEGQuality = 40;
// 保留隐藏文本
parames.IsHidden = true;
// 创建 PDF 书签
parames.CreateWordBookmarks = true;
parames.CreateWordBookmarksUsingHeadings = true;
// PDF 加密
parames.PdfSecurity.Encrypt("password", "E-iceblue", docModule.PdfPermissionsFlags.Default, docModule.PdfEncryptionKeySize.Key128Bit);
将这些选项与基础转换代码组合即可灵活控制 PDF 输出效果。
注意:
JPEGQuality是Document对象的属性,不属于ToPdfParameterList,需直接在doc实例上设置。上表中的其他选项均通过ToPdfParameterList配置。
常见问题
PDF 中文显示为乱码或空白
原因:WASM 虚拟文件系统中缺少渲染所需的字体文件。SaveToFile 渲染文本时需从 VFS 中读取字体,若未预加载中文字体则文字区域会留白或显示为乱码。
解决:转换前通过 FetchFileToVFS 将支持中文的字体文件(如 MSYH.TTC 或 SIMSUN.TTF)载入 VFS:
await window.spire.FetchFileToVFS(
'MSYH.TTC', '/Library/Fonts/', `${process.env.PUBLIC_URL}/font/`
);
SaveToFile 的两种参数传递方式如何选择
原因:SaveToFile 支持 fileFormat 和 paramList 两种参数方式,混淆使用会导致参数不生效。
解决:基础转换使用 fileFormat 直接指定输出格式;使用 ToPdfParameterList 配置选项时将参数对象传给 paramList,两者独立使用:
// 基础转换 — 使用 fileFormat
doc.SaveToFile({ fileName: "output.pdf", fileFormat: docModule.FileFormat.PDF });
// 带选项的转换 — 使用 paramList
let parames = new docModule.ToPdfParameterList();
parames.IsEmbeddedAllFonts = true;
doc.SaveToFile({ fileName: "output.pdf", paramList: parames });
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。







