You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现PDF-Lib修改后的PDF直接供用户下载而非存储至服务器?

用PDF-Lib实现修改后PDF直接下载的方案

分两种常见场景给你具体实现方法:

前端浏览器环境

在浏览器里用PDF-Lib修改完PDF后,不需要把文件传到服务器,直接在前端生成下载链接即可:

  1. 调用pdfDoc.save()获取修改后的PDF二进制数据(类型是Uint8Array)
  2. 将二进制数据转为Blob对象
  3. 创建临时的<a>标签,设置下载属性后触发点击,完成后移除标签

示例代码:

// 假设你已经完成PDF修改,得到pdfDoc对象
const pdfBytes = await pdfDoc.save();

// 转为Blob
const pdfBlob = new Blob([pdfBytes], { type: 'application/pdf' });

// 创建下载链接
const downloadLink = document.createElement('a');
downloadLink.href = URL.createObjectURL(pdfBlob);
downloadLink.download = 'modified-document.pdf'; // 设置下载文件名

// 触发下载
downloadLink.click();

// 清理临时URL
URL.revokeObjectURL(downloadLink.href);
// 移除临时标签
downloadLink.remove();

如果你的项目用了FileSaver.js这类工具,代码可以更简洁:

import { saveAs } from 'file-saver';

const pdfBytes = await pdfDoc.save();
const pdfBlob = new Blob([pdfBytes], { type: 'application/pdf' });
saveAs(pdfBlob, 'modified-document.pdf');

Node.js后端环境

如果是在服务器端用PDF-Lib修改PDF,不需要保存到服务器磁盘,直接把生成的二进制数据作为HTTP响应返回,让浏览器触发下载:

以Express框架为例:

app.get('/download-modified-pdf', async (req, res) => {
  // 这里是你的PDF修改逻辑,得到pdfDoc对象
  const pdfBytes = await pdfDoc.save();

  // 设置响应头,告诉浏览器这是可下载的PDF文件
  res.setHeader('Content-Type', 'application/pdf');
  res.setHeader('Content-Disposition', 'attachment; filename="modified-document.pdf"');
  
  // 返回二进制数据
  res.send(Buffer.from(pdfBytes));
});

这样用户访问该接口时,浏览器会直接弹出下载对话框,不会在服务器留下文件。

内容的提问来源于stack exchange,提问作者JrWebDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:00:49