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

Vue3導(dǎo)出pdf方案

這篇具有很好參考價(jià)值的文章主要介紹了Vue3導(dǎo)出pdf方案。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Vue3導(dǎo)出pdf方案

1.引入兩個(gè)依賴

npm i html2canvas
npm i jspdf

2.在utils文件夾下新建htmlToPdf.js文件

// 頁面導(dǎo)出為pdf格式
import html2Canvas from 'html2canvas';
import jsPDF from 'jspdf';

const htmlToPdf = {
  getPdf(title, loading) {
    // loading = true;
    console.log(loading);
    html2Canvas(document.querySelector('#pdfDom'), {
      allowTaint: false,
      taintTest: false,
      logging: false,
      useCORS: true,
      dpi: window.devicePixelRatio * 4, //將分辨率提高到特定的DPI 提高四倍
      scale: 4, //按比例增加分辨率
    }).then((canvas) => {
      var pdf = new jsPDF('p', 'mm', 'a4'); //A4紙,縱向
      var ctx = canvas.getContext('2d'),
        a4w = 190,
        a4h = 272, //A4大小,210mm x 297mm,四邊各保留10mm的邊距,顯示區(qū)域190x277
        imgHeight = Math.floor((a4h * canvas.width) / a4w), //按A4顯示比例換算一頁圖像的像素高度
        renderedHeight = 0;

      while (renderedHeight < canvas.height) {
        var page = document.createElement('canvas');
        page.width = canvas.width;
        page.height = Math.min(imgHeight, canvas.height - renderedHeight); //可能內(nèi)容不足一頁

        //用getImageData剪裁指定區(qū)域,并畫到前面創(chuàng)建的canvas對象中
        page
          .getContext('2d')
          .putImageData(
            ctx.getImageData(
              0,
              renderedHeight,
              canvas.width,
              Math.min(imgHeight, canvas.height - renderedHeight),
            ),
            0,
            0,
          );
        pdf.addImage(
          page.toDataURL('image/jpeg', 1.0),
          'JPEG',
          10,
          10,
          a4w,
          Math.min(a4h, (a4w * page.height) / page.width),
        ); //添加圖像到頁面,保留10mm邊距

        renderedHeight += imgHeight;
        if (renderedHeight < canvas.height) {
          pdf.addPage(); //如果后面還有內(nèi)容,添加一個(gè)空頁
        }
        // delete page;
      }
      //保存文件
      pdf.save(title + '.pdf');
      // loading = false;
      console.log(loading);
    });
  },
};

export default htmlToPdf;

擴(kuò)展:還可以傳多個(gè)不同容器id

// 頁面導(dǎo)出為pdf格式
import html2Canvas from 'html2canvas';
import jsPDF from 'jspdf';

const htmlToPdf = {
  getPdf(title, id) {
    html2Canvas(
      document.querySelector(id), 
      {
        allowTaint: false,
        taintTest: false,
        logging: false,
        useCORS: true,
        dpi: window.devicePixelRatio * 4, //將分辨率提高到特定的DPI 提高四倍
        scale: 4, //按比例增加分辨率
      }
    ).then((canvas) => {
        var pdf = new jsPDF('p', 'mm', 'a4'); //A4紙,縱向
        var ctx = canvas.getContext('2d'),
        a4w = 190,
        a4h = 272, //A4大小,210mm x 297mm,四邊各保留10mm的邊距,顯示區(qū)域190x277
        imgHeight = Math.floor((a4h * canvas.width) / a4w), //按A4顯示比例換算一頁圖像的像素高度
        renderedHeight = 0;

      while (renderedHeight < canvas.height) {
        var page = document.createElement('canvas');
        page.width = canvas.width;
        page.height = Math.min(imgHeight, canvas.height - renderedHeight); //可能內(nèi)容不足一頁

        //用getImageData剪裁指定區(qū)域,并畫到前面創(chuàng)建的canvas對象中
        page
          .getContext('2d')
          .putImageData(
            ctx.getImageData(
              0,
              renderedHeight,
              canvas.width,
              Math.min(imgHeight, canvas.height - renderedHeight),
            ),
            0,
            0,
          );
        pdf.addImage(
          page.toDataURL('image/jpeg', 1.0),
          'JPEG',
          10,
          10,
          a4w,
          Math.min(a4h, (a4w * page.height) / page.width),
        ); //添加圖像到頁面,保留10mm邊距

        renderedHeight += imgHeight;
        if (renderedHeight < canvas.height) {
          pdf.addPage(); //如果后面還有內(nèi)容,添加一個(gè)空頁
        }
        // delete page;
      }
    });
  },
};

