JS合并2个远程pdf
要在HTML和JavaScript中读取远程PDF文件的矢量数据并合并两个PDF文件,您可以使用pdf-lib和Axios库。以下是使用pdf-lib和Axios在HTML和JavaScript中读取和合并远程PDF文件的步骤:
1. 引入
首先,确保您在HTML文件中引入了pdf-lib和Axios库。您可以通过CDN链接或本地文件引入它们。例如:
<script src="https://cdn.jsdelivr.net/npm/pdf-lib@1.17.1/dist/pdf-lib.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios@1.5.0/dist/axios.min.js"></script>
或者,您可以将pdf-lib和Axios库下载到本地,然后在HTML中引入它们的本地文件。
2. 添加按钮
在HTML文件中添加一个按钮,用于触发读取和合并PDF文件的操作。例如:
<button onclick="mergePDFs()">合并PDF文件</button>
3. 添加JS
在JavaScript文件中添加以下代码来实现读取和合并PDF文件的功能:
// 合并PDF文件
async function mergePDFs() {const pdfUrl1 = 'https://example.com/path/to/first/pdf/file.pdf';const pdfUrl2 = 'https://example.com/path/to/second/pdf/file.pdf';try {// 读取第一个PDF文件const pdfBytes1 = await axios.get(pdfUrl1, { responseType: 'arraybuffer' });const pdfDoc1 = await PDFLib.PDFDocument.load(pdfBytes1.data);// 读取第二个PDF文件const pdfBytes2 = await axios.get(pdfUrl2, { responseType: 'arraybuffer' });const pdfDoc2 = await PDFLib.PDFDocument.load(pdfBytes2.data);// 创建一个新的PDF文档const mergedPdfDoc = await PDFLib.PDFDocument.create();// 合并两个PDF文档的页面const [existingPage] = await mergedPdfDoc.copyPages(pdfDoc1, [0])mergedPdfDoc.addPage(existingPage)const [existing2Page] = await mergedPdfDoc.copyPages(pdfDoc2, [0])mergedPdfDoc.addPage(existing2Page)// 将合并后的PDF文档保存为字节数组const mergedPdfBytes = await mergedPdfDoc.save();// 可根据需要进行后续操作,例如下载合并后的PDF文件或读取矢量数据// ...console.log('PDF文件合并成功!');} catch (error) {console.error('无法合并PDF文件:', error);}
}
4.预览
添加html
<iframe id="pdf" style="width: 100%; height: 100%;"></iframe>
添加js
const pdfDataUri = await mergedPdfDoc.saveAsBase64({dataUri: true});document.getElementById('pdf').src = pdfDataUri;
5.下载
简单的下载逻辑
var downloadLink = document.createElement('a');downloadLink.href = URL.createObjectURL(new Blob([mergedPdfBytes]));downloadLink.download = 'merged_pdf.pdf';document.body.appendChild(downloadLink);downloadLink.click();document.body.removeChild(downloadLink);
上述代码使用pdf-lib库来读取和合并两个远程PDF文件。它使用Axios库来获取远程PDF文件的字节数据,并将其加载到PDFDocument对象中。然后,它遍历每个PDF文件的页面,并将它们添加到合并后的PDF文档中。最后,它将合并后的PDF文档保存为字节数组。
您可以根据需要在mergePDFs函数中添加适当的代码来执行后续操作,例如将合并后的PDF文件下载到本地或读取矢量数据。
请注意,由于安全原因,浏览器可能会阻止从不同域的远程PDF文件加载数据。如果遇到这种情况,请确保您在服务器上设置了适当的CORS(跨域资源共享)配置。
PDF-LIB库包含的功能
创建和修改
从头开始创建PDF文档,或修改现有的PDF文档。绘制文本、图像和矢量图形。嵌入您自己的字体。甚至从其他PDF中嵌入和绘制页面。
纯JavaScript
用TypeScript编写,并编译为纯JavaScript,没有本地依赖项。适用于任何JavaScript运行时,包括浏览器、Node、Deno,甚至React Native。
拆分和合并
添加、插入和删除页面。将单个PDF拆分为单独的PDF。或者将多个PDF合并到一个文档中。
填写表格
创建新表单或填写并读取现有字段。复选框、按钮、单选组、下拉列表、选项列表和文本字段都受支持。
相关文章:
JS合并2个远程pdf
要在HTML和JavaScript中读取远程PDF文件的矢量数据并合并两个PDF文件,您可以使用pdf-lib和Axios库。以下是使用pdf-lib和Axios在HTML和JavaScript中读取和合并远程PDF文件的步骤: 1. 引入 首先,确保您在HTML文件中引入了pdf-lib和Axios库。…...
TikTok的伦理挑战:虚拟世界与现实世界的交汇
在数字时代,社交媒体平台已经不再只是一个信息传播的工具,它已经深刻地改变了我们的社交行为、价值观和伦理观。 而在这一领域的佼佼者之一,TikTok,正面临着伦理挑战,这是虚拟世界与现实世界交汇的产物。 本文将深入…...
C# 获取磁盘空间大小的方法
方法一:利用System.IO.DriveInfo.GetDrives方法来获取 /// 获取指定驱动器的空间总大小(单位为B)////// 只需输入代表驱动器的字母即可 (大写)///public static long GetHardDiskSpace(string str_HardDiskName){long totalSize new long();…...
JVM机制理解与调优方案
作者:逍遥Sean 简介:一个主修Java的Web网站\游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! 前言 很多Java开发…...
Django的设计模式及模板层
Django的设计模式及模板层 设计模式MVC和MVT MVC 代表 Model-View-Controller(模型-视图-控制器)模式。 M 模型层(Model),主要用于对数据库层的封装 V 视图层(View),用于向用户展示结果 (WHAT HOW) C 控制(Controller,用于处理请求、获取数据、返回结果(重要) 作…...
写代码生成流程图
我们在写文档,博客的时候,一般都会使用markdown语法,最常见的就是一些github开源项目的README。有时候会去画一些流程图,例如使用process.on或者xmind等第三方网站,然后截图插入到文档中。 今天我们介绍一种使用代码直…...
python reportlab生成pdf
这里自定义了pagetemplate,使用BaseDocTemplate,但我感觉一般使用SimpleDocTemplate就可以。 from reportlab.platypus import Frame from reportlab.lib.pagesizes import A4, landscapepadding dict(leftPadding72,rightPadding72,topPadding72,bott…...
第一次作业题解
第一次作业题解 P5717 【深基3.习8】三角形分类 思路 考的是if()的使用,还要给三条边判断大小 判断优先级: 三角形?直角、钝角、锐角等腰等边 判断按题给顺序来 代码 #include <stdio.h> int main() {int a 0, b 0, c 0, x 0, y 0, z 0…...
美篇作文网教学资源源码-自带作文数据
非常漂亮的UI设计和页面排版! 自适应手机pc端 页面内容均支持自定义 可以用来做网站矩阵,或者增强你其他网站板块,或者单独运营都可以。 可以通过广告方式变现,或者引流等等 友好的seo,更容易被浏览器收录 关注青狐…...
电脑软件:Duplicate Cleaner Pro 5.16 重复文件清理软件(附下载)
大家平时在使用电脑的时候,会经常从网上下载文件或者从其他电脑拷贝文件到自己的电脑上。久而久之就会在电脑中存放很多相同的文件,并且会越积越多,不仅占用很多磁盘空间,在文件管理上也非常混乱不方便。如何解决呢? …...
支持笔记本电脑直插直充,TOWE 65W智能快充PDU超级插座
电源插排在我们的生活中是必不可少的电器配件。今天,我们日常生活中所使用的电子设备越来越多,无论是手机、平板、笔记本电脑还是各种家用电器,都需要电源来驱动。虽然相对于其他电器来说,插排结构比较简单,但现代家庭…...
部署Kafka
kafka:kafka_2.13-3.5.1 NOTE: Your local environment must have Java 8 installed. Apache Kafka can be started using ZooKeeper or KRaft. To get started with either configuration follow one the sections below but not both. 1 Windows单机 1.1 Kafka w…...
Open3D 进阶(11)使用GMM-Tree算法对点云配准
GMM-Tree算法 一、算法原理1、主要函数2、参考文献二、代码实现三、结果展示1、点云初始位置2、配准后的位置四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、...
算法刷题注意事项
目录 1、使用nextInt后再使用nextLine的注意事项2、判断x是否是素数3、注意字符串和数字的排序4、Arrays.asList不可修改元素 1、使用nextInt后再使用nextLine的注意事项 使用nextInt再使用nextLine会有问题,输入的回车会被nextLine给接受,可以将nextLi…...
搭建自己的pypi服务器
要搭建自己的 PyPI 服务器,您可以使用 warehouse 项目,它是 PyPI 的开源实现。下面是一些基本步骤: 准备环境: 安装 Python安装 PostgreSQL 数据库 克隆 warehouse 项目: git clone https://github.com/pypa/wareh…...
ndoe.js、npm相关笔记
1、npm 全局安装 npm config get prefix 获取 npm 全局安装路径如果全局插件不能正常使用,看环境变量是否已经配置。没有配置则把全局安装路径配置到环境变量的path中...
如何使用ArcGIS Pro制作标准地图样式国界
相信大家都浏览过标准地图服务提供的标准地图,不知道你有没有想过尝试制作里面的国界,这里为大家介绍一下制作方法,希望能对你有所帮助。 制作已定国界 在地图数据内,国界分为已定国界、未定国界和海岸线,我们先对已定…...
基于数学模型水动力模拟、水质建模、复杂河网构建技术在环境影响评价、入河排污口论证及防洪评价中的应用
目录 专题一 一维水动力模型在河流水动力模拟中的应用 专题二 一维复杂河网模型构建及建筑物设置 专题三 一维水质模型在入河排污口和环境影响评价中的应用 专题四 平面二维水动力模型的构建和验证 专题五 平面二维水动力模型在防洪影响评价中的应用 专题六 平面二维水动…...
每天学习3个小时能不能考上浙大MBA项目?
不少考生经常会问到上岸浙大MBA项目想要复习多长时间,这个问题其实没有固定答案。在行业十余年的经验总结来看,杭州达立易考教育认为基于每一位考生的个人复习时间、个人学习能力以及原有基础情况等不同,复习上岸的预期分数目标也会有差异&am…...
NVM的下载安装和使用
node包管理工具NVM让我们更加方便在各个node版本之间切换来适配不同的项目 一、下载安装 下载地址:github下载地址 https://github.com/coreybutler/nvm-windows/releases安装一直点下一步就行,可以安装在D、E盘都行,安装后检查是否安装成功…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
