HTML到PDF轉換,11K Star 的pdfmake.js輕松應對

在Web開發中,將HTML頁面轉換為PDF文件是一項常見的需求。無論是生成報告、發票、還是其他任何需要打印或以PDF格式分發的文檔,開發者都需要一個既簡單又可靠的解決方案。幸運的是,pdfmake.js庫以其輕量級、高性能和易用性,成為了許多開發者的首選。本文將介紹如何使用這個擁有11K Star的GitHub項目來實現HTML到PDF的轉換。

什么是pdfmake.js

pdfmake.js是一個基于JavaScript的庫,用于在客戶端和服務器端生成PDF文檔。它允許開發者使用HTML和CSS來設計PDF文檔的布局和樣式,使得創建復雜的PDF文檔變得異常簡單。

為什么選擇pdfmake.js

  • pdfmake.js的文件大小僅為11KB(壓縮后),這使得它成為Web應用中一個非常輕量級的解決方案
  • 擁有超過11K Star的GitHub項目,pdfmake.js得到了廣泛的社區支持和認可,穩定性和可靠性值得信任
  • 功能豐富,它支持表格、列表、圖片、樣式、頁眉頁腳等多種元素,幾乎可以滿足所有PDF文檔的需求。
  • pdfmake.js可以輕松集成到任何現有的Web應用中,無論是使用Node.js、Angular、React還是Vue.js。

快速開始

安裝

通過npm安裝pdfmake.js非常簡單:

npm install pdfmake

或者,如果你使用yarn:

yarn add pdfmake

創建PDF文檔

創建一個PDF文檔只需要幾個簡單的步驟:

  1. 引入pdfmake.js
import  pdfMake from 'pdfmake/build/pdfmake';//引入中文字體,避免轉換的PDF中文亂碼
pdfMake.fonts = {AlibabaPuHuiTi: {normal: 'https://xx/AlibabaPuHuiTi-3-55-Regular.ttf',bold: 'https://xxx/AlibabaPuHuiTi-3-65-Medium.ttf',italics: 'https://xxx/AlibabaPuHuiTi-3-55-Regular.ttf',bolditalics: 'https://xxx/AlibabaPuHuiTi-3-65-Medium.ttf'}
};
  1. 定義文檔內容
const dd = {content: ['Hello, 我是程序員凌覽',{ text: 'This is a simple PDF document.', fontSize: 12 },{ text: 'It is generated using pdfmake.js.', bold: true }],//設置默認字體defaultStyle: {font: 'AlibabaPuHuiTi'},
};
  1. 創建PDF
const pdf = pdfMake.createPdf(dd);
pdf.getBlob((buffer) => {const file = new File([blob], filename, { type: blob.type })//上傳服務器
});//或直接下載
pdf.download('文件名.pdf')

生成的pdf效果:

想動手體驗,請訪問pdfmake.org/playground.html。

html-to-pdfmake 強強聯合

當PDF文檔內容非固定,content字段內的結構要隨時可變,不能再像下方代碼塊一樣寫死,html-to-pdfmake即為解決這類問題而產生的。

const dd = {content: ['Hello, 我是程序員凌覽',{ text: 'This is a simple PDF document.', fontSize: 12 },{ text: 'It is generated using pdfmake.js.', bold: true }],//設置默認字體defaultStyle: {font: 'AlibabaPuHuiTi'},
};

安裝

通過npm安裝:

npm install html-to-pdfmake

或者,如果你使用yarn:

yarn add html-to-pdfmake

HTML字符串轉pdfmake格式

  1. 引入html-to-pdfmake
import  pdfMake from 'pdfmake/build/pdfmake';
import  htmlToPdfmake from 'html-to-pdfmake';//引入中文字體,避免轉換的PDF中文亂碼
pdfMake.fonts = {AlibabaPuHuiTi: {normal: 'https://xx/AlibabaPuHuiTi-3-55-Regular.ttf',bold: 'https://xxx/AlibabaPuHuiTi-3-65-Medium.ttf',italics: 'https://xxx/AlibabaPuHuiTi-3-55-Regular.ttf',bolditalics: 'https://xxx/AlibabaPuHuiTi-3-65-Medium.ttf'}
};//它會返回pdfmake需要的數據結構
const html = htmlToPdfmake(`<div><h1>程序員凌覽</h1><p>This is a sentence with a <strong>bold word</strong>, <em>one in italic</em>,and <u>one with underline</u>. And finally <a href="https://www.somewhere.com">a link</a>.</p></div>
`);
  1. 使用html-to-pdfmake轉換的數據結構
const dd = {content:html.content, //設置默認字體defaultStyle: {font: 'AlibabaPuHuiTi'},
};
const pdf = pdfMake.createPdf(dd);
pdf.download()

生成的pdf效果:

