最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue基于html2canvas和jspdf?生成pdf?、解決jspdf中文亂碼問題的方法詳解

 更新時間:2023年06月09日 09:10:06   作者:無知的小菜雞  
這篇文章主要介紹了vue基于html2canvas和jspdf?生成pdf?、解決jspdf中文亂碼問題的方法,結(jié)合實例形式詳細(xì)描述了中文亂碼問題的原因、解決方法與相關(guān)注意事項,需要的朋友可以參考下

html2canvas

html2canvas文檔

備注:以下內(nèi)容都是基于官方文檔

簡介

該腳本允許您直接在用戶瀏覽器上對網(wǎng)頁或其部分進(jìn)行“截圖”。屏幕截圖基于 DOM,因此可能不是 100% 準(zhǔn)確到真實表示,因為它不會制作實際的屏幕截圖,而是根據(jù)頁面上可用的信息構(gòu)建屏幕截圖。

安裝及使用

npm install html2canvas
import html2canvas from 'html2canvas';
html2canvas(el,options).then(function(canvas) {
    document.body.appendChild(canvas);
});
el 是要生成canvas的dom對象,
options是配置項,常用的配置項有:backgroundColor(背景色,默認(rèn)白色)、
width(寬度)、height(高度)、useCORS(是否嘗試使用 CORS 從服務(wù)器加載圖像)、
canvas(canvas對象用作繪圖基礎(chǔ)的現(xiàn)有元素)

參考文章:html2canvas使用筆記

示例

下面的例子基于Vue

<template>
    <div>
        <div ref="a">
            <img src="./image/aa.webp" />
            <p>一張?zhí)评哮唸D片</p>
        </div>
        <el-button type="primary" @click="createCanvas">html轉(zhuǎn)canvas</el-button>
        <div ref="b">
            <p>這里放生成的canvas</p>
        </div>
    </div>
</template>
<script>
import html2canvas from 'html2canvas';
export default {
    methods: {
        createCanvas() {
            // dom元素
            let dom = this.$refs.a;
            // 寬高
            let width = dom.offsetWidth;
            let height = dom.offsetHeight;
            // 生成一個canvas對象
            let canvas = document.createElement('canvas');
            // 設(shè)置canvas的寬高
            canvas.width = width * 2;
            canvas.height = height * 2;
            // 生成頁面模糊時,可以放大一定倍數(shù),通過調(diào)整canvas的寬高使其清晰度增加
            const context = canvas.getContext('2d');
            context.scale(1.5, 1.5);
            // 配置項
            let options = {
                backgroundColor: '#ffffff',
                canvas: canvas,
                useCORS: true
            };
            // 容器
            let container = this.$refs.b;
            // 生成canvas并插入到容器里
            html2canvas(dom,options).then(canvas => {
                container.appendChild(canvas);
            });
        }
    }
};
</script>
<style scoped lang="scss">
</style>

效果圖
在這里插入圖片描述

jspdf

JSPDF API官方文檔

基礎(chǔ)語法

new jsPDF(orientation, unit, format) → {jsPDF}

orientation:方向,默認(rèn)p(豎直方向),可選l(橫向)

unit:單位,指定坐標(biāo)時要使用的測量單位。“pt”(點(diǎn))、“mm”(默認(rèn))、“cm”、“in”之一

format :應(yīng)該是紙張格式,默認(rèn)a4

常用方法

文本

text(text, x, y, flags) → {jsPDF}
text:文本內(nèi)容
x,y  文本相對于頁面左上角的偏移量
flags:具體是干啥的不填清楚,可以不用填
// 生成文本
createText() {
    let doc = new JsPdf();
    doc.text('aaa',100,100);
    // 保存成pdf文件
    doc.save('a.pdf');
}

下面是生成的pdf文件
在這里插入圖片描述
關(guān)于中文亂碼問題

查了一下官網(wǎng),官網(wǎng)內(nèi)容如下(官網(wǎng)是英文的,用谷歌翻譯,翻譯了一下)

jspdf git地址
在這里插入圖片描述
官網(wǎng)里提供的那個地址不太好使,我這里把代碼下到了本地。找到下面的這個html文件
在這里插入圖片描述
點(diǎn)擊打開,可以看到下面的網(wǎng)站
在這里插入圖片描述
上傳一個ttf的字體文件,會生成一個js文件。然后將文件引入到頁面里

import './hyjt-normal';
// 添加并設(shè)置字體
console.log(doc.getFontList());
doc.setFont('hyjt');

doc.getFontList() 用于獲取當(dāng)前支持那些字體,doc.setFont(); 設(shè)置字體,值一定要與你上面填的名一致,打開這個js文件可以看到:
在這里插入圖片描述
示例:

// 生成文本
createText() {
    let doc = new JsPdf();
    // 添加并設(shè)置字體
    console.log(doc.getFontList());
    doc.setFont('hyjt');
    doc.text('哈哈哈',100,100);
    // 保存成pdf文件
    doc.save('a.pdf');
}

在這里插入圖片描述
文本顏色

setTextColor(r, g, b)
// rgb 顏色值(0~255)

添加新頁面和設(shè)置指針?biāo)陧摂?shù)

//添加新頁面
addPage()
//設(shè)置當(dāng)前焦點(diǎn)在第幾頁
setPage(number)

示例:

// 生成文本
createText() {
    let doc = new JsPdf();
    doc.setFont('hyjt');
    doc.addPage();
    doc.text('I am on page 2', 10, 10);
    doc.setPage(1);
    doc.text('I am on page 1', 10, 10);
    // 保存成pdf文件
    doc.save('a.pdf');
}

