XPS(XML Paper Specification)是微软推出的版式文档格式,基于 XML 描述文档内容与页面布局,广泛用于电子文档的打印、存档与分发场景,尤其在 Windows 平台生态中得到原生支持。XPS 具有结构清晰、易于校验和数字签名等优势。与此同时,PDF 作为国际通用的文档格式在跨平台分发领域依然不可或缺。实际业务中经常需要在两种格式间灵活切换:将 PDF 合同转为 XPS 以便在 Windows 环境中打印存档,或者将 XPS 格式的文档转为 PDF 以方便跨平台分发与协作。
Spire.PDF for JavaScript 基于 WebAssembly 在浏览器端直接完成 PDF 与 XPS 之间的双向转换,通过虚拟文件系统(VFS)管理输入输出文件,无需后端服务支持。
本文介绍两个核心功能点:
有关安装和项目配置,请参考 React 项目中集成 Spire.PDF for JavaScript。以下示例默认已安装 Spire.PDF 并完成 WebAssembly 模块初始化。
转换 PDF 到 XPS
PDF 转 XPS 的核心在于将 PDF 文档中的页面内容、字体和图形元素重新编码为符合 XPS 标准的 XML 描述结构。Spire.PDF for JavaScript 通过 PdfDocument 对象的 SaveToFile 方法配合 FileFormat.XPS 枚举值,一键完成格式转换,无需手动处理底层格式差异。
function App() {
const convertToXPS = async () => {
// 获取 Spire.PDF WASM 模块
const pdfModule = window.wasmModule?.spirepdf;
// 检查模块是否就绪
if (!pdfModule) {
alert('Spire.PDF is not ready yet');
return;
}
// 将 PDF 文件载入 VFS
const inputFileName = '模板.pdf';
await window.spire.FetchFileToVFS(inputFileName, "", `${process.env.PUBLIC_URL}/data/`);
// 创建 PdfDocument 对象并加载 PDF 文档
let doc = new pdfModule.PdfDocument();
doc.LoadFromFile(inputFileName);
// 定义为 XPS 格式的输出文件名
const outputFileName = '输出XPS.xps';
// 保存为 XPS 格式
doc.SaveToFile({ fileName: outputFileName, fileFormat: pdfModule.FileFormat.XPS });
doc.Close();
// 从 VFS 读取转换后的文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'application/vnd.ms-xpsdocument' });
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>Convert PDF To XPS</h1>
<button onClick={convertToXPS}>
Generate
</button>
</div>
);
}
export default App;
通过 SaveToFile 方法指定 FileFormat.XPS 生成的 XPS 文档

转换 XPS 到 PDF
XPS 转 PDF 是文档跨平台分发场景中的常见需求。Spire.PDF for JavaScript 通过 PdfDocument 对象的 LoadFromXPS 方法加载 XPS 版式文档,再配合 SaveToFile 方法指定 FileFormat.PDF 导出为标准 PDF 文件,保持原始文档的版面布局和视觉效果不变。
function App() {
const convertXPSToPDF = async () => {
// 获取 Spire.PDF WASM 模块
const pdfModule = window.wasmModule?.spirepdf;
// 检查模块是否就绪
if (!pdfModule) {
alert('Spire.PDF is not ready yet');
return;
}
// 将 XPS 文件载入 VFS
const inputFileName = '模板.xps';
await window.spire.FetchFileToVFS(inputFileName, "", `${process.env.PUBLIC_URL}/data/`);
// 创建 PdfDocument 对象并加载 PDF 文档
let doc = new pdfModule.PdfDocument();
doc.LoadFromXPS(inputFileName);
// 定义为 XPS 格式的输出文件名
const outputFileName = '输出PDF.pdf';
// 保存为 XPS 格式
doc.SaveToFile({ fileName: outputFileName, fileFormat: pdfModule.FileFormat.PDF });
doc.Close();
// 从 VFS 读取转换后的文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'application/vnd.ms-xpsdocument' });
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>Convert XPS To PDF</h1>
<button onClick={convertXPSToPDF}>
Generate
</button>
</div>
);
}
export default App;
通过 PdfDocument 的 LoadFromXPS 方法加载 XPS 并转换后生成的 PDF 文档

常见问题
加密的 PDF 能否转换为 XPS
原因:受密码保护的加密 PDF 无法直接通过 SaveToFile 保存为 XPS 格式,需要先解密文档。
解决:在加载 PDF 时通过 LoadFromFile 的第二个参数传入密码进行解密,然后再保存为 XPS:
// 加载带密码的 PDF 文档
let doc = new pdfModule.PdfDocument();
doc.LoadFromFile(inputFileName, "password");
// 保存为 XPS 格式
doc.SaveToFile({ fileName: outputFileName, fileFormat: pdfModule.FileFormat.XPS });
doc.Close();
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。