export default htmlToPdf;

3.來到需要將vue轉(zhuǎn)成pdf的頁面

...
<!-- 按鈕 -->
<el-button size="mini" type="primary" @click="pdfFunc" :loading="loading">
  轉(zhuǎn)成pdf
</el-button>
...
<div id="pdfDom">
	<!-- 此處是希望轉(zhuǎn)成pdf的部分的內(nèi)容,用一個(gè)大div盒子包起來 -->
</div>
<script setup>
// 導(dǎo)入htmlToPdf.js
import htmlToPdf from '../utils/htmlToPdf';
// 可在methods定義
const pdfFunc = () => {   
	 loading.value = true;
	 // 調(diào)用htmlToPdf工具函數(shù)
     htmlToPdf.getPdf('文檔名稱');
     // 定時(shí)器模擬按鈕loading動畫的時(shí)間
      setTimeout(() => {
        loading.value = false;
        ElMessage.success('打印成功!');
      }, 1000);
}
</script>

methods:

    pdfFunc() {
      // 調(diào)用htmlToPdf工具函數(shù)
      htmlToPdf.getPdf('文檔名稱');
      // 定時(shí)器模擬按鈕loading動畫的時(shí)間
      setTimeout(() => {
      }, 1000);
    },

擴(kuò)展:多個(gè)容器不同id

      // 容器id="pdfCompany"
      pdfFunc() {
        this.loadingFlag = true;	// 動畫加載事件
        // 調(diào)用htmlToPdf工具函數(shù)
        htmlToPdf.getPdf('中小企業(yè)認(rèn)定',"#pdfCompany");
        // 定時(shí)器模擬按鈕loading動畫的時(shí)間
        setTimeout(() => {
          this.loadingFlag = false;
        }, 1000);
      }

jsPdf

介紹一下純jspdf用法,將一個(gè)圖片列表導(dǎo)出為pdf文件,根據(jù)圖片寬高計(jì)算在pdf中的位置

jsPDF 是一個(gè)基于 HTML5 的客戶端解決方案,用于生成各種用途的 PDF 文檔。

官網(wǎng)地址:https://rawgit.com/MrRio/jsPDF/master/docs/

1、安裝:npm install jspdf

2、引入:import jsPDF from “jspdf”

3、使用:

let pdf = new jsPDF('p', 'pt', [pdfX, pdfY]);

第一個(gè)參數(shù): l:橫向 p:縱向

第二個(gè)參數(shù):測量單位(“pt”,“mm”, “cm”, “m”, “in” or “px”)

第三個(gè)參數(shù):可以是下面格式,默認(rèn)為“a4”

  • a0 - a10
  • b0 - b10
  • c0 - c10
  • dl
  • letter
  • government-letter
  • legal
  • junior-legal
  • ledger
  • tabloid
  • credit-card

默認(rèn)為“a4”。如果您想使用自己的格式,只需將大小作為數(shù)字?jǐn)?shù)組傳遞,例如[595.28, 841.89];

*刪除某頁pdf:*

let targetPage = pdf.internal.getNumberOfPages(); //獲取總頁
pdf.deletePage(targetPage); // 刪除目標(biāo)頁

*保存pdf文檔:*

 pdf.save(`測試.pdf`);

Example:

