国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

批量打印-----jsPDF將圖片轉(zhuǎn)為pdf,并合并pdf

這篇具有很好參考價(jià)值的文章主要介紹了批量打印-----jsPDF將圖片轉(zhuǎn)為pdf,并合并pdf。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

安裝依賴并引入

import jsPDF from 'jspdf';
import { PDFDocument,  } from 'pdf-lib';

注意一、
使用jspdf將圖片(jpg/jpeg/png/bmp)轉(zhuǎn)pdf(記為pdfA),得到的pdf(pdfA)和需要合并的pdf(記為pdfB)類型不一致,需要將pdfA轉(zhuǎn)為pdfB類型,才能合并,使用arraybuffer轉(zhuǎn),具體如下

// pdf--pdfA--是使用jspdf將圖片生成的pdf
// file--pdfB--是合并pdf需要的pdf格式
const jsPdfBytes = pdf.output('arraybuffer');
const file = await PDFDocument.load(jsPdfBytes);

注意二、
jspdf 可轉(zhuǎn)pdf的圖片類型有jpg、jpeg、png、bpm,
不支持 tif 和 tiff 圖片類型

.tif和.tiff格式的文件需要通過(guò)安裝依賴
“tiff.js”: “^1.0.0”,
也是使用arrayBuffer,將圖片格式轉(zhuǎn)為base64,(jpg/jpeg格式,然后將該格式通過(guò)jspdf轉(zhuǎn)為pdf文件)

if(x.FILE_TYPE == '.tif' || x.FILE_TYPE == '.tiff' ){
     const response = await fetch(imgUrl);
     const buffer = await response.arrayBuffer();
     const Tiff = require("tiff.js");
     const tiff = new Tiff({ buffer });
     imgUrl = tiff.toDataURL();
}

注意三、
async/await 和 new Promise 控制異步任務(wù)順序執(zhí)行,執(zhí)行完imgToPdf()方法,再執(zhí)行合并pdf 方法

注意四、
jspdf 將圖片轉(zhuǎn)為pdf,注意圖片大小的自適應(yīng),可以通過(guò)設(shè)置圖片的最大寬度來(lái)控制圖片自適應(yīng)的大小
const imageWidth = 100;

注意五、
因?yàn)楫惒饺蝿?wù)執(zhí)行可能導(dǎo)致批量選擇文件的順序與實(shí)際獲得的文件順序不一致,所以獲取到的this.pdfFileArr,需要通過(guò)id 調(diào)整為正確的pdf文件打印順序

圖片轉(zhuǎn)pdf代碼:

async imgToPdf(arr) {
      const promises = [];
      
      arr.forEach(async (x)=>{
        const promise = new Promise(async (resolve,reject)=>{
          //jsPdf 僅支持JPG/JPEG/PNG/BMP格式,不支持tif
          let id = x.ID
          let imgUrl = window.URL.createObjectURL(x.FILE)
          //如果是tif或者tiff文件,需要轉(zhuǎn)化后再進(jìn)行 圖片轉(zhuǎn)pdf操作
          if(x.FILE_TYPE == '.tif' || x.FILE_TYPE == '.tiff' ){
            const response = await fetch(imgUrl);
            const buffer = await response.arrayBuffer();
            const Tiff = require("tiff.js");
            const tiff = new Tiff({ buffer });
            imgUrl = tiff.toDataURL();
          }
          const pdf = new jsPDF();
          //添加header
          //pdf.text('PDF Header', 10, 10);
          // 將圖片繪制到pdf中
          const imageWidth = 100; // 設(shè)定圖片的最大寬度
          const imageHeight = 0; // 設(shè)置為 0,將根據(jù)寬度等比例計(jì)算高度

          const img = new Image();
          img.src = imgUrl
          
          let finalWidth = imageWidth;
          let finalHeight = imageHeight;

          img.onload = function () {
            const width = img.width;
            const height = img.height;
            
            // 計(jì)算圖片適應(yīng) PDF 頁(yè)面的尺寸
            const aspectRatio = width / height;
            
            if (finalHeight === 0) {
              finalHeight = finalWidth / aspectRatio;
            } else if (finalWidth === 0) {
              finalWidth = finalHeight * aspectRatio;
            }
            
          };
          // 添加圖片到 PDF
          //pdf.addImage(imgUrl, 'JPEG', 10, 10, finalWidth, finalHeight, null, 'SLOW')
          //圖片居中顯示
          pdf.addImage(imgUrl, 'JPEG', (pdf.internal.pageSize.getWidth() - finalWidth) / 2, 20, finalWidth, finalHeight, null, 'SLOW')



          const jsPdfBytes = pdf.output('arraybuffer');
          const file = await PDFDocument.load(jsPdfBytes);
        
          //const blob = new Blob([file], { type: 'application/PDF' })
        
          let obj = {
            ID: id,
            FILE: file
          }
          console.log("執(zhí)行了------imgToPdf")
          resolve(obj)

        }).then((obj)=>{
          this.pdfFileArr.push(obj)
        }).catch((error)=>{
          this.loadLoading = false
          alert('錯(cuò)誤信息為:'+error)
        })

        promises.push(promise);
      })

      return Promise.all(promises)
    },

