多頁 Html2pdf.js 前端畫面轉 PDF 並用 ajax 傳送 (含頁尾)

多頁 Html2pdf.js 前端畫面轉 PDF 並用 ajax 傳送 (含頁尾)

Html2pdf.js 前端畫面轉 PDF 並用 ajax 傳送

html2pdf 官方文件內容實在是太少了,看完了還是一頭霧水
參考了多人的代碼並且在實作的過程中踩了一堆坑
趕緊紀錄一下避免以後忘了又要重踩一次

程式流程async function transfer() {
 await changeHtmlTagsIntoSpan()
 await cutPage()let docif (頁數 > 5) {
   doc = await renderLargePdf()
 } else {
   doc = await renderPdf()
 }sendPdf(doc)
}

PDF頁數 <= 5async function renderPdf() {opt = {
   margin: 10,
   pagebreak: { before:['.page-break'], avoid: 'img' },
   filename: 'test.pdf',
   jsPDF: { format: 'a4', orientation: 'portrait' },
   html2canvas:  {
     scale: 2,
     useCORS: true, // 沒有的話轉成PDF後所有的<img>內容都會不見
   }
 }let content = document.getElementById('body')let doc = await html2pdf()
   .from(content)
   .set(opt)
   .toPdf()
   .get('pdf')
   .then(function (pdf) {
     let totalPages = pdf.internal.getNumberOfPages()
     let onePageHeight = pdf.internal.pageSize.getHeight()
     let onePageWidth = pdf.internal.pageSize.getWidth()// 這邊使用google的開源中文字,不然原本html2pdf不支援UTF-8中文輸出
     pdf.addFileToVFS('TaipeiSansTCBeta-normal', TaipeiSansTCBeta);
     pdf.addFont('TaipeiSansTCBeta-normal', 'TaipeiSansTCBeta', 'normal');// 添加完後必須 Set  
     pdf.setFont('TaipeiSansTCBeta');
     pdf.setFontSize(16)
     pdf.setTextColor('red')// 讀取每頁設定頁尾
     for (let page = 1; i <= totalPages; i++) {        
       pdf.setPage(page)
       pdf.text(page, 15, onePageHeight - 10)
       pdf.text(date(), onePageWidth - 50, onePageHeight - 10)
     }return pdf
   })return doc
}

Ajax 傳送 pdffunction sendPdf(pdf) {
 $.ajax({
   type: 'POST',
   datatype: 'JSON',
   data: { pdf: btoa(pdf.output()) }, // 重點是要 pdf.output()
   success: function (res) {},
   error: function () {}
 })
}


參考資料:

基於html2canvas實現網頁儲存為圖片及圖片清晰度優化
網頁截圖應用-html2canvas問題研究
How to set header and footer using html2pdf — jspdf javascript plugin?
https://blog.csdn.net/cosmos16/article/details/107951678
html2pdf.js之长页面html转PDF导出
长页面html转PDF导出 html转pdf的用法网上教程搜索一大堆,但公司遇到新需求,需要把6000条数据转为pdf,页面会变空白,后端推前端,前端推后端,那我们就自己研究下吧 网上教程我随便找了一
html2pdf.js如何輸出百頁pdf,看這篇就對了 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
相信大家在做專案的時候,一定都做過報表吧 而我在做報表時,普遍都是使用水晶報表來完成(主要語言為C#) 但水晶報表實在是很不好設計,每次都搞得很蛋疼... 於是我開始學會利用網頁畫好報表再輸出成pdf…

官網:

html2pdf.js
html2pdf.js converts any webpage or element into a printable PDF entirely client-side using html2canvas and jsPDF. HTML…
jsPDF
orientation: 'p', unit: 'mm', format: 'a4', putOnlyUsedFonts:true, floatPrecision: 16 // or "smart", default is 16 }…
Options
These are all of the available configuration options. proxy Url to the proxy which is to be used for loading…