狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[轉(zhuǎn)帖]前端html生成pdf的兩種辦法 以及 引入中文字體

freeflydom
2023年7月27日 9:0 本文熱度 949

導(dǎo)出pdf有下面兩種方法

1、使用canvas把html生成圖片,然后使用jspdf生成pdf。優(yōu)點(diǎn):生成的pdf 樣式還原度極高,缺點(diǎn):圖片形式的pdf無法編輯

2、直接使用jspdf的html方法直接把html生成pdf。優(yōu)點(diǎn):可編輯,缺點(diǎn):只是把文本內(nèi)容摟出來生成pdf,也就是說樣式基本無,而且jspdf不支持中文字體的,如果有中文字體需要一 一引入字體


一、從圖片導(dǎo)出pdf

1、安裝插件html2canvas、jspdf

 yarn add jspdf

yarn add html2canvas


2、使用

//html使用的是Ant Design Vue框架,pdf_content為生成canvas區(qū)域

<div ref="pdf_content">

     <a-table :loading="loading" :dataSource="dataSource" :columns="columns" :pagination="ipagination" @change="handleTableChange" /> 

</div>


// js

import html2canvas from 'html2canvas'

import JsPDF from 'jspdf'


getpdf() { // 未分頁

            const pdf_content = this.$refs.pdf_content

            html2canvas(pdf_content, {backgroundColor: '#fff', useCORS: true}).then((canvas) => { // 獲取圖片

                const dataURL = canvas.toDataURL('image/png')

                console.log(dataURL) // 生成的圖片

                var contentWidth = canvas.width

                var contentHeight = canvas.height

                // 一頁pdf顯示html頁面生成的canvas高度;

                var pageHeight = (contentWidth / 592.28) * 841.89

                // 未生成pdf的html頁面高度

                var leftHeight = contentHeight

                // 頁面偏移

                var position = 0

                // a4紙的尺寸[595.28,841.89],html頁面生成的canvas在pdf中圖片的寬高

                var imgWidth = 595.28

                var imgHeight = (595.28 / contentWidth) * contentHeight

                var pageData = canvas.toDataURL('image/jpeg', 1.0)

                var pdf = new JsPDF('', 'pt', 'a4')

                // 有兩個(gè)高度需要區(qū)分,一個(gè)是html頁面的實(shí)際高度,和生成pdf的頁面高度(841.89)

                // 當(dāng)內(nèi)容未超過pdf一頁顯示的范圍,無需分頁

                if (leftHeight < pageHeight) {

                    // 在pdf.addImage(pageData, 'JPEG', 左,上,寬度,高度)設(shè)置在pdf中顯示;

                    pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)

                    // pdf.addImage(pageData, 'JPEG', 20, 40, imgWidth, imgHeight);

                } else {

                    // 分頁

                    while (leftHeight > 0) {

                        pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)

                        leftHeight -= pageHeight

                        position -= 841.89

                        // 避免添加空白頁

                        if (leftHeight > 0) {

                        pdf.addPage()

                        }

                    }

                }

                pdf.save('訂單列表')

            })

        }

三、可能出現(xiàn)的問題

Ant Design Vue框架的分頁組件中的一個(gè)樣式影響了html2canvas,生成圖片會缺失數(shù)字部分,

a標(biāo)簽中的display: block;樣式會導(dǎo)致導(dǎo)出圖片中a標(biāo)簽內(nèi)的內(nèi)容沒有顯示成功,需要手動修改樣式


/deep/ .ant-pagination-item a {

    display: unset;

}


二、html方法直接把html生成pdf

1、引入字體

ttf轉(zhuǎn)js工具點(diǎn)擊下載項(xiàng)目到本地,打開下面的文件


打開fontconverter,頁面如下圖

 




選擇需要的字體的ttf文件,點(diǎn)擊選擇文件進(jìn)行上傳轉(zhuǎn)換(一些字體可以在電腦本地找到地址:C:\Windows\Fonts)


 



上傳后點(diǎn)擊create下載一個(gè)js文件,把這個(gè)文件放在項(xiàng)目中


在頁面引入字體:require("@/utils/simhei-normal"); 字體轉(zhuǎn)為js的時(shí)候都處理好了,只需要引入就可以直接使用了


在生成pdf之前使用pdf.setFont("simhei");設(shè)置字體即可


2、生成pdf

var pdf = new jsPDF("x", "pt", [595, 750]);

pdf.setFont("simhei"); // 使用字體

const source = document.getElementsByClassName("content")[0];

var options = {

pagesplit: false, //設(shè)置是否自動分頁

background: "#FFFFFF", //如果導(dǎo)出的pdf為黑色背景,需要將導(dǎo)出的html模塊內(nèi)容背景 設(shè)置成白色。

};

await pdf.html(source, {

callback: function (pdf1) {

pdf1.save("test.pdf");

},

margin: [30, 0, 30, 0],

});

pdf.save("test.pdf");



原文鏈接



該文章在 2023/7/27 9:00:45 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved