欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3將頁面生成pdf導(dǎo)出的操作指南

 更新時間:2023年07月31日 11:22:49   作者:唐志遠(yuǎn)  
最近工作中有需要將一些前端頁面(如報表頁面等)導(dǎo)出為pdf的需求,下面這篇文章主要給大家介紹了關(guān)于vue3 如何將頁面生成 pdf 導(dǎo)出,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

最近工作中有需要將一些前端頁面(如報表頁面等)導(dǎo)出為pdf的需求,博主采用的是html2Canvas + jspdf。

步驟

1.引入兩個依賴

npm i html2canvas
npm i jspdf

點擊jsPDF GitHub、jsPDF 文檔 查看關(guān)于jsPDF更多信息。

2.在utils文件夾下新建html2pdf.ts文件

import html2canvas from 'html2canvas';
import jsPDF from 'jspdf'
export const htmlToPDF = async (htmlId: string, title: string = "報表", bgColor = "#fff") => {
    let pdfDom: HTMLElement | null = document.getElementById(htmlId) as HTMLElement
    pdfDom.style.padding = '0 10px !important'
    const A4Width = 595.28;
    const A4Height = 841.89;
    let canvas = await html2canvas(pdfDom, {
        scale: 2,
        useCORS: true,
        backgroundColor: bgColor,
    });
    let pageHeight = (canvas.width / A4Width) * A4Height;
    let leftHeight = canvas.height;
    let position = 0;
    let imgWidth = A4Width;
    let imgHeight = (A4Width / canvas.width) * canvas.height;
    /*
     根據(jù)自身業(yè)務(wù)需求  是否在此處鍵入下方水印代碼
    */
    let pageData = canvas.toDataURL("image/jpeg", 1.0);
    let PDF = new jsPDF("p", 'pt', 'a4');
    if (leftHeight < pageHeight) {
        PDF.addImage(pageData, "JPEG", 0, 0, imgWidth, imgHeight);
    } else {
        while (leftHeight > 0) {
            PDF.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight);
            leftHeight -= pageHeight;
            position -= A4Height;
            if (leftHeight > 0) PDF.addPage();
        }
    }
    PDF.save(title + ".pdf");
}

如果你想給pdf加上水印,則添加下面這段代碼:

const ctx: any = canvas.getContext('2d');
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.rotate((20 * Math.PI) / 180);
ctx.font = '20px Microsoft Yahei';
ctx.fillStyle = 'rgba(184, 184, 184, 0.8)';
for (let i = canvas.width * -1; i < canvas.width; i += 240) {
    for (let j = canvas.height * -1; j < canvas.height; j += 200) {
        // 填充文字,x 間距, y 間距
        ctx.fillText('水印名', i, j);
    }
}

3.在目標(biāo)頁面引入方法即可

import { htmlToPDF } from '@/utils/html2pdf'
<div id="test-id" style="padding: 20px 0;">
    <div style="background: #000;width: 100px;height: 100px;margin: auto;"></div>
    <p>test</p>
    <p>test</p>
    <p>test</p>
    <p>test</p>
    <p>test</p>
    <p>test</p>
    <p>test</p>
</div>
<button @click="() => htmlToPDF('test-id','test pdf')">導(dǎo)出</button>

效果如下:

到此這篇關(guān)于vue3將頁面生成pdf導(dǎo)出的操作指南的文章就介紹到這了,更多相關(guān)vue3將頁面生成pdf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Vue 換膚方案驗證

    詳解Vue 換膚方案驗證

    這篇文章主要介紹了Vue 換膚方案驗證,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Vue路由跳轉(zhuǎn)問題記錄詳解

    Vue路由跳轉(zhuǎn)問題記錄詳解

    本篇文章主要介紹了Vue路由跳轉(zhuǎn)問題記錄詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Vue完整版和runtime版的區(qū)別詳解

    Vue完整版和runtime版的區(qū)別詳解

    這篇文章主要為大家介紹了Vue完整版和runtime版的區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 在vue2項目中使用dart-sass的問題及解決方法

    在vue2項目中使用dart-sass的問題及解決方法

    在Vue2項目中,使用dart-sass替代node-sass可以解決安裝困難和環(huán)境兼容問題,VueCLI3+用戶可直接使用,而VueCLI2用戶需升級VueCLI和項目,具體方法包括修改package.json依賴并使用.scss文件編寫樣式,此更改有助于提升項目的開發(fā)效率和跨平臺兼容性
    2024-09-09
  • element組件中自定義組件的樣式不生效問題(vue scoped scss無效)

    element組件中自定義組件的樣式不生效問題(vue scoped scss無效)

    這篇文章主要介紹了解決element組件中自定義組件的樣式不生效問題(vue scoped scss無效),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue2.0項目中使用Ueditor富文本編輯器示例代碼

    vue2.0項目中使用Ueditor富文本編輯器示例代碼

    本篇文章主要介紹了vue2.0項目中使用Ueditor富文本編輯器示例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • vue實現(xiàn)帶自動吸附功能的懸浮球

    vue實現(xiàn)帶自動吸附功能的懸浮球

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)帶自動吸附功能的懸浮球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue鼠標(biāo)懸停事件監(jiān)聽實現(xiàn)方法

    vue鼠標(biāo)懸停事件監(jiān)聽實現(xiàn)方法

    頁面在鼠標(biāo)懸停(不動)n秒之后,頁面進(jìn)行相應(yīng)的事件,下面這篇文章主要給大家介紹了關(guān)于vue鼠標(biāo)懸停事件監(jiān)聽的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • axios 實現(xiàn)post請求時把對象obj數(shù)據(jù)轉(zhuǎn)為formdata

    axios 實現(xiàn)post請求時把對象obj數(shù)據(jù)轉(zhuǎn)為formdata

    今天小編就為大家分享一篇axios 實現(xiàn)post請求時把對象obj數(shù)據(jù)轉(zhuǎn)為formdata,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 解決vue動態(tài)下拉菜單 有數(shù)據(jù)未反應(yīng)的問題

    解決vue動態(tài)下拉菜單 有數(shù)據(jù)未反應(yīng)的問題

    這篇文章主要介紹了解決vue動態(tài)下拉菜單 有數(shù)據(jù)未反應(yīng)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評論