隨著網路的發展,越來越多的網頁需要轉換為 PDF 檔案以便於列印、分享和保存。 Node.js 的出現為我們提供了一個可以在伺服器端運行的環境,使得將網頁轉換為 PDF 檔案變得更加方便和有效率。本文將介紹如何使用 Node.js 將網頁轉換為 PDF 檔案。
一、安裝 Node.js 和相關模組
要使用 Node.js 轉換網頁為 PDF 文件,首先需要在電腦上安裝 Node.js 環境。 Node.js 可從官方網站 https://nodejs.org/ 下載並安裝。
安裝完 Node.js 後,需要安裝一些相關模組:
可以透過以下命令在命令列工具中安裝:
npm install express puppeteer
二、編寫程式碼
在安裝Node.js 和相關模組後,開始編寫程式碼。以下是一個簡單的Express 應用程序,在瀏覽器中加載網頁時會自動將網頁轉換為PDF 文件:
const express = require('express') const puppeteer = require('puppeteer') const app = express() const port = 3000 app.get('/', async (req, res) => { const browser = await puppeteer.launch() const page = await browser.newPage() await page.goto('https://www.example.com') const pdf = await page.pdf() res.contentType("application/pdf") res.send(pdf) await browser.close() }) app.listen(port, () => { console.log(`Server running at http://localhost:${port}`) })
這個應用程式使用Express 框架創建了一個Web 伺服器,並且使用Puppeteer庫將網頁轉換為PDF 文件。開啟瀏覽器並輸入 http://localhost:3000 就可以看到轉換後的 PDF 檔案。
三、參數設定
Puppeteer 庫可以設定許多參數,以便在轉換網頁為PDF 文件的過程中進行定制,例如:頁面大小、邊距、頁眉/頁腳、縮放和分頁等。以下列出一些常用的參數設定:
以下是一個在轉換網頁為PDF 檔案時設定一些參數的範例:
const express = require('express') const puppeteer = require('puppeteer') const app = express() const port = 3000 app.get('/', async (req, res) => { const browser = await puppeteer.launch() const page = await browser.newPage() await page.goto('https://www.example.com') const pdf = await page.pdf({ format: 'A4', margin: { top: '20mm', right: '20mm', bottom: '20mm', left: '20mm' }, displayHeaderFooter: true, headerTemplate: '<div class="page-number"></div>', footerTemplate: '<div class="page-number"></div>', scale: 0.8 }) res.contentType("application/pdf") res.send(pdf) await browser.close() }) app.listen(port, () => { console.log(`Server running at http://localhost:${port}`) })
這個應用程式設定了A4 頁面格式、20 毫米的邊距、顯示頁眉和頁尾、頁首和頁尾模板、0.8倍縮放比例,並控制輸出的PDF 文件只包含第1 到第10 頁。
四、總結
使用 Node.js 將網頁轉換為 PDF 檔案是非常方便且有效率的。 Puppeteer 庫提供了完整的控制 headless Chrome 的功能,可以輕鬆控制頁面大小、邊距、頁眉/頁腳、縮放和分頁等,以滿足不同的需求。透過本文的介紹,相信讀者對於將網頁轉換為 PDF 文件的過程有一定的了解,可以在實踐中不斷完善和優化。
以上是nodejs 轉pdf的詳細內容。更多資訊請關注PHP中文網其他相關文章!