当前位置:首页 > JavaScript

js实现pdf下载

2026-01-30 14:34:00JavaScript

使用HTML5的<a>标签下载PDF

通过创建一个隐藏的<a>标签,设置href为PDF文件的URL或Blob对象,并添加download属性触发下载。适用于已知PDF文件URL的场景。

const downloadPDF = (url, filename) => {
  const link = document.createElement('a');
  link.href = url;
  link.download = filename || 'document.pdf';
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
};

// 使用示例
downloadPDF('https://example.com/file.pdf', 'custom_name.pdf');

通过Blob对象生成PDF下载

当PDF数据需要通过API获取或动态生成时,可将响应数据转换为Blob对象,再通过URL.createObjectURL创建临时链接下载。

const downloadPDFFromBlob = (blobData, filename) => {
  const blob = new Blob([blobData], { type: 'application/pdf' });
  const url = URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = url;
  link.download = filename || 'document.pdf';
  document.body.appendChild(link);
  link.click();
  setTimeout(() => {
    document.body.removeChild(link);
    URL.revokeObjectURL(url);
  }, 100);
};

// 使用示例(假设从API获取数据)
fetch('https://api.example.com/generate-pdf')
  .then(response => response.blob())
  .then(blob => downloadPDFFromBlob(blob));

使用jsPDF库动态生成PDF

对于需要前端动态生成PDF内容的场景,可使用jsPDF库。先通过npm安装或CDN引入:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<script>
  const { jsPDF } = window.jspdf;
  const doc = new jsPDF();
  doc.text('Hello World!', 10, 10);
  doc.save('generated.pdf');
</script>

或通过npm安装后使用:

import { jsPDF } from "jspdf";
const doc = new jsPDF();
doc.text("Dynamic PDF Content", 10, 10);
doc.save("dynamic-document.pdf");

使用PDFKit在Node.js环境生成PDF

服务器端生成PDF可通过PDFKit实现,需配合文件系统模块保存或发送文件:

const PDFDocument = require('pdfkit');
const fs = require('fs');

const doc = new PDFDocument();
doc.pipe(fs.createWriteStream('output.pdf'));
doc.fontSize(25).text('Node.js PDF Generation', 100, 100);
doc.end();

处理跨域下载问题

当PDF资源存在跨域限制时,需确保服务器配置CORS头部,或通过代理服务器获取资源。对于需要认证的场景,需在请求头中添加授权信息:

js实现pdf下载

fetch('https://protected-api.example.com/pdf', {
  headers: { 'Authorization': 'Bearer token' }
})
.then(response => response.blob())
.then(blob => downloadPDFFromBlob(blob));

注意事项

  • 移动端浏览器可能限制程序化下载,需用户主动交互触发
  • 大文件下载建议显示进度提示,可通过response.body.getReader()实现流式处理
  • 动态生成复杂PDF时,考虑使用专业库如pdf-lib进行高级操作

标签: jspdf
分享给朋友:

相关文章

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…