最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端實(shí)現(xiàn)pdf導(dǎo)出功能的思路及完整代碼

 更新時(shí)間:2025年08月19日 10:07:11   作者:Laruae  
在現(xiàn)代的Web應(yīng)用開發(fā)中,常常需要實(shí)現(xiàn)文檔導(dǎo)出功能,例如導(dǎo)出Word文檔或PDF文件,這篇文章主要介紹了前端實(shí)現(xiàn)pdf導(dǎo)出功能的思路及完整代碼,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、實(shí)現(xiàn)效果

能夠?qū)⒅付ǚ秶鷥?nèi)的內(nèi)容導(dǎo)出為pdf文件

點(diǎn)擊導(dǎo)出為pdf按鈕,即將頁面內(nèi)容導(dǎo)出為pdf

導(dǎo)出的文件:

二、實(shí)現(xiàn)思路

為了簡(jiǎn)單起見,使用html來簡(jiǎn)單展示效果

首先需要下載的依賴:

html2canvas:

jsPDF:

1. 獲取元素

  • 使用document.getElementById分別獲取頁面上 ID 為exportButton的按鈕元素以及 ID 為content的目標(biāo)內(nèi)容元素。這兩個(gè)元素分別用于觸發(fā)導(dǎo)出操作和確定要導(dǎo)出的內(nèi)容范圍。

2. 添加點(diǎn)擊事件監(jiān)聽器

  • exportButton按鈕添加click點(diǎn)擊事件監(jiān)聽器。當(dāng)按鈕被點(diǎn)擊時(shí),會(huì)執(zhí)行傳入的回調(diào)函數(shù)。

3. 使用 html2canvas 生成 canvas

  • 在點(diǎn)擊事件的回調(diào)函數(shù)中,調(diào)用html2canvas(content)方法。html2canvas庫能將指定的 DOM 元素(這里是content)渲染成一個(gè)canvas元素。該操作返回一個(gè) Promise,當(dāng)canvas生成成功時(shí),會(huì)進(jìn)入then回調(diào)。

4. 處理生成的 canvas

  • html2canvasthen回調(diào)中,首先通過canvas.toDataURL('image/png')將生成的canvas轉(zhuǎn)換為 PNG 格式的圖片數(shù)據(jù) URL。
  • 接著創(chuàng)建一個(gè)新的jspdf.jsPDF實(shí)例pdf,用于生成 PDF 文件。
  • 使用pdf.getImageProperties(imgData)獲取圖片數(shù)據(jù)的屬性,以便后續(xù)調(diào)整圖片在 PDF 中的尺寸。
  • 計(jì)算 PDF 頁面的寬度pdfWidth,并根據(jù)圖片的寬高比以及 PDF 頁面寬度,計(jì)算出圖片在 PDF 中合適的高度pdfHeight。

5. 將圖片添加到 PDF 并保存

  • 通過pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight)將轉(zhuǎn)換后的圖片數(shù)據(jù)添加到 PDF 中,指定圖片格式為 PNG,位置從 PDF 頁面的左上角(0, 0)開始,寬度和高度為前面計(jì)算好的值。
  • 最后調(diào)用pdf.save('exported_content.pdf')將生成的 PDF 文件保存到本地,文件名為exported_content.pdf 。

三、最終代碼

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Export HTML to PDF</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
</head>

<body>
    <div id="content">
        <h1>測(cè)試標(biāo)題</h1>
        <p>古人云:“學(xué)如逆水行舟,不進(jìn)則退?!?在漫漫人生征途上,學(xué)習(xí)恰似那前行的舟楫,唯有持續(xù)奮進(jìn),方能抵達(dá)理想的彼岸。學(xué)習(xí),是貫穿我們一生的課題,是個(gè)人成長(zhǎng)、社會(huì)進(jìn)步的動(dòng)力源泉。?
          學(xué)習(xí),點(diǎn)亮個(gè)人成長(zhǎng)的燈塔。古往今來,無數(shù)仁人志士因?qū)W習(xí)而鑄就非凡人生??锖庥讜r(shí)勤奮好學(xué),卻因家貧無燭,他鑿穿墻壁借鄰舍燭光讀書,終成一代學(xué)問家。車胤囊螢夜讀,孫康映雪苦學(xué),他們?cè)谄D苦環(huán)境中憑借對(duì)學(xué)習(xí)的執(zhí)著,為自己贏得了改變命運(yùn)的機(jī)會(huì)。在現(xiàn)代社會(huì),學(xué)習(xí)同樣是實(shí)現(xiàn)個(gè)人價(jià)值的關(guān)鍵。屠呦呦幾十年如一日地鉆研中醫(yī)藥學(xué),翻閱大量古籍,進(jìn)行無數(shù)次實(shí)驗(yàn),最終發(fā)現(xiàn)青蒿素,拯救了無數(shù)生命,為人類健康事業(yè)作出巨大貢獻(xiàn)。她的成功,源于對(duì)知識(shí)的不懈追求與刻苦學(xué)習(xí)。通過學(xué)習(xí),我們不斷豐富知識(shí)儲(chǔ)備,提升自身能力,拓展視野,從而更好地認(rèn)識(shí)自我、發(fā)掘潛力,塑造豐富多彩的人生。?
          學(xué)習(xí),推動(dòng)社會(huì)發(fā)展的車輪。一個(gè)國家、一個(gè)民族的繁榮昌盛離不開全民學(xué)習(xí)的良好氛圍?;厥坠I(yè)革命時(shí)期,科技的飛速發(fā)展正是源于人們對(duì)科學(xué)知識(shí)的積極探索與學(xué)習(xí)。瓦特改良蒸汽機(jī),開啟了蒸汽時(shí)代,極大地提高了生產(chǎn)力,推動(dòng)了工業(yè)文明的進(jìn)程。如今,在信息時(shí)代,互聯(lián)網(wǎng)、人工智能等新技術(shù)日新月異,這背后是無數(shù)科研人員持續(xù)學(xué)習(xí)、創(chuàng)新突破的成果。在社會(huì)的各個(gè)領(lǐng)域,從教育到醫(yī)療,從文化到經(jīng)濟(jì),人們通過學(xué)習(xí)新知識(shí)、掌握新技能,為社會(huì)的發(fā)展注入源源不斷的活力。當(dāng)全民都投身于學(xué)習(xí)之中,整個(gè)社會(huì)便擁有了強(qiáng)大的發(fā)展動(dòng)力,不斷向著更高水平邁進(jìn)。</p>
    </div>
    <button id="exportButton">導(dǎo)出為 PDF</button>

    <script>
        const exportButton = document.getElementById('exportButton');
        const content = document.getElementById('content');

        exportButton.addEventListener('click', () => {
            html2canvas(content).then((canvas) => {
                const imgData = canvas.toDataURL('image/png');
                const pdf = new jspdf.jsPDF();
                const imgProps = pdf.getImageProperties(imgData);
                const pdfWidth = pdf.internal.pageSize.getWidth();
                const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;

                pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
                pdf.save('exported_content.pdf');
            });
        });
    </script>
</body>

</html>
    

總結(jié) 

