PDF 的版本号决定了文档能用哪些特性,也决定了旧阅读器、打印系统和归档平台能不能正常打开它。一批文档从不同来源汇过来,版本参差不齐:有的出自新工具、声明到 1.7,有的产自多年未更新的系统、还停在 1.4。要按目标环境统一交付格式,就得把版本号改写过来,而桌面软件只能一份一份手工另存。
本文用 Spire.PDF for JavaScript 更改 PDF 文档的版本号。它基于 WebAssembly 在浏览器端直接加载、修改与保存 PDF 文档,全过程在本地完成,通过虚拟文件系统(VFS)读写文件,无需后端配合。
有关安装和项目配置,请参考 React 项目中集成 Spire.PDF for JavaScript。以下示例默认已安装 Spire.PDF 并完成 WebAssembly 模块初始化。
更改 PDF 版本
给 doc.FileInfo.Version 赋一个 PdfVersion 值即可改写版本号,保存后文件头随即写成对应的 %PDF-x.y。把它设成 Version1_4,一份 1.7 的文档就降到 1.4,可以交给只认旧规范的阅读器或打印系统。
function App() {
const changePdfVersion = 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 文档
const doc = new pdfModule.PdfDocument();
doc.LoadFromFile(inputFileName);
// 把版本号改成目标值,这里降到 1.4
doc.FileInfo.Version = pdfModule.PdfVersion.Version1_4;
const outputFileName = '版本1.4.pdf';
doc.SaveToFile(outputFileName);
doc.Close();
// 从 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);
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>更改 PDF 版本</h1>
<button onClick={changePdfVersion}>
开始更改
</button>
</div>
);
}
export default App;
版本号改为 1.4 后保存的文档,文件头已写成 %PDF-1.4:

常见问题
设了版本号,重新打开仍是旧版本
原因:FileInfo.Version 改的是内存中文档对象的属性,只有保存才会写进文件。设完版本号直接关闭,或者仍去打开原来那份输入文件,看到的自然还是旧版本号。
解决:赋完值后必须调用 SaveToFile 另存为新的输出文件,再打开该产物查看:
// 先改版本号
doc.FileInfo.Version = pdfModule.PdfVersion.Version1_4;
// 再保存,版本号才会写入文件
doc.SaveToFile('版本1.4.pdf');
版本号该设成哪一个
原因:取决于交付对象的支持范围。旧打印系统与归档平台常要求 1.4 或更低,新工具大多能吃下 1.7;FileInfo.Version 取 PdfVersion 枚举,Version1_0 到 Version1_7 依次对应 PDF 1.0 到 1.7。
解决:按接收方能接受的最高版本设置,赋值时直接用枚举:
// 交付给只认旧规范的阅读器或打印系统
doc.FileInfo.Version = pdfModule.PdfVersion.Version1_4;
// 目标环境较新,保持或提到 1.7
doc.FileInfo.Version = pdfModule.PdfVersion.Version1_7;
把版本号降到低版本后,文档打不开或内容异常
原因:FileInfo.Version 只改声明,并不清理文档里超出该版本规范的对象。原文用了新版本才引入的特性——比如 PDF 1.5 起的交叉引用流、对象流或压缩透明——旧阅读器按低版本去解析就会失败。
解决:改声明之前先确认源文件没有依赖这些特性。源文件干净时,改版本号即可;否则应换用不依赖新特性的源文件,或先用能重建文档的方式(重新导出、打印为 PDF)把对象压回旧规范,再改版本号。
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。