合并pdf代碼

async mergePdf(sortList) {
      console.log('最終需要合并的pdf數(shù)組', sortList)
      let files = sortList
      // 創(chuàng)建一個(gè)新的PDF文檔
      const mergedPdf = await PDFDocument.create();
      // 遍歷選擇的每個(gè)文件
      for (let i = 0; i < files.length; i++) {
       /**
		這里為.pdf 文件的遍歷操作
		通過(guò)FileReader 讀取.pdf文件,轉(zhuǎn)為合并pdf所需要的pdf類型
        const file = files[i];
        const url = window.URL.createObjectURL(file)
        const reader = new FileReader();
        // 讀取文件內(nèi)容
        const fileContents = await new Promise((resolve, reject) => {
          reader.onload = function (event) {
            resolve(event.target.result);
          };
          reader.onerror = function (event) {
            reject(new Error("文件讀取錯(cuò)誤。"));
          };
          reader.readAsArrayBuffer(file); //blob
        });
        // 將PDF文件添加到合并的PDF文檔中
        const pdf = await PDFDocument.load(fileContents);

        console.log("合并pdf---", pdf)
        **/

        const pdf = files[i];

        const copiedPages = await mergedPdf.copyPages(
          pdf,
          pdf.getPageIndices()
        );
        copiedPages.forEach((page) => {
          mergedPdf.addPage(page);
        });

        
      }

      const uint8Array = await mergedPdf.save();
      let mergeBuffer = Buffer.from(uint8Array);

      const url = window.URL.createObjectURL(new Blob([mergeBuffer], { type: 'application/pdf;charset=utf-8' }));
      this.mergePdfUrl = url

      console.log("pdf合并完成")
      console.log("新合并的pdf--", url)
      console.log("新合并的pdf--", mergedPdf)

    },

將獲得的pdf文件url給iframe即可預(yù)覽,iframe 自帶toolbar工具欄打印

<iframe ref="printPdf"  id="printIframe" 
            style="overflow:hidden;filter: Chroma(Color=white);border: none;width: 100%; height: 100%"
            :src="item.url + '#toolbar=0'"></iframe>
            <!-- #view=FitH,top -->

如果自己編寫打印接口,可以通過(guò)id獲取到該iframe,
調(diào)起 contentWindow.print() 即可打印該dom元素文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-639737.html

document.getElementById('printIframe').contentWindow.print();

