pdfmake生成pdf的使用方法
實際項目中有時會有根據(jù)填寫的表單數(shù)據(jù)或者其他格式的數(shù)據(jù),將數(shù)據(jù)自動填充到pdf文件中根據(jù)固定模板生成pdf文件的需求
利用pdfmake生成pdf文件
1.下載安裝pdfmake第三方包
npm i pdfmake
2.封裝生成pdf文件的共用配置
可以在utils文件夾下新建pdf文件夾,所有的pdf文件模板/共用配置等文件都放在該文件夾下
新建文件pdfUtils.js,該文件是一些公用配置項
import pdfMake from 'pdfmake/build/pdfmake';
pdfMake.fonts={
Msyh:{
italics: 'https://example.com/fonts/fontFile3.ttf',
bold: 'https://example.com/fonts/fontFile4.ttf',
}
//可以設(shè)置文件的字體
}
export const PdfMake = pdfMake
export const baseDocDefinition={
//pdfmake中margin值的設(shè)置,4個值分別是[左,上,右,下]
pageMargins:[40,70,40,40],//文檔邊距,不影響頁眉頁腳
pageSize: 'A4', //設(shè)置紙張大小為A4
pageOrientation: 'portrait', //portrait:縱向; langscape:橫向,默認(rèn)是縱向的
//默認(rèn)文本設(shè)置,這里的屬性都是比較常見的就不贅述了
defaultStyle:{
font: 'Msyh',
color: '#000000',
bold: false,
fontSize: 12,
lineHeight: 1.2
}
}
//pdf展示圖片,不能直接展示url,需要對文件進行轉(zhuǎn)換
export async function getImageUrl(url){
const response=await fetch(url)
const blob=await response.blob()
return new Promise((resolve,reject)=>{
const reader=new FileReader()
reader.onload=()=>{
const base64data=reader.result
resolve(base64data)
}
reader.onerror=reject
reader.readAdDataURL(blob)
})
}3.生成pdf文件的文件模板內(nèi)容
新建getPdfDoc.js文件,該文件是具體要生成文件的配置
import { PdfMake } from './pdfUtils.js'
import { baseDocDefinition, getImageUrl } from './pdfUtils.js'
//由于文件中某些數(shù)據(jù)是自動填充上去的,所以調(diào)用生成pdf的方法時要傳填充的數(shù)據(jù)
export function getDocPDF=async(data){
const docDefinition={
...baseDocDefinition,
//獨有配置,這里可以參考文檔最后
content:[
//獨有的配置
...
]
}
PdfMake.createPDF(docDefinition).open()//生成pdf文件并打開,可以進行預(yù)覽/導(dǎo)出
}
4.調(diào)用方法生成pdf
在需要的地方進行調(diào)用
例如:
<template>
...
<el-button @click='exportDoc'>導(dǎo)出PDF文件</el-button>
...
</template>
import { getDocPDF } from '@/utils/getPdfDoc.js'
<script>
export default {
data(){
return {
form:{}
}
},
methods:{
async exportDoc(){
await getDocPDF(this.form)
}
}
}
</script>pdfmake的文檔沒有中文版的,這里我列舉一些我用過的也是比較常用的配置
export function getDocPDF=async(data){
const docDefinition={
...baseDocDefinition,
//頁眉
header: {
absolutePosition: { x: 40, y: 10 },
stack: [
{ text: `${data.fullName}`, fontSize: 10, absolutePosition: { x: 0, y: 13 }, alignment: 'center' },
{
canvas: [{
type: 'line',
x1: 0,
y1: 30,
x2: 515,
y2: 30,
lineWidth: 1,
absolutePosition: { x: 0, y: 10 }
}]
},// 分割線
],
},
//頁腳
footer: function (currentPage, pageCount) {
return [
{
canvas: [
{
type: 'line',
x1: 40, y1: 0,
x2: 555, y2: 0,
lineWidth: 1
}
]
},
{
text: `${data.fullName}\n` + currentPage,
alignment: 'center',
fontSize: 10,
margin: [0, 10]
}
];
},
content:[
//獨有的配置
...,
//文本段落
{
text:'***',
fontSize:16,//該段text的字體大小
bold:true,//該段字體加粗
lendingIndent: 25//首行縮進
},
//表格
{
layout:{
paddingTop: () => 5,
paddingBottom: () => 5,
paddingLeft: () => 5,
paddingRight: () => 5
},
table: {
widths: ['10%', '22%', '20%', '30%', '20%'],
body: [
[
//第一行的數(shù)據(jù),即表格的表頭
{ text: '序號', alignment: 'center' },
{ text: '姓名', alignment: 'center' },
{ text: '手機號', alignment: 'center' },
{ text: '性別', alignment: 'center' },
],
//后面的數(shù)據(jù)行,如果不是靜態(tài)的數(shù)據(jù),傳入的數(shù)據(jù)展示我們可能還需要進行一下轉(zhuǎn)換,轉(zhuǎn)換成這里展示需要的數(shù)據(jù)格式
[
{ text: '1', alignment: 'center' },
{ text: '張三', alignment: 'center' },
{ text: '18888888888', alignment: 'center' },
{ text: '男', alignment: 'center' },
],
]
}
},
//左右布局
{
alignment: 'justify',
margin: [0, 20, 0, 5],
columns: [
{
//text可以直接是字符串,也可以是字符串?dāng)?shù)組
text: [
'簽字日期:','\u00A0\u00A0\u00A0\u00A0','年','\u00A0\u00A0\u00A0\u00A0','月','\u00A0\u00A0\u00A0\u00A0','日'//這里的\u00A0是導(dǎo)出來展示是空格
],
fontSize: 12
},
{
text: '簽字日期:','\u00A0\u00A0\u00A0\u00A0','年','\u00A0\u00A0\u00A0\u00A0','月','\u00A0\u00A0\u00A0\u00A0','日',
fontSize: 12
}
]
},
//如果需要換頁,即下面的內(nèi)容為新起一頁的內(nèi)容,可以通過給文本塊加上pageBreak屬性
{
text:' ',
pageBreak:'after',//表示該文本塊后換頁
},
//如果需要展示像圖片,或者文本塊較多,要放在stack中,圖片不能直接展示url,要進行格式轉(zhuǎn)換
stack:[
{
image: await getImageUrl(data.url)
width: 200,
}
]
]
}
PdfMake.createPDF(docDefinition).open()//生成pdf文件并打開,可以進行預(yù)覽/導(dǎo)出
}頁眉效果

頁腳效果

到此這篇關(guān)于pdfmake生成pdf的使用的文章就介紹到這了,更多相關(guān)pdfmake pdf使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Javascript基礎(chǔ)之?dāng)?shù)組的使用
這篇文章主要介紹了Javascript基礎(chǔ)之?dāng)?shù)組的使用的相關(guān)資料,介紹的非常詳解,具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05
一文快速學(xué)會創(chuàng)建uni-app項目并了解pages.json文件
這篇文章主要給大家介紹了如何創(chuàng)建uni-app項目并了解pages.json文件的相關(guān)資料,pages.json文件用來對uni-app進行全局配置,決定頁面文件的路徑、窗口樣式、原生的導(dǎo)航欄、底部的原生tabbar等,需要的朋友可以參考下2023-10-10
用Golang運行JavaScript的實現(xiàn)示例
這篇文章主要介紹了用Golang運行JavaScript的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