到此這篇關(guān)于前端實(shí)現(xiàn)pdf導(dǎo)出功能的思路及完整代碼的文章就介紹到這了,更多相關(guān)前端導(dǎo)出pdf內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析JavaScript中如何正確判斷null和undefined

    淺析JavaScript中如何正確判斷null和undefined

    這篇文章主要為大家詳細(xì)介紹了JavaScript中如何正確判斷null和undefined,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下
    2026-01-01
  • Vue3項(xiàng)目打包體積優(yōu)化的全攻略

    Vue3項(xiàng)目打包體積優(yōu)化的全攻略

    文章主要分析了Vue3項(xiàng)目打包體積過大的原因,并提供了解決方案,包括代碼分割、懶加載、生產(chǎn)模式壓縮、靜態(tài)資源優(yōu)化、Tree-shaking等,此外,還介紹了使用工具進(jìn)行可視化分析、配置構(gòu)建優(yōu)化以及運(yùn)行時(shí)性能優(yōu)化的方法,需要的朋友可以參考下
    2026-01-01
  • 基于JS遞歸函數(shù)細(xì)化認(rèn)識(shí)及實(shí)用實(shí)例(推薦)

    基于JS遞歸函數(shù)細(xì)化認(rèn)識(shí)及實(shí)用實(shí)例(推薦)

    下面小編就為大家?guī)硪黄贘S遞歸函數(shù)細(xì)化認(rèn)識(shí)及實(shí)用實(shí)例(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • JavaScript運(yùn)算符小結(jié)

    JavaScript運(yùn)算符小結(jié)

    本文主要給大家詳細(xì)總結(jié)了下javascript中的運(yùn)算符,包括常見的算數(shù)運(yùn)算符、比較運(yùn)算符和邏輯運(yùn)算符。十分的清晰,有需要的小伙伴可以參考下。
    2015-06-06
  • 解決css和js的{}與smarty定界符沖突問題的兩種方法

    解決css和js的{}與smarty定界符沖突問題的兩種方法

    當(dāng)輸入url地址后網(wǎng)頁出現(xiàn)如下文所描述的問題通常是css和js的{}與smarty定界符沖突導(dǎo)致的,解決方法有兩個(gè),具體如下,感興趣的朋友可以參考下
    2013-09-09
  • javascript 變速加數(shù)功能實(shí)現(xiàn)代碼

    javascript 變速加數(shù)功能實(shí)現(xiàn)代碼

    試想一下你要在你的網(wǎng)站提供如下這樣的功能:提供一個(gè)文本框用于收集用戶數(shù)據(jù),這個(gè)文本框只能接受整型的數(shù)值,不提供給用戶手工輸入,只提供兩個(gè)按鈕。
    2009-10-10
  • javascript解三階幻方(九宮格)

    javascript解三階幻方(九宮格)

    本文給大家分享的是使用javascript實(shí)現(xiàn)解答九宮格問題的算法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-04-04
  • js arguments.callee的應(yīng)用代碼

    js arguments.callee的應(yīng)用代碼

    arguments.callee的使用方法,具體大家自己測(cè)試了
    2009-05-05
  • JavaScript仿微博輸入框效果(案例分析)

    JavaScript仿微博輸入框效果(案例分析)

    這篇文章給大家分享一個(gè)小的JavaScript的案例,就是模仿微博輸入框的效果,非常不錯(cuò),對(duì)微博輸入框效果感興趣的朋友通過本文學(xué)習(xí)吧
    2016-12-12
  • Three.js利用頂點(diǎn)繪制立方體的方法詳解

    Three.js利用頂點(diǎn)繪制立方體的方法詳解

    最近在學(xué)習(xí)three.js,將學(xué)習(xí)中遇到的知識(shí)點(diǎn)總結(jié)分享出來,下面這篇文章主要給大家介紹了關(guān)于Three.js利用頂點(diǎn)繪制立方體的方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09

最新評(píng)論

吉安市| 潞城市| 抚远县| 乌兰浩特市| 上思县| 陆良县| 报价| 宜城市| 卓资县| 孝感市| 水城县| 瑞丽市| 马龙县| 凌云县| 二连浩特市| 邮箱| 勃利县| 喜德县| 临高县| 嘉兴市| 紫阳县| 汶川县| 鸡东县| 泗洪县| 大城县| 乐安县| 刚察县| 固安县| 洛川县| 南昌县| 大宁县| 双桥区| 静宁县| 星子县| 资兴市| 丰县| 浦县| 湾仔区| 天门市| 会泽县| 成都市|