添加圖片要額外設置:

const ret = htmlToPdfmake(`<img src="https://picsum.photos/seed/picsum/200">`, {imagesByReference:true
});
// 'ret' contains:
//  {
//    "content":[
//      [
//        {
//          "nodeName":"IMG",
//          "image":"img_ref_0",
//          "style":["html-img"]
//        }
//      ]
//    ],
//    "images":{
//      "img_ref_0":"https://picsum.photos/seed/picsum/200"
//    }
//  }const dd = {content:ret.content,images:ret.images
}
pdfMake.createPdf(dd).download();

最后

通過上述步驟,我們可以看到pdfmake.js及其配套工具html-to-pdfmake為Web開發者提供了一個強大而靈活的工具,以滿足各種PDF文檔生成的需求。無論是靜態內容還是動態生成的內容,這個組合都能提供簡潔而高效的解決方案。

程序員凌覽的技術網站https://linglan01.cn/;關注公粽號【程序員凌覽】回復"1",獲取編程電子書

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

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

相關文章

Mysql sql語句字段截取前幾位,后幾位等

MySQL 字符串截取函數詳解 在MySQL中&#xff0c;處理字符串數據時&#xff0c;我們經常需要對字符串進行截取操作。MySQL提供了多種字符串截取函數&#xff0c;用以滿足不同的需求。本文將詳細介紹這些字符串截取函數&#xff0c;包括LEFT(), RIGHT(), SUBSTRING(), SUBSTRIN…

16 - 平均售價(高頻 SQL 50 題基礎版)

16 - 平均售價 # 注意&#xff1a;between 小值 and 大值 select u.product_id, round(sum(u.units*p.price)/sum(u.units),2) average_price from Prices p left join UnitsSold u on p.product_idu.product_id -- and where u.purchase_date between p.start_date and p.e…

AB測試學習(附有相關代碼)

目錄 一、基本概念1. 定義2. 作用3. 原理 二、實驗基本原則三、實驗步驟四、實驗步驟詳解1. 確定實驗目的2. 確定實驗變量3. 實驗指標設計3.1 實驗指標類型&#xff08;按作用區分&#xff09;3.1.1 核心指標3.1.2 驅動指標&#xff08;跟蹤指標&#xff09;3.1.3 護欄指標 3.2…

使用node將頁面轉為pdf?(puppeteer實現)

本文章適合win系統下實驗&#xff08;linux&#xff0c;mac可能會出現些莫名其妙的bug我也不會解決&#xff09; 具體過程 首先了解什么時無頭瀏覽器啟動無頭瀏覽器打開指定的url頁面設置導出pdf格式開始轉化完整基礎代碼 首先了解什么時無頭瀏覽器 沒有界面的瀏覽器下載pupp…

matlab使用教程(92)—流線圖、流帶圖和流管圖

1.使用向量數據顯示流線圖 MATLAB 向量數據集 wind 代表北美地區的氣流。本示例結合使用了幾種方法&#xff1a; 利用流線跟蹤風速 利用切片平面顯示數據的橫截面視圖 利用切片平面上的等高線提高切片平面著色的可見性 1.1確定坐標的范圍 加載數據并確定用來定位切片平面…

module ‘sys‘ has no attribute ‘setdefaultencoding‘

解釋&#xff1a; 在Python 3.3之后&#xff0c;sys模塊中不再提供setdefaultencoding()函數。這是因為Python 3.3開始&#xff0c;默認編碼行為被明確定義為UTF-8&#xff0c;并且不再需要手動設置默認編碼。 如果你的代碼中出現了這個錯誤&#xff0c;很可能是因為你正在嘗…

探索Linux中的zgrep命令:強大的文本搜索工具

探索Linux中的zgrep命令&#xff1a;強大的文本搜索工具 在Linux系統中&#xff0c;文本搜索和處理是一項日常任務。當我們需要在一個或多個文件中查找特定的字符串或模式時&#xff0c;通常會使用諸如grep這樣的工具。然而&#xff0c;當涉及到壓縮文件&#xff08;如gzip壓縮…

SpringBoot發郵件服務如何配置?怎么使用?

SpringBoot發郵件需要的參數&#xff1f;郵件發送性能如何優化&#xff1f; 在SpringBoot項目中配置發郵件服務是一個常見的需求&#xff0c;它允許我們通過應用程序發送通知、驗證郵件或其他類型的郵件。AokSend將詳細介紹如何在SpringBoot中配置發郵件服務。 SpringBoot發郵…

element-ui表格跨頁選擇數據

element-ui表格跨頁選擇 1.template部分2.js部分3.全部代碼 1.template部分 為table組件添加ref‘table’綁定數據源 :data‘list’添加select和select-all事件&#xff08;事件處理函數為handleSelect&#xff09; <template><div><el-table reftable :data&…