1、導(dǎo)出一整頁pdf文件,根據(jù)圖片高度動態(tài)設(shè)置pdf的位置,*根據(jù)自己的數(shù)據(jù)格式組裝導(dǎo)出方法*

/**
   * 導(dǎo)出PDF一頁 PDF中的頁面寬度或高度不能超過14400個(gè)userUnit。jsPDF將寬度/高度限制為14400
   * @param pageList
   */
  const exportPdf = (pageList: any) => {
    let [imgX, imgY] = [595.28, 841.89]; // a4紙尺寸[595.28, 841.89];
    var pdfX = imgX
    var pdfY = getLength(pageList);
    let pdf = new jsPDF('p', 'pt', [pdfX, pdfY]); //l:橫向  p:縱向
    let isAddpage = 0;
    for (let [index, item] of pageList.entries()) {
      for (let j = 0; j < item.imageList.length; j++) {
        const image = item.imageList[j];
        let imgHeight = imgX / (image.width / image.height);
        pdf.addImage(image.data, 'JPEG', 0, isAddpage, imgX, imgHeight);
        isAddpage += imgHeight;
      }
    }
    pdf.save(`全部教材_${getTime()}.pdf`);
  }

2、分頁導(dǎo)出文章來源地址http://www.zghlxwxcb.cn/news/detail-594127.html

  const exportPdf = (pageList: any) => {
    let [imgX, imgY] = [595.28, 841.89];
    let pdf = new jsPDF('p', 'pt', 'a4');
    for (let [index, item] of pageList.entries()) {
      for (let j = 0; j < item.imageList.length; j++) {
        const image = item.imageList[j];
        let imgHeight = imgX / (image.width / image.height); //根據(jù)寬度計(jì)算高度
        pdf.addImage(image.data, 'JPEG', 0, 0, imgX, imgHeight);
        pdf.addPage();
      }
    }
    let targetPage = pdf.internal.getNumberOfPages();
    pdf.deletePage(targetPage); // 刪除最后一頁
    pdf.save(`測試.pdf`);
  }

到了這里,關(guān)于Vue3導(dǎo)出pdf方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Vue3 -- PDF展示、添加簽名(帶筆鋒)、導(dǎo)出

    Vue3 -- PDF展示、添加簽名(帶筆鋒)、導(dǎo)出

    實(shí)現(xiàn)功能的時(shí)候采用了兩個(gè)方案,主要是第一個(gè)方案最后的實(shí)現(xiàn)效果并不太理想,但實(shí)現(xiàn)起來比較簡單,要求不高時(shí)可以使用。 該 DEMO 會一次性加載并展示所有的 PDF 頁面,目的是方便在手機(jī)上觀看時(shí)上下滑動,如果要做成上一頁下一頁的效果,需要自行實(shí)現(xiàn)。 我是用開源項(xiàng)

    2024年02月04日
    瀏覽(19)
  • 在uni中使用vue3寫h5的pdf導(dǎo)出

    先安裝依賴 把dom轉(zhuǎn)canvas,屏幕截圖基于 DOM,因此可能不是 100% 準(zhǔn)確到真實(shí)表示,因?yàn)樗粫谱鲗?shí)際的屏幕截圖,而是根據(jù)頁面上可用的信息構(gòu)建屏幕截圖。 components/pdf? 創(chuàng)建pdf文件夾 在main文件中引入 在需要的頁面綁定id? 事件

    2024年02月16日
    瀏覽(18)
  • vue3前端excel導(dǎo)出;組件表格,自定義表格導(dǎo)出;Vue3 + xlsx + xlsx-style

    vue3前端excel導(dǎo)出;組件表格,自定義表格導(dǎo)出;Vue3 + xlsx + xlsx-style

    當(dāng)畫面有自定義的表格或者樣式過于復(fù)雜的表格時(shí),導(dǎo)出功能可以由前端實(shí)現(xiàn) 1. 使用的插件 : sheet.js-xlsx 文檔地址:https://docs.sheetjs.com/ 中文地址:https://geekdaxue.co/read/SheetJS-docs-zh/README.md xlsx-style:https://www.npmjs.com/package/xlsx-style 2. 安裝引用 安裝插件-vue3 引用插件 3. 組件表格

    2024年04月26日
    瀏覽(30)
  • Vue3 exceljs庫實(shí)現(xiàn)前端導(dǎo)入導(dǎo)出Excel

    Vue3 exceljs庫實(shí)現(xiàn)前端導(dǎo)入導(dǎo)出Excel

    最近在開發(fā)項(xiàng)目時(shí)需要批量導(dǎo)入和導(dǎo)出Excel數(shù)據(jù),在實(shí)現(xiàn)這個(gè)需求時(shí),我們既可以在前端完成數(shù)據(jù)解析和文件生成工作,也可以通過前端發(fā)起導(dǎo)入以及導(dǎo)出請求后,后端實(shí)現(xiàn)解析文件流解析文件內(nèi)容以及生成文件并提供下載鏈接的功能。 相較于后端處理Excel數(shù)據(jù)而言,使用前

    2024年03月14日
    瀏覽(18)
  • 前端技術(shù)Html,Css,JavaScript,Vue3

    1.基本標(biāo)簽 2.文本格式化 3.鏈接 4.圖片 5.無序列表 6.有序列表 7.表格 8.表單 1.選擇器 2.文本和字體 3.鏈接 4.隱藏 5.定位position 6.浮動 7.對齊 8.圖像 1.輸出 2.函數(shù) 3.常用事件 4.DOM 5.改變Html 6.DOM 元素 (節(jié)點(diǎn)) 尾部創(chuàng)建新的 HTML 元素 (節(jié)點(diǎn)) - appendChild() 頭部創(chuàng)建新的 HTML 元素 (節(jié)點(diǎn))

    2024年02月13日
    瀏覽(53)
  • 使用ExcelJS實(shí)現(xiàn)excel的前端導(dǎo)出功能(Vue3+TS)

    ExcelJS :讀取,操作并寫入電子表格數(shù)據(jù)和樣式到 XLSX 和 JSON 文件。一個(gè) Excel 電子表格文件逆向工程項(xiàng)目。 github中文文檔:https://github.com/exceljs/exceljs/blob/master/README_zh.md ?封裝excel.ts工具文件 表格頁面調(diào)用excel工具文件?

    2024年02月14日
    瀏覽(29)
  • VUE通用后臺管理系統(tǒng)(四)前端導(dǎo)出文件(CSV、XML、HTML、PDF、EXCEL)

    VUE通用后臺管理系統(tǒng)(四)前端導(dǎo)出文件(CSV、XML、HTML、PDF、EXCEL)

    常見的導(dǎo)出格式:CSV、XML、HTML、PDF、EXCEL 1)準(zhǔn)備工作 安裝所需相關(guān)依賴 前兩個(gè)是PDF格式需要的依賴,后兩個(gè)是excel格式所需,如果沒有需求這兩種格式的可以忽略這一步 然后畫頁面 ? 頁面效果 2)導(dǎo)出CSV格式的文件 新建src/utils/utils.js文件 寫入exportCsv方法,columns為表頭,

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

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

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

    2024年02月03日
    瀏覽(28)
  • 前端2023最全面試題(javaScript、typeScript、vue2、vue3、html、css、uniapp、webpack、vite、react)

    答案:JavaScript中的閉包是一種函數(shù),它有權(quán)訪問其詞法環(huán)境的變量和其它函數(shù)。這意味著,即使其包含它的函數(shù)已經(jīng)執(zhí)行完畢,其詞法環(huán)境仍然存在,因此可以訪問其作用域內(nèi)的變量。 答案:回調(diào)函數(shù)是在某個(gè)特定事件之后執(zhí)行的函數(shù)。在JavaScript中,通常使用回調(diào)函數(shù)來處

    2024年02月06日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包