精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我們一起探索前端生成PDF

開發(fā) 前端
pdfmake默認不支持中文,需要我們自己實現(xiàn)。找中文的字體文件(ttf結(jié)尾的文件)這個任務(wù)就交到我們自己手里了,并且字體文件需要支持粗體和斜體,否則字體加粗和斜體屬性不生效。

 巧用pdfmake。

[[400144]]

在使用層面講如何使用pdfmake生成現(xiàn)有報告,從以下幾方面實現(xiàn):

  • 支持中文
  • 預(yù)覽頁面搭建
  • 封面實現(xiàn)和斷頁
  • 頁眉和頁腳實現(xiàn)
  • pdfmake顯示類型
  • 如何實現(xiàn)內(nèi)邊距
  • table無法居中顯示

支持中文

pdfmake默認不支持中文,需要我們自己實現(xiàn)。找中文的字體文件(ttf結(jié)尾的文件)這個任務(wù)就交到我們自己手里了,并且字體文件需要支持粗體和斜體,否則字體加粗和斜體屬性不生效。

把我們找到的字體文件,放入pdfmake官方github目錄下examples下,執(zhí)行

  1. npm run build:vfs 

它會把你放入examples下的所有字體都統(tǒng)一打包到build文件下的vfs_fonts.js中,然后在項目中使用:

  1. import pdfmake from "pdfmake/build/pdfmake" 
  2. const pdfFonts = require('@/assets/js/vfs_fonts.js')  
  3. pdfMake.vfs = pdfFonts  
  4. pdfMake.fonts = {  
  5.     Roboto: {  
  6.         normal: 'Roboto-Regular.ttf',  
  7.         bold: 'Roboto-Medium.ttf',  
  8.         italics: 'Roboto-Italic.ttf',  
  9.         bolditalics: 'Roboto-Italic.ttf'  
  10.     },  
  11.     微軟雅黑: {  
  12.         normal: '微軟雅黑.ttf',  
  13.         bold: '微軟雅黑-bold.ttf',  
  14.         italics: '微軟雅黑-italics.ttf',  
  15.         bolditalics: '微軟雅黑-bolditalics.ttf'  
  16.     }  

使用時:

  1. var docDefinition = {  
  2.     content: [ '驚天碼盜' ],  
  3.     defaultStyle: {  
  4.         fontSize: 15,  
  5.         bold: true
  6.         font:"微軟雅黑" 
  7.     }  
  8. }; 

預(yù)覽頁面搭建

pdf預(yù)覽的邏輯大都是通過iframe實現(xiàn),通過getDataUrl獲取url地址

  1. import pdfmake from "pdfmake/build/pdfmake" 
  2. export function previewPdf(params) { 
  3.     if(!params) return ; 
  4.     const pdfDocGenerator = pdfMake.createPdf(params);    
  5.     pdfDocGenerator.getDataUrl( dataUrl=>{ 
  6.         const targetElement = document.querySelector("#iframeContainer"); 
  7.         const pdfMakeIframe = document.querySelector("#pdfMakeKey"); 
  8.         if(pdfMakeIframe){ 
  9.             pdfMakeIframe.src = dataUrl; 
  10.         }else
  11.             const iframe = document.createElement("iframe"); 
  12.             iframe.id = 'pdfMakeKey'
  13.             iframe.src = dataUrl;  
  14.             targetElement.appendChild(iframe) 
  15.         } 
  16.     }} 

封面實現(xiàn)和斷頁

pdfmake默認是沒有封面這個設(shè)置,但是提供了一個設(shè)置背景的函數(shù),可以給每個頁面設(shè)置一個背景,可以是文字背景,也可以是圖片背景。

  1. const docDefinition = { 
  2.     background: function( currentPage, pageSize){ 
  3.         if(currentPage === 1){ 
  4.             return { 
  5.                 iamge: "bgCoverImgUrl"
  6.                 width: pageSize.width, 
  7.                 height: pageSize.height 
  8.             } 
  9.         } 
  10.         return null
  11.     } 
  12.     content: ["驚天碼盜"

這個自動斷頁可以說是非常的贊,省去了你復(fù)雜的計算。如果你想某一頁單獨放一段文案,或者在某段文案后單獨開一頁,pageBreak可以幫你實現(xiàn)。

  1.   pageOrientation: 'portrait'
  2.   content: [ 
  3.     {text: 'Text on Portrait'}, 
  4.     {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'}, 
  5.     {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'}, 
  6.     {text: 'Text on Portrait 2'}, 
  7.   ] 

頁眉和頁腳

頁眉和頁腳的實現(xiàn)就太方便了。

  1. const docDefinition = { 
  2.   footer: function(currentPage, pageCount) {  
  3.         return currentPage.toString() + ' of ' + pageCount;  
  4.   }, 
  5.   header: function(currentPage, pageCount, pageSize) { 
  6.     return [{ 
  7.         columns: [ 
  8.             { 
  9.                 text:  this.headerContent.left
  10.                 alignment:  'left' 
  11.             }, 
  12.             { 
  13.                 text:  this.headerContent.middle, 
  14.                 alignment:  'center' 
  15.             }, 
  16.             { 
  17.                 text:  this.headerContent.right
  18.                 alignment:  'right' 
  19.             } 
  20.             ], 
  21.  
  22.             margin: [10, 20] 
  23.         }] 
  24.   }, 
  25.   content: ["驚天碼盜"
  26. }; 

可以精準定位某個頁面做一些特殊的設(shè)置。

顯示類型

相對于前端來說大多顯示類型都已經(jīng)定型了,比如表格、文本、列表、圖片等。在pdfmake中一共給我們提供了這些顯示類型:

text
普通文本,需要注意的就是字體,如果所提供字體不支持,所設(shè)置的屬性就不顯示。同時text可以嵌套。
columns
列,平鋪的列元素。在pdfmake中沒有塊級元素的概念,如果你想平鋪兩個或者多個文本(比如前面icon,后面文本),colums會滿足你。每列之間的距離可以通過columnGap設(shè)置。
list
跟html標簽ul或ol相同。
table
表格,唯一提供內(nèi)邊距屬性的類型。強大到可以實現(xiàn)任何簡單的樣式,相當于display:table。但是弊端也相當明顯,不能垂直居中。
image/svg
圖片。
stack 棧,相當于數(shù)組[]。

內(nèi)邊距的實現(xiàn)

text文本在pdfmake中是一個塊級元素(css思路定義)。無法實現(xiàn)內(nèi)邊距,單個text文本獨占一行。

  1. const dd = { 
  2.     content: [ 
  3.         'First paragraph'
  4.         { text:"234", background:'red',color:"#fff",fontSize:20 }, 
  5.         'Another paragraph, this time a little bit longer to make sure, this line will be divided into at least two lines' 
  6.     ] 

在pdfmake類型中只有table可以實現(xiàn)內(nèi)邊距,那么我們就可以嘗試以table的方式布局,例如

  1. const dd = { 
  2.   content: [ 
  3.     { 
  4.       margin: [0, 20], 
  5.       table: { 
  6.         body: [ 
  7.           [ 
  8.             { text: 'CONTENTS', width: 'auto', fillColor: '#e7e6e6', fontSize: 26 }, 
  9.             { text: 'Padding ', fillColor: '#58ac5b', color: '#FFF', fontSize: 26 } 
  10.           ] 
  11.         ] 
  12.       }, 
  13.       layout: { 
  14.         defaultBorder: false
  15.         paddingLeft: function (i, node) { 
  16.           if (i === 0) { 
  17.             return 10 
  18.           } 
  19.           return 20 
  20.         }, 
  21.         paddingRight: function (i, node) { 
  22.           if (i === 0) { 
  23.             return 10 
  24.           } 
  25.           return 20 
  26.         }, 
  27.         paddingTop: function (i, node) { return 10 }, 
  28.         paddingBottom: function (i, node) { return 10 } 
  29.       } 
  30.     } 
  31.   ] 

效果是:

像目錄這種效果也是table做出來的:

table的缺陷

看似table可以實現(xiàn)任何樣本組合,但是在單元格垂直居中這塊,卡住了。

  1.   // style: 'tableExample'
  2.   table: { 
  3.     body: [ 
  4.       ['Column 1''Column 2The following table has nothing more than a body array,The following table has nothing more than a body array,The following table has nothing more than a body array,The following table has nothing more than a body array''Column 3'], 
  5.       ['One value goes here''Another one here''OK?'
  6.     ] 
  7.   } 

其他

目前發(fā)現(xiàn)不完美的一點,就是table單元格垂直居中,除了這一點,table很靈活,可以實現(xiàn)多級表頭,嵌套表格,合并單元格,靈活定制各個單元格邊框線條寬度和顏色。

同時還具備水印、加密、二維碼生成、內(nèi)外鏈接、目錄生成。相比jspdf幫我們節(jié)省了很多步驟。那么我們下期聊聊jsPdf。

本文轉(zhuǎn)載自微信公眾號「驚天碼盜」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系驚天碼盜公眾號。

 

責任編輯:武曉燕 來源: 驚天碼盜
相關(guān)推薦

2022-02-02 21:17:19

Eslint字段配置

2024-06-07 14:54:55

2023-11-03 12:54:00

KAFKA探索中間件

2023-11-29 09:04:00

前端接口

2025-03-13 05:00:00

2022-03-31 18:59:43

數(shù)據(jù)庫InnoDBMySQL

2023-06-30 08:18:51

敏捷開發(fā)模式

2023-08-04 08:20:56

DockerfileDocker工具

2022-05-24 08:21:16

數(shù)據(jù)安全API

2022-10-18 07:33:57

Maven構(gòu)建工具

2023-09-10 21:42:31

2021-01-12 05:08:49

DHCP協(xié)議模型

2023-08-10 08:28:46

網(wǎng)絡(luò)編程通信

2021-08-27 07:06:09

DubboDocker技術(shù)

2022-03-08 17:52:58

TCP格式IP

2024-02-20 21:34:16

循環(huán)GolangGo

2021-08-27 07:06:10

IOJava抽象

2022-01-17 06:59:40

Grep指令linux

2021-07-28 07:53:20

Github ActiDotnet 應(yīng)用

2021-12-29 08:27:05

ByteBuffer磁盤服務(wù)器
點贊
收藏

51CTO技術(shù)棧公眾號

青青草国产精品一区二区| 亚洲精品五月天| 欧美与欧洲交xxxx免费观看 | 久久国产精品99国产| 精品亚洲一区二区三区四区五区| 91好吊色国产欧美日韩在线| 精品国产乱码久久久久久蜜臀网站| 这里只有精品在线| 精品美女一区二区| 成年人视频网站免费观看| 亚洲人妻一区二区三区| 久久性天堂网| 欧美成人精品三级在线观看| 色哟哟视频在线| 午夜伦理福利在线| 国产精品久久久久久久久免费相片 | 日韩精品视频在线观看网址| 国产精品亚洲二区在线观看| 97电影在线看视频| 国产精品羞羞答答xxdd| 欧美一区视频在线| 国产成人精品视频免费| 欧美少妇激情| 亚洲福利一二三区| 亚洲aⅴ天堂av在线电影软件| 国产精品免费无遮挡| 国产精品分类| 伊人伊成久久人综合网小说| 色欲无码人妻久久精品| 日韩伦理精品| 又紧又大又爽精品一区二区| 免费国产在线精品一区二区三区| 中文字幕在线视频第一页| 欧美激情第10页| 亚洲深夜福利网站| 色欲欲www成人网站| 日本综合字幕| 亚洲一区二区中文在线| 青娱乐一区二区| 亚洲av永久无码国产精品久久| 久久狠狠婷婷| 久久久久久噜噜噜久久久精品| 亚洲一级黄色录像| 丁香婷婷成人| 88在线观看91蜜桃国自产| 欧美日韩在线一| 国产在线观看a| 国产日韩欧美综合在线| 99久久综合狠狠综合久久止 | 成人女性视频| 日韩va亚洲va欧洲va国产| 三日本三级少妇三级99| 天堂在线中文网官网| 亚洲精品伦理在线| 亚洲一区二区三区免费观看| 黑人操亚洲女人| 极品少妇一区二区| 国产999视频| 久久精品国产亚洲av高清色欲 | 在线免费观看成人| 精品影院一区| 91小视频在线观看| 99视频在线免费观看| 91午夜交换视频| 在线亚洲国产精品网站| 欧美大片免费看| 欧美偷拍第一页| 九九热精品视频在线观看| 欧美刺激午夜性久久久久久久| 久久6免费视频| 日本a人精品| 91福利视频久久久久| 干日本少妇首页| 亚洲一区站长工具| 色哟哟一区二区三区| 日本www在线播放| 国产传媒在线观看| 精品久久久久久久中文字幕| 国产色一区二区三区| 成年人视频免费在线播放| 亚洲777理论| 欧美一级欧美一级| 悠悠资源网亚洲青| 在线亚洲精品福利网址导航| av丝袜天堂网| 国产福利91精品一区二区| 日本乱人伦aⅴ精品| 88av.com| 欧美男女视频| 日韩美女一区二区三区| 国产视频精品视频| 国产91一区| 综合激情国产一区| 国产免费美女视频| 欧美日韩日本国产亚洲在线 | 国产欧亚日韩视频| 国产乱淫av片免费| 国产精品一区三区| 国产一区二区三区四区hd| 天堂中文网在线| 久久久久久久国产精品影院| 日韩精品一区二区三区外面| 日本激情视频在线观看| 亚洲天堂免费看| 免费看毛片的网址| 樱花草涩涩www在线播放| 欧美丝袜自拍制服另类| 涩多多在线观看| 7777精品| 亚洲人成在线电影| 成人免费黄色小视频| 欧美一区在线看| 2021国产精品视频| 91丨porny丨在线中文 | 亚洲欧洲在线观看| 亚洲女人久久久| 最新亚洲一区| 国产精品极品美女在线观看免费 | 国产草草浮力影院| 国产一区二区三区四区大秀| 日韩中文字幕精品视频| 在线观看精品国产| 九九视频精品免费| 国产一区二区三区四区五区在线 | 色综合天天综合色综合av| wwwwwxxxx日本| 电影中文字幕一区二区| 亚洲乱码国产乱码精品精| 国产精品99久久久久久成人| 中日韩视频在线观看| 成人国内精品久久久久一区| 亚洲aaaaaaa| 亚洲另类春色国产| 日本999视频| 福利欧美精品在线| www.日韩.com| 久久99国产综合精品免费| 久久99久久久久| 欧美日韩国产综合在线| 久久电影网站| 欧美怡红院视频| 亚洲欧美在线不卡| 午夜视频一区| 国产日韩欧美在线| 国产在线资源| 欧美日韩精品二区| 人妻av一区二区三区| 日本成人小视频| 69视频在线免费观看| 99国产精品一区二区三区| 久久精品在这里| 国产精品免费入口| 国产一区二区三区不卡av| 久久在精品线影院精品国产| 国产男人搡女人免费视频| 26uuu色噜噜精品一区二区| 中文字幕人妻熟女人妻洋洋| 在线欧美激情| 在线电影av不卡网址| 国产黄网在线观看| 久久久五月婷婷| 男人天堂999| 青青一区二区| 68精品国产免费久久久久久婷婷| 免费观看成年人视频| 亚洲黄色小说网站| 先锋资源在线视频| 91精品亚洲| 91精品视频免费观看| 午夜不卡视频| 欧美喷潮久久久xxxxx| 国产裸体免费无遮挡| 美女网站一区| 国产精品极品在线| 日本片在线观看| 日韩毛片在线看| 中文字幕91爱爱| 亚洲男人的天堂在线aⅴ视频| 韩国一区二区三区四区| 激情综合亚洲| 欧美在线激情| 精品国产三区在线| 7m第一福利500精品视频| 国产黄色片在线观看| 欧美一区二区三区四区在线观看| 国产香蕉在线视频| 日本一区二区三级电影在线观看| 中文字幕一区久久| 亚洲视频1区| 亚洲资源视频| 人人网欧美视频| 国产精品一区二区久久| 国产美女福利在线观看| 亚洲人午夜色婷婷| 精品久久久久成人码免费动漫| 精品久久久久久久久久| 欧美日韩黄色网| 久久丝袜美腿综合| 视频区 图片区 小说区| 亚洲制服av| 久久最新免费视频| 久久99国产精一区二区三区| 91九色在线免费视频| 97se综合| 色综合久久久888| 福利成人在线观看| 日韩成人中文字幕| 99精品在线视频观看| 色94色欧美sute亚洲线路二| 九九视频免费看| 国产精品美女久久福利网站| 好男人香蕉影院| 国产尤物一区二区在线| 日韩一级片播放| 影音先锋日韩资源| 欧美精品一区二区性色a+v| 国产探花在线精品一区二区| 成人羞羞视频免费| 性欧美video另类hd尤物| 奇门遁甲1982国语版免费观看高清 | 欧美成人app| 91国产中文字幕| 日韩特级毛片| 久久福利网址导航| 欧美尤物美女在线| 一本一道久久a久久精品逆3p| 日日躁夜夜躁白天躁晚上躁91| 欧美日本不卡视频| 中文字幕av无码一区二区三区| 岛国精品视频在线播放| 久久丫精品久久丫| 亚洲视频小说图片| 成人黄色短视频| 欧美激情一区不卡| 久久视频精品在线观看| 久久蜜桃一区二区| 丰满圆润老女人hd| 91视频免费播放| av无码av天天av天天爽| av综合在线播放| 久久久男人的天堂| 成人黄色大片在线观看| 美女被爆操网站| 粉嫩欧美一区二区三区高清影视| 下面一进一出好爽视频| 国产精品资源在线观看| 日韩精品视频网址| 丰满放荡岳乱妇91ww| 任你躁av一区二区三区| 成人av动漫在线| 中文字幕在线永久| 97精品久久久久中文字幕| 日b视频在线观看| 91亚洲大成网污www| 成都免费高清电影| 欧美高清在线精品一区| 亚洲色图100p| 亚洲综合图片区| 国语对白一区二区| 狠狠色狠色综合曰曰| 中文字幕一区二区人妻视频| 欧美性猛交一区二区三区精品| 羞羞色院91蜜桃| 欧美日韩国产小视频在线观看| 国产剧情久久久| 欧美tickling网站挠脚心| 嫩草影院一区二区| 亚洲欧洲日本专区| 黄在线免费看| 久久久久久久91| 亚洲天堂手机| 国产精品视频内| 在线精品自拍| 免费成人在线观看av| 成人黄色小视频| a级片一区二区| 男女精品网站| 中国黄色片一级| 成人性视频免费网站| 爱爱免费小视频| 亚洲精品伦理在线| 黄色在线免费观看| 337p亚洲精品色噜噜| 特级丰满少妇一级aaaa爱毛片| 亚洲人成亚洲人成在线观看| a天堂中文在线官网在线| 97视频免费看| 在线欧美激情| 久久免费一区| 国产精品99一区二区三| 欧美中文字幕在线观看视频| 亚洲一区自拍| 青娱乐精品在线| 26uuu国产在线精品一区二区| 三级影片在线观看| 狠狠色狠色综合曰曰| 国产又粗又猛又爽又黄视频 | 国产精品免费一区豆花| 日韩最新av| 视频一区视频二区视频三区高| 欧美另类视频| www.99av.com| 99久久婷婷国产综合精品电影| 精品伦精品一区二区三区视频密桃 | 亚洲成人黄色在线观看| 大片免费播放在线视频| 欧美黄色片在线观看| 青青在线精品| 日本不卡一区二区三区在线观看 | aiss精品大尺度系列| 先锋影音亚洲资源| 在线亚洲激情| 免费啪视频在线观看| 亚洲欧洲精品成人久久奇米网| 日本三级小视频| 欧美成人伊人久久综合网| 97超碰国产一区二区三区| 91精品国产色综合久久不卡98| 国内不卡的一区二区三区中文字幕 | 欧美激情高清视频| 亚洲三级电影| 日韩免费一区二区三区| 国产农村妇女精品一区二区| 香蕉在线观看视频| 亚洲私人影院在线观看| 亚洲大尺度在线观看| 日韩经典一区二区三区| 国产探花视频在线观看| 999日本视频| 99久久影视| 五月天视频在线观看| 欧美国产精品一区二区| 四虎影院在线免费播放| 日韩激情av在线播放| 51精品在线| 国产精品永久入口久久久| 中文字幕一区二区三区在线视频| 在线免费观看视频黄| 欧美国产日韩亚洲一区| 精品不卡一区二区| 精品视频久久久久久| 麻豆视频在线观看免费网站黄| 国产伦精品一区二区三区四区免费 | 97在线观看免费视频| 色av综合在线| 二区在线观看| 国产精品美女久久久久av超清| 久久不见久久见中文字幕免费| 一本大道熟女人妻中文字幕在线| 99国产精品一区| 亚洲黄网在线观看| 中文字幕亚洲在线| 狂野欧美性猛交xxxx| 一本色道久久综合亚洲二区三区| 久久精品国产一区二区三| 四虎地址8848| 日韩欧美成人一区| 爱啪视频在线观看视频免费| 国内精品二区| 亚洲影音一区| 免费成人深夜天涯网站| 欧美色手机在线观看| а√天堂8资源在线官网| 成人欧美一区二区| 99在线观看免费视频精品观看| 狠狠人妻久久久久久综合蜜桃| 色综合天天做天天爱| 97超碰国产一区二区三区| 亚洲a级在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品久久无码| 色婷婷国产精品| 日本成人网址| 国产成人精品自拍| 久久狠狠一本精品综合网| 国产精品suv一区二区88| 日韩免费观看高清完整版 | 国产精品xxxxx| 99免费精品| 制服丝袜av在线| 日本电影亚洲天堂一区| 国产黄a三级三级三级av在线看| 91免费看网站| 久久国产精品久久久久久电车| 三级黄色片在线观看| 精品国产不卡一区二区三区| 免费观看亚洲| 国产91porn| 久久久蜜臀国产一区二区| 国产精品久久久久久免费播放| 久久久久国产一区二区三区| 欧美最新另类人妖| 2018国产精品| 欧美午夜不卡在线观看免费| 深夜国产在线播放| 欧洲亚洲一区| 成熟亚洲日本毛茸茸凸凹| 国产第一页在线观看| 久久久久久国产精品| 久久综合av|