說一下流程:默認(rèn)內(nèi)容會在第一頁,執(zhí)行addPage()后會生成新的一頁,焦點(diǎn)跳到第二頁,I am on page 2 會在第二頁里生成;執(zhí)行setPage(1) ,焦點(diǎn)跳轉(zhuǎn)到第一頁,I am on page 1會在第一頁里生成

設(shè)置字體大小

setFontSize(number)

保存pdf

save(filename)

獲取可用字體列表

getFontList () 

生成圖片

addImage(imageData,format,x,y,width,height)
imageData:圖片的data URL
format:圖片的格式,比如png
x,y:距離頁面左上角的偏移
width,height:圖片的寬高

示例:

// 生成圖片
createImage() {
    // 生成pdf
    let doc = new JsPdf();
    doc.addImage(this.canvasImage,'jpeg',100,20,200,200);
    doc.save('b.pdf');
}

主要是要獲取圖片的data URL,可以借助canvas的toDataURL方法,可以借助一下上面的html2canvas

// 生成canvas并插入到容器里
 html2canvas(dom,options).then(canvas => {
     container.appendChild(canvas);
     this.canvasImage = canvas.toDataURL('image/jpeg');
 });

在這里插入圖片描述

相關(guān)文章

  • 八種Vue組件間通訊方式合集(推薦)

    八種Vue組件間通訊方式合集(推薦)

    這篇文章主要介紹了八種Vue組件間通訊方式合集(推薦),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 微信小程序Webview與H5通信的思路與實戰(zhàn)記錄

    微信小程序Webview與H5通信的思路與實戰(zhàn)記錄

    這篇文章主要介紹了微信小程序Webview與H5通信的思路與實戰(zhàn)的相關(guān)資料,由于微信小程序與H5之間的通信限制,無法滿足業(yè)務(wù)需求,通過動態(tài)改變url的hash值來傳遞參數(shù),并利用vue-router組件的路由守衛(wèi)來避免頁面刷新,需要的朋友可以參考下
    2025-01-01
  • vue總線機(jī)制(bus)知識點(diǎn)詳解

    vue總線機(jī)制(bus)知識點(diǎn)詳解

    在本篇文章中小編給大家整理的是關(guān)于vue總線機(jī)制(bus)知識點(diǎn)總結(jié),有興趣的朋友們可以跟著學(xué)習(xí)下。
    2020-05-05
  • vue組件component的注冊與使用詳解

    vue組件component的注冊與使用詳解

    組件是Vue是一個可以重復(fù)使用的Vue實例, 它擁有獨(dú)一無二的組件名稱,它可以擴(kuò)展HTML元素,以組件名稱的方式作為自定義的HTML標(biāo)簽,這篇文章主要介紹了vue組件component的注冊與使用,需要的朋友可以參考下
    2022-08-08
  • element tree樹形組件回顯數(shù)據(jù)問題解決

    element tree樹形組件回顯數(shù)據(jù)問題解決

    本文主要介紹了element tree樹形組件回顯數(shù)據(jù)問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • MVVM模型在Vue中的使用詳解

    MVVM模型在Vue中的使用詳解

    MVVM模型主要是為了分離視圖(View)和模型(Model),其優(yōu)點(diǎn)為:低耦合、可重用性、獨(dú)立開發(fā)以及可測試,視圖和模型分離的特點(diǎn)給了 Vue 很大的啟發(fā),這篇文章主要介紹了MVVM模型在Vue中的使用,需要的朋友可以參考下
    2022-11-11
  • vue導(dǎo)出excel表格的新手詳細(xì)教程

    vue導(dǎo)出excel表格的新手詳細(xì)教程

    相信大家做項目的時候,功能中都有導(dǎo)出模塊,下面這篇文章主要給大家介紹了關(guān)于vue導(dǎo)出excel表格的詳細(xì)教程,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 詳解Vue用cmd創(chuàng)建項目

    詳解Vue用cmd創(chuàng)建項目

    在本篇內(nèi)容里小編給大家整理了關(guān)于Vue用cmd創(chuàng)建項目的方法講解,有興趣的朋友們跟著學(xué)習(xí)下。
    2019-02-02
  • vue使用showdown并實現(xiàn)代碼區(qū)域高亮的示例代碼

    vue使用showdown并實現(xiàn)代碼區(qū)域高亮的示例代碼

    這篇文章主要介紹了vue使用showdown并實現(xiàn)代碼區(qū)域高亮的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Vue中使用crypto-js AES對稱加密算法實現(xiàn)加密解密

    Vue中使用crypto-js AES對稱加密算法實現(xiàn)加密解密

    ?在數(shù)字加密算法中,通過可劃分為對稱加密和非對稱加密,本文主要介紹了Vue中使用crypto-js AES對稱加密算法實現(xiàn)加密解密,文中根據(jù)實例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

门头沟区| 同江市| 五家渠市| 华阴市| 嘉禾县| 电白县| 卓资县| 泰兴市| 石台县| 颍上县| 黑水县| 阜阳市| 隆回县| 黄梅县| 于都县| 资中县| 沂源县| 赤壁市| 南平市| 怀安县| 遂宁市| 桐乡市| 门源| 华亭县| 龙江县| 郁南县| 三亚市| 深水埗区| 田林县| 涪陵区| 海晏县| 西盟| 襄汾县| 上饶市| 太和县| 临猗县| 河间市| 南澳县| 西平县| 开平市| 喀什市|