PDF 版式固定、便于分发,但其中的表格数据难以直接编辑与分析;Excel(XLSX)则是电子表格领域的通用格式,支持公式、排序、筛选与二次加工。实际业务中经常需要将 PDF 中的报表、账单、数据表转换为 Excel,以便继续编辑、汇总或录入系统。由于 PDF 与 Excel 的底层模型差异较大,转换时的布局策略对结果质量影响显著。
Spire.PDF for JavaScript 基于 WebAssembly 在浏览器端直接完成 PDF 到 Excel 的转换,通过虚拟文件系统(VFS)管理输入输出文件,无需后端服务支持。除了简单的常规转换外,还提供 XlsxLineLayoutOptions 与 XlsxTextLayoutOptions 两类转换选项,帮助您控制转换后的行布局与文本布局。
本文介绍三个核心功能点:
有关安装和项目配置,请参考 React 项目中集成 Spire.PDF for JavaScript。以下示例默认已安装 Spire.PDF 并完成 WebAssembly 模块初始化。
常规方式将 PDF 转换为 Excel
常规转换是最直接的 PDF 转 Excel 方式:创建 PdfDocument 对象加载 PDF 后,直接通过 SaveToFile 方法指定 FileFormat.XLSX 即可保存为 Excel 文档,无需设置任何转换选项。Spire.PDF 会按照默认策略解析 PDF 中的文本、表格与图形内容,适用于大多数常规文档的转换需求;当默认结果无法满足特定的布局要求时,再考虑使用 XlsxLineLayoutOptions 或 XlsxTextLayoutOptions 进行精细化控制。
function App() {
const convertToExcel = async () => {
// 获取 Spire.PDF WASM 模块
const pdfModule = window.wasmModule?.spirepdf;
// 检查模块是否就绪
if (!pdfModule) {
alert('Spire.PDF is not ready yet');
return;
}
// 将 PDF 文件与字体载入 VFS
await window.spire.FetchFileToVFS('ARIAL.TTF', '/Library/Fonts/', `${process.env.PUBLIC_URL}/font/`);
const inputFileName = '财务报表2025.pdf';
await window.spire.FetchFileToVFS(inputFileName, "", `${process.env.PUBLIC_URL}/data/`);
// 创建 PdfDocument 对象并加载 PDF 文档
let doc = new pdfModule.PdfDocument();
doc.LoadFromFile(inputFileName);
// 定义为 Excel 格式的输出文件名
const outputFileName = '输出Excel.xlsx';
// 保存为 Excel 格式
doc.SaveToFile({ fileName: outputFileName, fileFormat: pdfModule.FileFormat.XLSX });
doc.Close();
// 从 VFS 读取转换后的文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
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 Excel</h1>
<button onClick={convertToExcel}>
Generate
</button>
</div>
);
}
export default App;
通过常规方式生成的 Excel 文档

使用 XlsxLineLayoutOptions 将 PDF 转换为 Excel
表格边框、分隔线和图形等线条元素在转换到 Excel 时,需要通过行布局选项控制其保留方式。XlsxLineLayoutOptions 提供了多项行布局参数:是否转换为多个工作表、是否保留旋转文本、是否拆分包含多行文本的单元格、是否自动换行以及是否保留重叠文本。通过 ConvertOptions 的 SetPdfToXlsxOptions 方法传入该选项,再使用 SaveToFile 方法指定 FileFormat.XLSX 保存,即可完成转换。
function App() {
const convertToExcel = async () => {
// 获取 Spire.PDF WASM 模块
const pdfModule = window.wasmModule?.spirepdf;
// 检查模块是否就绪
if (!pdfModule) {
alert('Spire.PDF is not ready yet');
return;
}
// 将 PDF 文件与字体载入 VFS
await window.spire.FetchFileToVFS('ARIAL.TTF', '/Library/Fonts/', `${process.env.PUBLIC_URL}/font/`);
const inputFileName = '财务报表.pdf';
await window.spire.FetchFileToVFS(inputFileName, "", `${process.env.PUBLIC_URL}/data/`);
// 创建 PdfDocument 对象并加载 PDF 文档
let doc = new pdfModule.PdfDocument();
doc.LoadFromFile(inputFileName);
// 创建行布局转换选项
// 参数依次为:是否转换为多个工作表、是否保留旋转文本、是否拆分单元格、是否自动换行、是否保留重叠文本
let lineLayoutOptions = new pdfModule.XlsxLineLayoutOptions(true, true, false, true, true);
doc.ConvertOptions.SetPdfToXlsxOptions(lineLayoutOptions);
// 定义为 Excel 格式的输出文件名
const outputFileName = '行布局选项.xlsx';
// 保存为 Excel 格式
doc.SaveToFile({ fileName: outputFileName, fileFormat: pdfModule.FileFormat.XLSX });
doc.Close();
// 从 VFS 读取转换后的文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
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 Excel using XlsxLineLayoutOptions</h1>
<button onClick={convertToExcel}>
Generate
</button>
</div>
);
}
export default App;
通过 XlsxLineLayoutOptions 转换选项生成的 Excel 文档