到了這里,關(guān)于批量打印-----jsPDF將圖片轉(zhuǎn)為pdf,并合并pdf的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【jspdf】前端html生成pdf的兩種辦法 以及 引入中文字體

    【jspdf】前端html生成pdf的兩種辦法 以及 引入中文字體

    1、使用canvas把html生成圖片,然后使用jspdf生成pdf。優(yōu)點(diǎn):生成的pdf 樣式還原度極高,缺點(diǎn):圖片形式的pdf無(wú)法編輯 2、直接使用jspdf的html方法直接把html生成pdf。優(yōu)點(diǎn):可編輯,缺點(diǎn):只是把文本內(nèi)容摟出來(lái)生成pdf,也就是說(shuō)樣式基本無(wú),而且jspdf不支持中文字體的,如果有中

    2024年02月10日
    瀏覽(23)
  • Html轉(zhuǎn)PDF,前端JS實(shí)現(xiàn)Html頁(yè)面導(dǎo)出PDF(html2canvas+jspdf)

    Html轉(zhuǎn)PDF,前端JS實(shí)現(xiàn)Html頁(yè)面導(dǎo)出PDF(html2canvas+jspdf)

    一、背景介紹 ? 當(dāng)我們?cè)诓幌敫淖兒蠖舜a的同時(shí)想是純html頁(yè)面導(dǎo)出PDF,那么(html2canvas+jspdf)就是無(wú)疑最好的選擇,導(dǎo)出時(shí)它不占用我們服務(wù)器的資源,而是由用戶本地自行執(zhí)行js文件下載PDF,不占用我們系統(tǒng)的帶寬,所以這無(wú)非是最好的選擇方式。 二、疑問(wèn) 1、為什么要

    2024年01月23日
    瀏覽(25)
  • 前端vue基于html2canva jspdf 實(shí)現(xiàn)前端頁(yè)面加水印 并導(dǎo)出頁(yè)面PDF

    前端vue基于html2canva jspdf 實(shí)現(xiàn)前端頁(yè)面加水印 并導(dǎo)出頁(yè)面PDF

    隨著技術(shù)的發(fā)展,開發(fā)的復(fù)雜度也越來(lái)越高,傳統(tǒng)開發(fā)方式將一個(gè)系統(tǒng)做成了整塊應(yīng)用,經(jīng)常出現(xiàn)的情況就是一個(gè)小小的改動(dòng)或者一個(gè)小功能的增加可能會(huì)引起整體邏輯的修改,造成牽一發(fā)而動(dòng)全身。通過(guò)組件化開發(fā),可以有效實(shí)現(xiàn)單獨(dú)開發(fā),單獨(dú)維護(hù),而且他們之間可以隨

    2024年02月03日
    瀏覽(28)
  • 使用Python批量將Word文件轉(zhuǎn)為PDF文件

    使用Python批量將Word文件轉(zhuǎn)為PDF文件

    說(shuō)明:在使用Minio服務(wù)器時(shí),無(wú)法對(duì)word文件預(yù)覽,如果有需要的話,可以將word文件轉(zhuǎn)為pdf文件,再存儲(chǔ)到Minio中,本文介紹如何批量將word文件,轉(zhuǎn)為pdf格式的文件; 首先,需要安裝一個(gè)庫(kù), pywin32 ; 可以在cmd窗口敲下面的命令安裝,使用阿里云鏡像: 如果你使用的是pycha

    2024年02月12日
    瀏覽(23)
  • html2Canvas+jsPDF 下載PDF 遇到跨域的對(duì)象存儲(chǔ)的圖片無(wú)法顯示

    html2Canvas+jsPDF 下載PDF 遇到跨域的對(duì)象存儲(chǔ)的圖片無(wú)法顯示

    ? ? 一、問(wèn)題原因? 對(duì)象存儲(chǔ)的域名和你網(wǎng)址的域名不一樣,此時(shí)用Canvas相關(guān)插件 將DOM元素轉(zhuǎn)化為PDF,就會(huì)出現(xiàn)跨域錯(cuò)誤。 二、解決辦法? 兩步 1. 圖片元素上設(shè)置屬性??crossorigin=\\\"anonymous\\\"? 支持原生img和eleme組件 ?2. 存儲(chǔ)桶設(shè)置資源跨域訪問(wèn) 阿里騰訊云為例:↓ 阿里云OS

    2024年02月15日
    瀏覽(19)
  • Python實(shí)現(xiàn)Word、Excel、PPT批量轉(zhuǎn)為PDF

    Python實(shí)現(xiàn)Word、Excel、PPT批量轉(zhuǎn)為PDF

    今天看見了一個(gè)有意思的腳本Python批量實(shí)現(xiàn)Word、EXCLE、PPT轉(zhuǎn)PDF文件。 因?yàn)槲移綍r(shí)word用的比較的多,所以深有體會(huì),具體怎么實(shí)現(xiàn)的我們就不討論了,因?yàn)檫@個(gè)去學(xué)了也沒(méi)什么提升,不然也不會(huì)當(dāng)作腳本了。這里我將其放入了pyzjr庫(kù)中,也方便大家進(jìn)行調(diào)用。 你可以去下載p

    2024年02月10日
    瀏覽(96)
  • 純前端--原生js將html頁(yè)面變成pdf文件(html2canvas+jsPDF)

    1、將文檔放在本地,用原生js進(jìn)行引用和使用。 ① 新建一個(gè)名為 html2canvas.min.js 的文件,并且將線上的內(nèi)容進(jìn)行復(fù)制。 ② 引入 js 文件: 2、使用 npm 進(jìn)行安裝使用: 待續(xù)。。。 github 中文網(wǎng)站 CDN Jspdf.es.js:ES 2015 模塊格式。 Jspdf.umd.js:UMD模塊格式,用于 AMD 或腳本標(biāo)簽加載

    2024年02月08日
    瀏覽(21)
  • 多張圖片轉(zhuǎn)為pdf怎么弄?

    多張圖片轉(zhuǎn)為pdf怎么弄?

    ? ??多張圖片轉(zhuǎn)為pdf怎么弄?在網(wǎng)絡(luò)傳輸過(guò)程中,為了避免圖片格式文件出現(xiàn)差錯(cuò),并確保圖片的清晰度和色彩不因不同設(shè)備而有所改變,常見的做法是將圖片轉(zhuǎn)換為PDF格式。然而,當(dāng)涉及到多張圖片時(shí),逐一轉(zhuǎn)換將會(huì)變得相當(dāng)繁瑣,這時(shí)候我們可以將多張圖片同時(shí)間轉(zhuǎn)換成

    2024年02月10日
    瀏覽(22)
  • Word轉(zhuǎn)為PDF后圖片模糊怎么辦?Word轉(zhuǎn)為PDF的技巧介紹

    Word轉(zhuǎn)為PDF后圖片模糊怎么辦?Word轉(zhuǎn)為PDF的技巧介紹

    將Word文檔轉(zhuǎn)為PDF是我們?nèi)粘^k公和文檔處理中常見的需求。PDF格式的優(yōu)勢(shì)在于跨平臺(tái)兼容性、保留原始格式、文檔保護(hù)以及方便共享和分發(fā)等方面。本文將探討Word轉(zhuǎn)為PDF后圖片模糊怎么辦?Word轉(zhuǎn)為PDF的技巧有哪些?通過(guò)這些問(wèn)題的答案,可以幫助您更好的利用文件轉(zhuǎn)換工具。

    2024年02月10日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包