前端使用pdf-lib库实现pdf合并,window.open预览合并后的pdf

这篇具有很好参考价值的文章主要介绍了前端使用pdf-lib库实现pdf合并,window.open预览合并后的pdf。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近出差开了好多发票,写了一个pdf合并网站,用于把多张发票pdf合并成一张,方便打印

使用pdf-lib这个库实现的pdf合并功能,预览使用的是浏览器自身查看pdf功能
源码

网页地址 https://zqy233.github.io/PDF-merge/文章来源地址https://www.toymoban.com/news/detail-515080.html

<!DOCTYPE html>
<html>
  <head>
    <title>PDF合并</title>
    <script src="https://cdn.jsdelivr.net/npm/pdf-lib@1.17.1/dist/pdf-lib.min.js"></script>
  </head>
  <body>
    <input type="file" id="fileInput" multiple />
    <button onclick="previewMergePDF()">预览合并的PDF</button>
    <button onclick="downloadMergePDF()">下载合并的PDF</button>
    <script>
      async function previewMergePDF() {
        const fileInput = document.getElementById("fileInput");
        const files = fileInput.files;
        if (files.length < 2) {
          alert("请至少选择两个PDF文件进行合并!");
          return;
        }
        // 创建一个新的PDF文档
        const mergedPdf = await PDFLib.PDFDocument.create();
        // 遍历选择的每个文件
        for (let i = 0; i < files.length; i++) {
          const file = files[i];
          const reader = new FileReader();
          // 读取文件内容
          const fileContents = await new Promise((resolve, reject) => {
            reader.onload = function (event) {
              resolve(event.target.result);
            };
            reader.onerror = function (event) {
              reject(new Error("文件读取错误。"));
            };
            reader.readAsArrayBuffer(file);
          });
          // 将PDF文件添加到合并的PDF文档中
          const pdf = await PDFLib.PDFDocument.load(fileContents);
          const copiedPages = await mergedPdf.copyPages(
            pdf,
            pdf.getPageIndices()
          );
          copiedPages.forEach((page) => {
            mergedPdf.addPage(page);
          });
        }
        // 使用浏览器自带预览功能,预览合并后的PDF
        const mergedPdfBytes = await mergedPdf.save();
        const mergedPdfBlob = new Blob([mergedPdfBytes], {
          type: "application/pdf",
        });
        const fileURL = URL.createObjectURL(mergedPdfBlob);
        window.open(fileURL);
      }
      async function downloadMergePDF() {
        const fileInput = document.getElementById("fileInput");
        const files = fileInput.files;
        if (files.length < 2) {
          alert("请至少选择两个PDF文件进行合并!");
          return;
        }
        const mergedPdf = await PDFLib.PDFDocument.create();
        for (let i = 0; i < files.length; i++) {
          const file = files[i];
          const reader = new FileReader();
          const fileContents = await new Promise((resolve, reject) => {
            reader.onload = function (event) {
              resolve(event.target.result);
            };
            reader.onerror = function (event) {
              reject(new Error("文件读取错误。"));
            };
            reader.readAsArrayBuffer(file);
          });
          const pdf = await PDFLib.PDFDocument.load(fileContents);
          const copiedPages = await mergedPdf.copyPages(
            pdf,
            pdf.getPageIndices()
          );
          copiedPages.forEach((page) => {
            mergedPdf.addPage(page);
          });
        }
        const mergedPdfFile = await mergedPdf.saveAsBase64();
        const downloadLink = document.createElement("a");
        downloadLink.href = "data:application/pdf;base64," + mergedPdfFile;
        downloadLink.download = "merged.pdf";
        downloadLink.click();
      }
    </script>
  </body>
</html>

