当前位置:首页 > 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创建临时链接下载。

js实现pdf下载

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安装后使用:

js实现pdf下载

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头部,或通过代理服务器获取资源。对于需要认证的场景,需在请求头中添加授权信息:

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实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterv…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback)…

vue 实现pdf

vue 实现pdf

在Vue中实现PDF功能 使用vue-pdf库 安装vue-pdf库: npm install vue-pdf 在Vue组件中使用: <template> <pdf…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…