[轉]JS導出PDF

通過純js將網頁保存為pdf,A4分頁,無需服務端參與

1.引入js庫文件:

<script src="../static/jspdf/html2canvas.js"></script><script src="../static/jspdf/jsPdf.debug.js"></script>


2.思路:

用html2canvas截取頁面(html2canvas就是這樣一款前端插件,它的原理是將Dom節點在Canvas里邊畫出來),然后用jsPDF來生成pdf文件。

3.核心代碼:

為了保證生成的pdf空白區域沒有黑色背景,在操作之前先把背景設置為白色(因為沒有背景色,截取時會以黑色填充)

$("#"+divID).css("background-color","white");

解決html2canvas截取頁面太模糊,創建一個新的canvas:


var canvas_new = document.createElement("canvas");var scale = 2;var w = parseInt(window.getComputedStyle(document.querySelector("#"+divID)).width);var h = parseInt(window.getComputedStyle(document.querySelector("#"+divID)).height);

將canvas畫布放大若干倍,然后盛放在較小的容器內,就顯得不模糊了:

canvas_new.width = w * scale;canvas_new.height = h * scale;canvas_new.getContext("2d").scale(scale, scale);


進行導出:

var options = {canvas: canvas_new};html2canvas(document.querySelector("#"+divID),options)..then(function(canvas) {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 = 592.28/contentWidth * contentHeight+45;var pageData = canvas.toDataURL('image/jpeg', 1.0);var pdf = new jsPDF('', 'pt', 'a4');//有兩個高度需要區分,一個是html頁面的實際高度,和生成pdf的頁面高度(841.89)//當內容未超過pdf一頁顯示的范圍,無需分頁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;//避免添加空白頁if(leftHeight > 0) {pdf.addPage();}}}pdf.save('name.pdf');

?


---------------------
作者:致虛極POLE守靜篤
來源:CSDN
原文:https://blog.csdn.net/u011821334/article/details/79389426
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285068.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285068.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285068.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

js瀏覽器對象模型(BOM)

瀏覽器對象模型(Browser Object Model,BOM)&#xff1a;瀏覽器為js提供的對象集合。 1 windows對象 windows對象&#xff1a;表示瀏覽器的框架以及與其相關的內容&#xff0c;比如滾動條和導航欄圖標等等。或者說windows對象就代表瀏覽器本身。windows對象是個全局對象&#xf…

Hello Playwright:(8)等待頁面加載

在我們前面的文章中&#xff0c;我們始終使用await page.GotoAsync(url);加載頁面&#xff0c;我們的目的是等待足夠長的時間讓頁面上的元素出現。但是&#xff0c;我們更希望永遠不要因為等待浪費任何時間。WaitUntilGotoAsync方法的定義如下&#xff1a;Task<IResponse?&…

【ArcGIS微課1000例】0012:ArcGIS創建及連接ArcSDE企業級地理數據庫實例

文章目錄 實驗材料實驗過程創建企業級數據庫連接企業級數據庫創建要素類要素入庫實驗材料 ArcGIS:版本為10.2Server.ecp:版本為10.2SQL Server:版本為2008實驗過程 創建企業級數據庫 企業級地理數據庫的創建需要通過工具箱來實現。 數據庫平臺:SQL Server 實例:localhos…

C語言試題172之實現冒泡排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:實現冒泡…

Qt移動應用開發(八):實現跨平臺的QML和OpenGL混合渲染

Qt移動應用開發&#xff08;八&#xff09;&#xff1a;實現跨平臺的QML和OpenGL混合渲染 上一篇文章講到了利用C這個橋梁&#xff0c;我們實現了QML和Java的交互。Qt 5大力推崇的QML/JS開發&#xff0c;讓輕量、高速開發的QML/JS打頭陣&#xff0c;讓重量的C撐腰&#xff0c;差…

【HTML5初探之form標簽】解放表單驗證、增加文件上傳、集成拖放

導航【初探HTML5之使用新標簽布局】用html5布局我的博客頁&#xff01;【HTML5初探之form標簽】解放表單驗證、增加文件上傳、集成拖放【HTML5初探之繪制圖像&#xff08;上&#xff09;】看我canvas元素引領下一代web頁面【HTML5初探之繪制圖像&#xff08;下&#xff09;】看…

兩時間差

/** * Comments:返回時間差 * param 兩個字符串類型的時間差(time1-time2),type(D天,H時,M分,S秒,Z-S天時分秒) * return */ public final static SimpleDateFormat SF_SIZE19 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//初始化時間格式 public static String …

【ArcGIS微課1000例】0013:ArcGIS創建色帶圖例(以GlobeLand30土地覆蓋數據為例)

本文以GlobeLand30土地覆蓋數據(2010年)為例,講解在ArcGIS中創建色帶圖例的方法。 案例數據: 色帶圖例: 創建過程: 選擇2010年數據,點擊添加到右側的圖例項。 在圖例向導里面,刪除圖例標題,點擊下一步。

使用.NET IoT驅動超聲波測距傳感器

背景最近買的一堆傳感器到貨了&#xff0c;先來把玩一下超聲波測距傳感器。超聲波傳感器一般用于機器人&#xff0c;小車的避障&#xff0c;物體的測距&#xff0c;液位檢測&#xff0c;停車檢測等領域。HC-SR04知識回顧開始之前我們先復習一下高中的物理知識。原理通過上圖的原…

2019-nCoV 全國新型肺炎疫情每日動態趨勢可視圖

傳染源: 野生動物&#xff0c;可能為中華菊頭蝠 病毒: 新型冠狀病毒 2019-nCoV 傳播途徑: 經呼吸道飛沫傳播&#xff0c;亦可通過接觸傳播 易感人群: 人群普遍易感。老年人及有基礎疾病者感染后病情較重&#xff0c;兒童及嬰幼兒也有發病 潛伏期: 一般為 3~7 天&#xff0c;最長…

C語言試題173之實現插入排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:實現排序…

【ArcGIS遇上Python】ArcGIS Python將多個文件夾內的分幅數據整合到同一個文件夾內——以Globeland30數據為例

文章目錄 WinRAR解壓縮ArcGIS Python批處理從Glabeland30官網下載的全球地覆蓋數據包括3年(2000、2010、2020),每一年都是按圖幅存儲的tif格式柵格數據。以2000的數據為例,全球共812個圖幅,每一個圖幅對應一個壓縮包,如下圖所示。 WinRAR解壓縮 在進行數據預處理時,必須…

Delphi中字符串比較大小 VS Oracle-SQL中字符串比較大小

重點注意Delphi和Oracle-SQL中比較字符串時空字符串的根本性的不同Delphi中的字符串比較 Delphi中字符串比較大小的規則&#xff1a;對應位置的字符按照字符編碼值逐個對比&#xff0c;直到遇到可以確定大小關系的就結束比較參考《Delphi的Ord函數和ASCII碼對照表》 常見的一些…

STM8S和STM8L調試串口中斷的注意點

源&#xff1a;STM8S和STM8L調試串口中斷的注意點

C語言試題174之實現快速排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:實現快速…

解決slideDown()、slideUp()執行結束后才執行下一次,導致鼠標離開后很久動畫依然在執行的問題...

問題描述&#xff1a; 給一個容器設置了mouseenter時&#xff0c;一個隱藏的box通過slideDown()顯示出來&#xff1b;mouseleave時&#xff0c;通過slideUp()隱藏。 當鼠標不斷在容器上滑過時&#xff0c;會導致鼠標離開很久后&#xff0c;動畫也在不斷執行 解決方法&#xff…

Docker Compose 安裝 Superset

前言動手學 dockerSuperset 是一個強大的在線 SQL 查詢編輯工具&#xff0c;同時也是一個輕量級的 BI 工具&#xff0c;今天我們就來動手學一下用 docker compose 安裝 Superset。安裝動手學 docker安裝 git 并克隆項目&#xff1a;yum install git -ygit clone https://github…

[轉]再見 NoSQL!

為解決大規模數據集合多重數據種類帶來的挑戰&#xff0c;NoSQL 應運而生&#xff0c;但現在卻也遇到了諸多問題&#xff0c;本文作者 Rick Negrin&#xff0c;曾在微軟工作 12 年&#xff0c;并在 SQL Server 團隊度過大部分光陰&#xff0c;他提出&#xff0c;是時候「和 NoS…

【ArcGIS Pro微課1000例】0008:ArcGIS Pro加載不同來源的在線底圖數據

ArcGIS Pro可以很方便的選擇不同來源的在線底圖數據,如中國地圖彩色版、各種形式的天地圖等。 打開ArcGIS Pro,點擊左下角的【設置】。 點擊【選項】。 ArcGIS Pro提供了三種形式的底圖:組織的默認底圖、自定義底圖<

ORA-16198: LGWR received timedout error from KSR

ORA-16198: LGWR received timedout error from KSRORA-16198 意味著主庫上的LOG_ARCHIVE_DEST_2的NET_TIMEOUT設置的太小&#xff0c;導致LNS不能在設置的時間內將日志傳輸到備庫。解決方法是提高NET_TIMEOUT的值到15-20 秒&#xff0c;SQL>ALTER SYSTEM SET LOG_ARCHIVE_D…