










升級(jí)開發(fā)的一個(gè)寶石證書網(wǎng)站需要把證書導(dǎo)出PDF文檔供用戶下載
先看導(dǎo)出需導(dǎo)出的內(nèi)容部分:
客戶需要把這部分添加可以導(dǎo)出PDF文檔功能
開發(fā)此功能,可以使用后端PHP實(shí)現(xiàn),也可以使用js實(shí)現(xiàn)
在這個(gè)網(wǎng)站使用js導(dǎo)出PDF更加合適。
有插件使用當(dāng)然使用插件,這次使用jspdf插件。
先下載jspdf插件,這個(gè)這里就不放出來(lái)了,首先在需導(dǎo)出的頁(yè)面添加導(dǎo)出按鈕,HTML代碼如下:
按鈕css樣式使用Bootstrap,這里不貼出來(lái)了,按鈕最終效果如下:
然后引入下載好的JS插件,代碼如下:
自己代碼的話,目錄需對(duì)應(yīng)一致
然后根據(jù)插件編寫導(dǎo)出PDF文檔代碼,這里需要添加分頁(yè)控制,代碼如下:
$("#downpdf").click(function() { var now = new Date(); var year = now.getFullYear(); //得到年份 var month = now.getMonth();//得到月份 var date = now.getDate();//得到日期 var day = now.getDay();//得到周幾 var hour = now.getHours();//得到小時(shí) var minu = now.getMinutes();//得到分鐘 var sec = now.getSeconds();//得到秒 var MS = now.getMilliseconds();//獲取毫秒 month = month + 1; if (month < 10) month = "0" + month; if (date < 10) date = "0" + date; if (hour < 10) hour = "0" + hour; if (minu < 10) minu = "0" + minu; if (sec < 10) sec = "0" + sec; if (MS < 100) MS = "0" + MS; this.time = year + "-" + month + "-" + date + " " + hour + ":" + minu + ":" + sec var target = document.getElementById("pdf-container"); target.style.background = "#FFFFFF"; html2canvas(target).then((canvas) => { console.log(canvas) var contentWidth = canvas.width; var contentHeight = canvas.height; //一頁(yè)pdf顯示html頁(yè)面生成的canvas高度; var pageHeight = contentWidth / 592.28 * 841.89; //未生成pdf的html頁(yè)面高度 var leftHeight = contentHeight; //頁(yè)面偏移 var position = 0; //a4紙的尺寸[595.28,841.89],html頁(yè)面生成的canvas在pdf中圖片的寬高 var imgWidth = 595.28; var imgHeight = 592.28/contentWidth * contentHeight; var pageData = canvas.toDataURL('image/jpeg', 1.0); var pdf = new jsPDF('', 'pt', 'a4'); //有兩個(gè)高度需要區(qū)分,一個(gè)是html頁(yè)面的實(shí)際高度,和生成pdf的頁(yè)面高度(841.89) //當(dāng)內(nèi)容未超過(guò)pdf一頁(yè)顯示的范圍,無(wú)需分頁(yè) console.log(leftHeight,pageHeight) if (leftHeight < pageHeight) { pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight ); } else { while(leftHeight > 0) { pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight) leftHeight -= pageHeight; position -= 841.89; //避免添加空白頁(yè) if(leftHeight > 1) { pdf.addPage(); } } } let name = + '.pdf' pdf.save(name); }); });
導(dǎo)出的文件名稱是以證書編號(hào)命名,導(dǎo)出為A4紙張大小。
導(dǎo)出的效果PDF效果圖如下:
演示鏈接地址:
https://www.gra.pub/search.html?q=98288840&submit=+