iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
自我挑戰組

技術隨筆系列 第 23

在 2024 透過程式生成 pdf 文件的選擇 (html 渲染)

  • 分享至 

  • xImage
  •  

生成 pdf 文件大致有兩種方式:html 渲染、專有 SDK,本篇介紹不同程式語言 html 渲染生成 pdf 的方式

PHP

  • mPDF:將 HTML 和 CSS 直接轉換為 PDF,支持多語言和 RTL 語言。
  • Dompdf:專門用於將 HTML/CSS 轉換成 PDF 文件的 PHP 庫,支持 HTML5 和部分 CSS2.1。
  • Snappy(KnpSnappyBundle):基於 wkhtmltopdf,使用 WebKit 渲染引擎來將 HTML 轉換為 PDF。
  • HTML2PDF:基於 TCPDF,將 HTML 轉換為 PDF 文件,支持一些基本的 CSS 樣式。

Node.js

  • Puppeteer:提供一個對 Chromium 的無頭(Headless)API,能夠渲染 HTML 並生成 PDF。
  • html-pdf:基於 phantomjs 的 HTML 轉 PDF 庫,支持基本的 HTML 和 CSS。
  • pdfkit(擴展功能):雖然 pdfkit 是基於 API 的,但可以配合 markdown-pdf 或其他 HTML 解析工具生成 PDF。
  • @react-pdf/renderer:基於 React 的 PDF 渲染工具,可以使用 JSX/HTML 來構建 PDF 內容。

Python

  • WeasyPrint:高級的 HTML/CSS 渲染引擎,將 HTML 轉換為 PDF,支持大部分 CSS 特性。
  • xhtml2pdf:從 XHTML 和 CSS 生成 PDF 文件,較為輕量但對 CSS 的支持較有限。
  • pdfkit(Python 版):使用 wkhtmltopdf,將 HTML 文件渲染成 PDF。

Java

  • Flying Saucer(xhtmlrenderer):一個基於 Java 的渲染器,能夠將 HTML/CSS 轉換為 PDF,支持大部分 CSS2.1 和部分 CSS3。
  • OpenHTMLtoPDF:基於 Flying Saucer,但增強了部分功能,能夠將 HTML 渲染成 PDF。
  • iText + jsoup:雖然 iText 本身是基於 API 的,但可以結合 jsoup 來解析 HTML,並通過 iText 將其轉換為 PDF。

C# / .NET

  • DinkToPdf:.NET Core 包裝器,基於 wkhtmltopdf,支持 HTML 渲染為 PDF。
  • PuppeteerSharp:.NET 版本的 Puppeteer,用於使用 Chromium 渲染 HTML 並生成 PDF。
  • HtmlRenderer.PdfSharp:將 HTML 渲染為 PDF,基於 PdfSharp 庫。

Ruby

  • Wicked PDF:將 HTML 和 CSS 轉換為 PDF,基於 wkhtmltopdf。
  • PDFKit(Ruby 版):另一個基於 wkhtmltopdf 的 Ruby 庫,用於 HTML 轉 PDF。
  • Prawn + Prawn-HTML:雖然 Prawn 是基於 API 的 PDF 庫,但結合 prawn-html 可以渲染部分 HTML 到 PDF。

Go

  • go-wkhtmltopdf:基於 wkhtmltopdf 的 Go 包裝器,能夠將 HTML 渲染為 PDF。
  • Chromedp:使用 Chrome DevTools Protocol (CDP) 來控制 Chrome/Chromium 渲染 HTML 生成 PDF。

html 渲染生成 pdf 的優缺點

優點:

  • 開發便捷:可以直接使用 HTML 和 CSS 進行佈局和樣式設置,降低開發成本。這對於熟悉網頁開發的開發者來說非常方便。
  • 複雜佈局支持良好:CSS 支持多種佈局方式(如表格、浮動、定位、Flexbox 等),能夠快速生成相對複雜的文檔結構,如報告、手冊等。
  • 自動處理段落換行和分段:HTML 自帶文本流佈局和段落管理,生成 PDF 時渲染引擎會自動處理文字段落的換行和分段。

缺點:

  • 性能較差:渲染 HTML 和 CSS 涉及大量的解析和計算,尤其是對於複雜的樣式和佈局,可能會增加生成 PDF 的時間。
  • 細節控制有限:對於某些情況下需要精確控制(如固定位置、精準的坐標對齊),基於 HTML/CSS 的生成方式可能較難滿足需求,因為佈局取決於瀏覽器的渲染引擎。
  • 瀏覽器兼容性問題:一些生成工具可能不支持最新的 CSS 樣式或某些特殊屬性,導致渲染結果與預期不符。

段落換行和分段處理:

  • 基於 HTML/CSS 渲染時,渲染引擎會根據 word-wrap、white-space、text-align 等 CSS 屬性自動管理文字段落的換行、分段和對齊。
  • 文字段落通常會根據元素寬度和字體樣式自動換行,無需手動計算。對於多語言和 RTL(Right-to-Left)語言也能較好地支持。

上一篇
適合透過程式生成的文件格式
下一篇
在 2024 透過套件生成 pdf 文件的選擇 (基於套件 API)
系列文
技術隨筆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言