搜尋
首頁web前端js教程使用JSPDF即時從網頁​​生成PDF

jsPDF:客戶端PDF生成利器,精細控制頁面元素

核心要點:

  • jsPDF是一個JavaScript庫,允許直接在客戶端生成PDF文件,從而加快處理速度。它特別適用於精確控製文檔中元素的位置、大小以及分頁。
  • jsPDF庫易於用於基本的PDF文件生成,但由於文檔有限,對於復雜的項目可能會更具挑戰性。然而,它提供了向PDF添加文本、圖像和形狀的功能,並可精確控制位置和大小。
  • jsPDF庫可以使用其API進行擴展。可以添加諸如textAlign()之類的函數,並使用setFontSize()setFont()setTextColor()setFontType()方法更改文本屬性。
  • jsPDF還允許創建多頁PDF,使用“autoTable”插件添加表格以及包含超鏈接。但是,由於瀏覽器安全限制,用戶無法指定生成的PDF的特定保存位置。

Generating PDFs from Web Pages on the Fly with jsPDF 便攜式文檔格式(PDF)是桌面出版和辦公自動化領域的一項重大創新。

它也廣泛用於網絡出版,但不幸的是,很多時候使用方法不當——例如用它來替換本應使用HTML構建的內容。這會導致許多關於可用性、可訪問性、SEO等方面的問題。

但是,在某些情況下需要PDF文件:當需要存檔文檔並且必須在網絡外部使用(例如發票)時,或者當需要對打印進行深度控制時。

正是對打印控制的需求促使我去研究一種輕鬆生成PDF的方法。

本文的目的不僅僅是簡單地解釋如何創建PDF(有很多簡單的方法可以做到這一點),而且還要關注PDF文件可以解決問題的情況,以及像jsPDF這樣的簡單工具如何提供幫助。

打印處理

任何處理過CSS打印規則的人都了解實現體面的跨瀏覽器兼容性有多麼困難(例如,查看Can I Use中的分頁符支持表)。因此,當我需要構建必須打印的內容時,我總是嘗試避免使用CSS,最簡單的解決方案是使用PDF。

我這裡說的不是簡單的HTML到PDF轉換。 (我嘗試過幾種此類工具,但沒有一個完全令我滿意。)我的目標是完全控制元素的位置和大小、分頁符等等。

過去,我經常使用FPDF,這是一個PHP工具,可以輕鬆地為您提供這種控制,並且可以輕鬆地使用許多插件進行擴展。

不幸的是,該庫似乎已被放棄(其最後一個版本可以追溯到2011年)(更新:實際上,最新版本似乎是2015年12月發布的),但由於一些JavaScript庫,我們現在可以直接在客戶端構建PDF文件(從而使它們的生成速度更快)。

幾個月前,當我開始我的項目時,我搜索了一個JS庫,最終我找到了兩個候選者:jsPDF和pdfmake。 pdfmake似乎文檔齊全且易於使用,但由於它是測試版,所以我選擇了jsPDF。

使用jsPDF構建PDF

jsPDF文檔相當簡短,包括一個頁面以及一些演示,以及源文件(或其jsDoc頁面)中更多信息,因此請記住,將其用於復雜項目一開始可能會有點困難。

無論如何,jsPDF對於基本的PDF文件生成非常容易。讓我們來看一個簡單的“Hello World”示例:

var pdf = new jsPDF();
pdf.text(30, 30, 'Hello world!');
pdf.save('hello_world.pdf');

此HTML頁面生成一個單頁PDF文件並將其保存到您的計算機上。首先,您必須鏈接到jsPDF庫(在本例中,來自cdnjs.com),然後創建一個jsPDF實例,添加一行文本,並將結果保存為hello_world.pdf。

請注意,我使用了1.0.272版本,它不是最新的:在撰寫本文時,最新版本是1.1.135,但它有很多問題,所以我仍在使用之前的版本。

您可以看到構建基本PDF文件是多麼簡單(您可以在jsPDF網站上找到更多示例)。

讓我們嘗試構建更複雜的內容。

傳單項目

幾個月前,有人要求我構建一個用於創建一些簡單傳單的應用程序。它是處理旅行社服務的更大項目的一部分,真正的傳單部分由一些JSON數據填充。

傳單的主要目的是提供一種簡單的方法來顯示要在旅行社商店櫥窗中展示的特價優惠。

我已經為本文重新安排了該應用程序,刪除了所有服務器端功能,簡化了傳單設計,擺脫了舊版瀏覽器兼容性,並使用Bootstrap 3和jQuery構建了一個非常簡單的UI。

該演示與Firefox和Chrome配合良好,而Explorer(或Edge)不允許您顯示預覽,而只能下載生成的PDF。

這是一個使用該應用程序創建的PDF示例(照片來源:Rafael Leão / Unsplash)

Generating PDFs from Web Pages on the Fly with jsPDF

可以在本文結尾或直接在CodePen中找到一個可運行的演示。請注意,由於CodePen在iframe中加載結果頁面,因此在iframe中加載的PDF預覽在Chrome和Safari中存在一些問題,阻止了預覽的顯示。 (如果可以,請使用Firefox,或者在我的個人網站上嘗試演示)。

傳單構建器

用戶界面允許用戶插入一些基本數據(標題、摘要和價格)。可以選擇添加圖像,否則將顯示灰框的“特價優惠”標題。

其他數據(代理名稱及其網站URL和徽標)嵌入到應用程序代碼中。

Generating PDFs from Web Pages on the Fly with jsPDF

PDF可以在iframe中預覽(除了Explorer或Edge)或直接下載。

當單擊“更新預覽”或“下載”按鈕時,將使用jsPDF生成PDF,並將其作為data URI字符串傳遞到iframe或保存到磁盤,如上例所示。

PDF生成首先使用以下選項創建一個新的jsPDF對象實例:縱向方向(p)、毫米單位(mm)、“A4”格式。

var pdf = new jsPDF();
pdf.text(30, 30, 'Hello world!');
pdf.save('hello_world.pdf');

使用addImage函數添加圖像。請注意,放置在PDF頁面中的每個對像都必須精確定位。您必須使用聲明的單位來處理每個對象坐標。

var pdf = new jsPDF('p', 'mm', 'a4');

圖像必須進行Base64編碼:代理徽標以這種格式嵌入到腳本中,而用戶加載的圖像則使用$('#flyer-image').change偵聽器中的readAsDataURL方法進行編碼。

標題使用textAlign函數添加。請注意,此函數不是jsPDF核心的組成部分,但是,正如作者在他的示例中建議的那樣,可以使用其API輕鬆擴展該庫。您可以在傳單構建器腳本的頂部找到textAlign()函數:

// pdf.addImage(base64_source, image format, X, Y, width, height)
pdf.addImage(agency_logo.src, 'PNG', logo_sizes.centered_x, _y, logo_sizes.w, logo_sizes.h);

此函數計算文本字符串的X坐標以使其居中,然後調用本機text()方法:

pdf.textAlign(flyer_title, {align: "center"}, 0, _y);

要更改文本屬性,可以使用setFontSize()setFont()setTextColor()setFontType()方法。

例如,要設置一個20pt Times Bold紅色字符串,您需要鍵入以下內容:

pdf.text(text string, X, Y);

“特價優惠”灰色框和價格圓圈使用兩種類似的方法:roundedRect()circle()。兩者都需要左上角坐標、大小值(第一種情況下的寬度和高度以及第二種情況下的半徑):

pdf.setFontSize(20);
pdf.setFont("times");
pdf.setFontType("bold");
pdf.setTextColor(255, 0, 0);
pdf.text(10,10, 'This is a 20pt Times Bold red string');

style參數指的是對象的填充和描邊屬性。有效的樣式包括:S [默認] 表示描邊,F 表示填充,DF(或FD)表示填充和描邊。

填充和描邊屬性必須使用setFillColorsetDrawColor預先設置,它們需要RGB值和setLineWidth,後者需要在PDF文檔創建之初聲明的單位中的線寬值。

完整的代碼可在CodePen演示中找到:

(此處應插入CodePen鏈接,由於我無法訪問外部網站,無法提供)

結論

這個基本示例展示瞭如何使用jsPDF構建非常基本的傳單。

它的使用可能很簡單,但是缺乏完整的文檔使每一步都非常複雜。

我仍在尋找其他解決方案,關注pdfmake等其他解決方案。但最終,我認為唯一真正明確的解決方案是更好地支持打印CSS規則的瀏覽器!

(此處應包含FAQ部分,內容與原文相同,但格式可根據需要調整)

以上是使用JSPDF即時從網頁​​生成PDF的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
C和JavaScript:連接解釋C和JavaScript:連接解釋Apr 23, 2025 am 12:07 AM

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

從網站到應用程序:JavaScript的不同應用從網站到應用程序:JavaScript的不同應用Apr 22, 2025 am 12:02 AM

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python vs. JavaScript:比較用例和應用程序Python vs. JavaScript:比較用例和應用程序Apr 21, 2025 am 12:01 AM

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C/C在JavaScript口譯員和編譯器中的作用C/C在JavaScript口譯員和編譯器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:學習曲線和易用性Python vs. JavaScript:學習曲線和易用性Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能