qmt量化交易策略小白學習筆記第17期【qmt編程之獲取對應周期的北向南向數據--方式1:內置python】

qmt編程之獲取對應周期的北向南向數據 qmt更加詳細的教程方法&#xff0c;會持續慢慢梳理。 也可找尋博主的歷史文章&#xff0c;搜索關鍵詞查看解決方案 &#xff01; 感謝關注&#xff0c;咨詢免費開通量化回測與獲取實盤權限&#xff0c;歡迎和博主聯系&#xff01; 獲取…

java+SimpleRegression 線性模型,針對采集到的大數據設備溫度,對設備溫度做出預測

首先,讓我們通過以下表格展示預測模型開發 Java 的整體流程: 步驟 描述 1 數據收集與清洗 2 特征工程處理 3 模型選擇與訓練 4 模型評估與調優 5 模型應用與部署 然后引入java的類庫 org.apache.commons.math3 math使用原則 math3可謂是輕量級自容器…

小程序開發平臺版源碼系統——社區論壇小程序功能 帶完整的安裝代碼包以及搭建教程

系統概述 這款社區論壇小程序源碼系統是一款功能強大、易于使用的開發平臺版源碼系統。它采用先進的技術架構&#xff0c;結合了豐富的功能模塊&#xff0c;能夠滿足不同用戶的需求。該系統具有高度的可擴展性和靈活性&#xff0c;能夠根據用戶的需求進行定制化開發&#xff0…

【ffmpeg】本地格式轉換 mp4轉wav||裁剪mp4

個人感受&#xff1a;太爽了&#xff01;&#xff01;&#xff01;&#xff08;可能用慣了轉換網站和無良的轉換軟件&#xff09; ———— 使用FFmpeg把mp4文件轉換為WAV文件 - 簡書 (jianshu.com) FFMPEG 視頻分割和合并 - 簡書 (jianshu.com) ———— 示例 ffmpeg -i …

Qwen2開源發布!0.5B到72B,顯著提升!

Qwen2是一個開源的自然語言處理模型&#xff0c;它從0.5B到72B參數規模的顯著提升&#xff0c;代表著自然語言處理技術的重大進步。Qwen2的發布&#xff0c;意味著我們可以期待模型在各項自然語言處理任務上&#xff0c;如文本生成、文本分類、機器翻譯等&#xff0c;都會有更加…

Qt 窗口居中顯示

Qt 窗口居中顯示 引言一、窗體的setGeometry函數二、計算屏幕中心然后move三、借助QRect計算四、補充知識點 引言 窗口居中可以提供良好的視覺效果、突出重點內容、提升用戶導航和操作的便利性&#xff0c;有助于改善用戶體驗。 Qt一般情況下&#xff0c;其Mainwindow或彈出的…

咖啡機器人如何精準控制液位流量

在如今快節奏的生活中&#xff0c;精確控制液位流量的需求愈發迫切&#xff0c;特別是在咖啡機器人等精密設備中。為了滿足這一需求&#xff0c;工程師們不斷研發出各種先進的技術&#xff0c;以確保液體流量的精準控制。其中&#xff0c;霍爾式流量計和光電式流量計就是兩種常…

【Spring Cloud】Gateway 服務網關核心架構的執行流程和斷言

文章目錄 基本概念執行流程斷言內置路由斷言工廠自定義路由斷言工廠 總結 基本概念 路由(Route)是gateway中最基本的組件之一&#xff0c;表示一個具體的路由信息載體。主要定義了下面的幾個信息&#xff1a; id&#xff1a;路由標識符&#xff0c;區別于其他Route。uri&…

論文合集整理推薦2024.6.4

論文合集整理推薦2024.6.4 原創 小王搬運工 時序課堂 2024-06-04 20:12 四川 ?2012年論文合集&#xff1a;論文入口 ?2019年論文合集&#xff1a;論文入口 2021年論文合集&#xff1a;論文入口 2022年論文合集&#xff1a;論文入口 2023年論文合集&#xff1a;論文入口…

carbondata入庫數據查詢異常排查

1&#xff0c;背景&#xff1a;carbondata的入庫segments對應的狀態都是success&#xff0c;但是查詢的時候報錯&#xff0c; 2&#xff0c;排查內容 1&#xff0c;segments的狀態 success 2&#xff0c;任務執行記錄日志 正常 3&#xff0c;找到對應查詢的天&#xff0c;指定對…

8255A-LED

DATA SEGMENTPORTA EQU 280H ;A端口地址PORTB EQU 281H ;B端口地址PORTD EQU 283H ;命令口地址 DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX, DATAMOV DS, AXMOV DX, PORTDMOV AL, 10010000BOUT DX,ALMOV DX, 281H MOV AL, 00HOUT DX, ALWAIT1:MOV DX, POR…