網頁

2023/10/13

Golang HTML轉PDF by go-wkhtmltopdf

Golang 使用go-wkhtmltopdf套件將HTML轉PDF。


範例環境:

  • Go 1.19
  • go-wkhtmltopdf v1.9.1


事前要求

參考「使用 wkhtmltopdf 將HTML轉成PDF」安裝wkhtmltopdf。因為go-wkhtmltopdf實際上是利用wkhtmltopdf來實現HTML轉PDF。


使用

將要轉換的HTML文件,這邊為invoice_tw.html放在專案根目錄。

在專案根目錄,命令列輸入go get -u github.com/SebastiaanKlippert/go-wkhtmltopdf安裝go-wkhtmltopdf

呼叫wkhtmltopdf.NewPDFGenerator建立wkhtmltopdf.PDFGenerator物件。

呼叫wkhtmltopdf.NewPageReader並傳入html文件的bytes.Reader建立wkhtmltopdf.PageReader物件。

呼叫wkhtmltopdf.PDFGenerator.AddPage並傳入html的wkhtmltopdf.PageReader加入頁面。

呼叫wkhtmltopdf.PDFGenerator.Dpi.Set設定DPI解析度。

呼叫wkhtmltopdf.PDFGenerator.Create建立PDF並暫存在記憶體中。

呼叫wkhtmltopdf.PDFGenerator.WriteFile將暫存在記憶體中PDF資料寫出為PDF檔案。

main.go

package main

import (
    "bytes"
    "io/ioutil"
    "log"

    "github.com/SebastiaanKlippert/go-wkhtmltopdf"
)

func main() {
    pdfg, err := wkhtmltopdf.NewPDFGenerator() // create pdf generator
    if err != nil {
        panic(err)
    }
    htmlfile, err := ioutil.ReadFile("./invoice_tw.html") // read html file
    if err != nil {
        log.Fatal(err)
    }

    pdfg.AddPage(wkhtmltopdf.NewPageReader(bytes.NewReader(htmlfile)))
    pdfg.Dpi.Set(600)

    err = pdfg.Create() // create pdf in memory
    if err != nil {
        panic(err)
    }

    err = pdfg.WriteFile("./invoice_tw.pdf") // create pdf file
    if err != nil {
        panic(err)
    }
}

github



測試

執行程式後,在專案根目錄會多了轉換的PDF檔,invoice_tw.pdf

沒有留言:

張貼留言