使用 XlsxTextLayoutOptions 将 PDF 转换为 Excel
当 PDF 内容以文本和数值为主时,可以改用 XlsxTextLayoutOptions 控制文本布局转换参数,例如是否转换为多个工作表、是否保留旋转文本等。与行布局选项不同,该选项更侧重于文本内容的排布方式,适合表格线较少、以文字为主的文档。使用方法相同:通过 ConvertOptions 的 SetPdfToXlsxOptions 方法传入选项,再保存为 XLSX。
function App() {
const convertToExcel = async () => {
// 获取 Spire.PDF WASM 模块
const pdfModule = window.wasmModule?.spirepdf;
// 检查模块是否就绪
if (!pdfModule) {
alert('Spire.PDF is not ready yet');
return;
}
// 将 PDF 文件与字体载入 VFS
await window.spire.FetchFileToVFS('ARIAL.TTF', '/Library/Fonts/', `${process.env.PUBLIC_URL}/font/`);
const inputFileName = '报表.pdf';
await window.spire.FetchFileToVFS(inputFileName, "", `${process.env.PUBLIC_URL}/data/`);
// 创建 PdfDocument 对象并加载 PDF 文档
let doc = new pdfModule.PdfDocument();
doc.LoadFromFile(inputFileName);
// 创建文本布局转换选项
// 参数依次为:是否转换为多个工作表、是否保留旋转文本
let textLayoutOptions = new pdfModule.XlsxTextLayoutOptions(false, true);
doc.ConvertOptions.SetPdfToXlsxOptions(textLayoutOptions);
// 定义为 Excel 格式的输出文件名
const outputFileName = '文本布局选项.xlsx';
// 保存为 Excel 格式
doc.SaveToFile({ fileName: outputFileName, fileFormat: pdfModule.FileFormat.XLSX });
doc.Close();
// 从 VFS 读取转换后的文件,触发下载
const fileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
const blob = new Blob([fileArray], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
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 Excel using XlsxTextLayoutOptions</h1>
<button onClick={convertToExcel}>
Generate
</button>
</div>
);
}
export default App;
通过 XlsxTextLayoutOptions 转换选项生成的 Excel 文档

常见问题
常规转换与使用转换选项转换有什么区别
原因:不设置转换选项时,Spire.PDF 会采用默认布局策略将 PDF 内容转换为 Excel。
解决:常规转换(不调用 SetPdfToXlsxOptions)步骤最少,适合内容结构简单、默认布局即可满足需求的文档;当需要对多工作表拆分、旋转文本、单元格拆分、自动换行等细节进行控制时,再根据文档内容选择 XlsxLineLayoutOptions(偏图形与线条)或 XlsxTextLayoutOptions(偏文本)。
XlsxLineLayoutOptions 与 XlsxTextLayoutOptions 有什么区别
原因:两类选项用于控制 PDF 转 Excel 时不同内容的保留方式。
解决:XlsxLineLayoutOptions 面向表格边框、线条等图形元素,可控制多工作表拆分、旋转文本、单元格拆分、自动换行与重叠文本等行为;XlsxTextLayoutOptions 面向文本内容,可控制是否合并到单个工作表以及是否保留旋转文本。请根据 PDF 内容以图形为主还是以文本为主选择合适的选项。
加密的 PDF 能否转换为 Excel
原因:受密码保护的加密 PDF 无法直接转换,需要先解密文档。
解决:在加载 PDF 时通过 LoadFromFile 的第二个参数传入密码进行解密,然后再转换并保存为 Excel:
// 加载带密码的 PDF 文档
let doc = new pdfModule.PdfDocument();
doc.LoadFromFile(inputFileName, "password");
// 保存为 Excel 格式
doc.SaveToFile({ fileName: outputFileName, fileFormat: pdfModule.FileFormat.XLSX });
doc.Close();
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。









