当前位置: 首页 > news >正文

前端将多个PDF链接的内容拼接成一个后返回出一个链接进行打开

1、引用了 “pdf-lib”库,它提供了一组丰富的功能,可以在客户端和服务器端中对PDF文件进行各种操作。

要对应 node 版本进行下载对应 “pdf-lib”库的依赖(直接问下AI);

node:v18.20.4

pdf-lib:"^1.17.1"

这是我这边的版本,如果一样的话可以直接下载依赖

安装命令:

yarn add pdf-lib
//指定版本
yarn add pdf-lib@1.17.1

2、安装完在需要的页面进行引用

import { PDFDocument } from 'pdf-lib';

3、思路:

  • 创建一个空白的PDF文档
  • 遍历即将合并的PDF文档,获取二进制数据
  • 依次将数据写入到空白文档中(如果单个PDF中有多页,需要一次一页往新建空白PDF中添加)
  • 将合并后的PDF文档保存为Blob对象
  • 创建URL并返回

4、具体代码实现:

// 将多个PDF链接的内容拼接成一个后返回出一个链接进行打开
const pdfLinkPrint = async (links: string[]) => {async function mergePDFs(links) {try {// 创建一个新的空白PDF文档const mergedPdfDoc = await PDFDocument.create();for (const pdfUrl of links) {// 获取PDF文件的二进制数据const pdfBytes = await fetch(pdfUrl).then(response => response.arrayBuffer());// 将获取到的PDF文件添加到新的文档中const pdfDoc = await PDFDocument.load(pdfBytes);// 如果单个PDF为多页,则要一页一页往新建的PDF中添加const copiedPages = await mergedPdfDoc.copyPages(pdfDoc, pdfDoc.getPageIndices());copiedPages.forEach((page: any) => mergedPdfDoc.addPage(page));}// 将合并后的PDF保存为Blob对象const mergedPdfBytes = await mergedPdfDoc.save();const mergedPdfBlob = new Blob([mergedPdfBytes], { type: 'application/pdf' });return URL.createObjectURL(mergedPdfBlob);} catch {}}if (!links.length) return;const url = links.length === 1 ? links[0] : await mergePDFs(links);const newWindow = window.open(url);//判断新窗口是否已打开if (newWindow) {newWindow.onload = () => {setTimeout(() => {URL.revokeObjectURL(urls); // 释放 Blob URL}, 1000);};}
};

 5、最终的实现效果:

相关文章:

  • 脑机新手指南(九):高性能脑文本通信:手写方式实现(上)
  • JS之Dom模型和Bom模型
  • Java SE - 类和对象入门指南
  • SQL29 验证刷题效果,输出题目真实通过率
  • Future与CompletableFuture:异步编程对比
  • Linux 文件内容的查询与统计
  • 万字深度解析注意力机制全景:掌握Transformer核心驱动力​
  • 【基于阿里云上Ubantu系统部署配置docker】
  • Haclon例程1-<剃须刀片检测程序详解>
  • < 买了个麻烦 (二) 618 京东云--轻量服务器 > “可以为您申请全额退订呢。“ 工单记录:可以“全额退款“
  • EtherCAT转CANopen网关与伺服器在汇川组态软件上的配置步骤
  • 免下载苹果 IPA 文件重签名工具:快速更换应用名称和 BID的教程
  • Python的LibreOffice命令行详解:自动化文档处理的终极指南
  • AUTOSAR图解==>AUTOSAR_TR_ModelingShowCases
  • OC学习—Block初探(简易版)
  • ubuntu 安装 JDK8
  • SQL Server 查询数据库中所有表中所有字段的数据类型及长度
  • 笔试模拟day1
  • 对比学习(Contrastive Learning)方法详解
  • [Linux入门] Linux安装及管理程序入门指南
  • 做网站标题头像/石家庄最新消息
  • 长春网站建设公司怎么样/浏览器大全
  • wordpress 全部函数/百度seo排名技术必不可少
  • 广州网站建设网站建设/百度推广一般要多少钱
  • 有什么网站是帮别人做设计的/网站百度收录要多久
  • 重庆市建设网站公司/谷歌推广教程