到了这里,关于前端使用pdf-lib库实现pdf合并,window.open预览合并后的pdf的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端实现pdf预览

    前言:项目中之前pdf预览是客户端andrio实现的,现在需要前端H5自己实现预览功能,项目是基于vue的H5项目,记录一下pdf预览功能实现的过程和问题 一、利用iframe实现pdf预览 1、实现过程 将pdf路径设置给iframe的src属性 2、遇到的问题 电脑上测试正常,但是安卓端会出现空白页

    2024年02月13日
    浏览(33)
  • 前端实现PDF预览【vue】

    前言:项目中提出这样一个需求,在移动端H5页面预览pdf功能。pdf文件由后端返回的一个地址,前端实现展示预览pdf文件 在此仅提供两种方法: 一、使用iframe标签通过src属性直接展示pdf文件         坑点:兼容比较差,PC端能正常展示,移动端会出现空白的问题 二、使用第

    2024年01月16日
    浏览(52)
  • 前端实现 PDF 预览的常见方案

    由于在搭建个人博客时,想实现在线预览 pdf 格式的个人简历,经过查阅大致有三大类实现方案;本文共涉及以下 5 种实现方案,如下所示: 使用 HTML 标签 iframe 标签 embed 标签 object 标签 使用第三方插件 PDF.js PDFObject PDF 文件转化成图片进行展示 第一类方案: 使用 HTML 标签

    2024年01月20日
    浏览(53)
  • 前端实现pdf,图片,word文件预览

    需求:实现一个在线预览pdf、excel、word、图片等文件的功能。 介绍:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代码实现所有功能,建议以下的预览文件标签可以在外层包裹一层弹窗。 iframe标签能够将另一个HTML页面嵌入到当前页面中,我们的图片也能够使用iframe标签来

    2024年02月11日
    浏览(54)
  • 前端pdf预览、pdfjs的使用

    关于前端预览pdf,最简单的方式是使用 window.open() 直接在浏览器的新窗口打开就好,浏览器本身也是提供了非常多的功能 但是因为客户的某些需求,不能使用浏览器自身的功能。后来又使用了 https://github.com/gjTool/pdfh5,也挺好用的,操作比较简单。使用了一段时间吧,但是还

    2024年02月12日
    浏览(41)
  • 前端实现PDF预览:简单而高效的方法

    PDF是一种常用的文件格式,但在网页中直接预览PDF文件可能会带来一些挑战。本文将介绍一种简单而高效的前端方法,以实现PDF文件的预览。 最简单的方法是使用iframe标签来嵌入PDF文件。代码如下所示: 上述代码通过设置iframe的src属性为PDF文件的路径,将PDF文件嵌入到网页

    2024年02月05日
    浏览(47)
  • 前端实现文件预览(pdf、excel、word、图片)

    需求:实现一个在线预览pdf、excel、word、图片等文件的功能。 介绍:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代码实现所有功能,建议以下的预览文件标签可以在外层包裹一层弹窗。 sandbox 这个属性如果是单纯预览图片可以不使用,该属性对呈现在 iframe 框架中的内容

    2024年02月10日
    浏览(59)
  • vue 纯前端预览pdf,纯前端实现pdf加水印下载文件也带水印,防止pdf下载

      原理:主要是利用pdfh5这个插件来完成的   使用方法:   1.页面需要有一个容器例子:div id=\\\"demo\\\"/div   2.下载pdfh5插件 npm install pdfh5   (注意:webpack5之后不会下载polyfill 需要手动下载 所以引入pdfh5的时候会报错)   解决方案:下载 node-polyfill-webpack-plugin npm install node-polyfill-

    2024年04月15日
    浏览(65)
  • 记录--前端实现文件预览(pdf、excel、word、图片)

    需求:实现一个在线预览pdf、excel、word、图片等文件的功能。 介绍:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代码实现所有功能,建议以下的预览文件标签可以在外层包裹一层弹窗。 iframe标签能够将另一个HTML页面嵌入到当前页面中,我们的图片也能够使用iframe标签来

    2024年02月09日
    浏览(63)
  • vue中前端实现pdf预览(含vue-pdf插件用法)

      场景:前端需要根据后端返回的线上pdf的地址,实现pdf的预览功能。 情况一:后端返回的pdf地址,粘贴到浏览器的url框中,是可以在浏览器中直接进行预览的。 方法(1)可以直接使用window.open(\\\'获取到的pdf地址\\\')重新打开一个浏览器页签,通过浏览器页签直接实现预览功

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包