首頁 >後端開發 >Golang >html轉pdf golang

html轉pdf golang

王林
王林原創
2023-05-15 15:22:081421瀏覽

在實際開發專案中,可能會有將HTML轉換為PDF的需求,例如我們想將一些頁面儲存為PDF檔案進行列印或分發等。而使用Golang語言來實現這個需求也是很簡單的,下面我們就來一步步講解如何使用Golang來實作HTML轉PDF的功能。

首先我們需要明確幾個概念:

HTML(Hyper Text Markup Language),超文本標記語言,用於建立結構化文件和網頁,可透過瀏覽器存取。

PDF(Portable Document Format),可攜式文件格式,適用於多種作業系統,可在不同裝置上顯示相同的外觀。

接下來,我們需要用到一些重要的函式庫:

  1. gofpdf函式庫,用於Golang中產生PDF檔。可以透過下面的命令進行安裝:

    go get -u github.com/jung-kurt/gofpdf

  2. wkhtmltopdf,一個用於將HTML/ CSS轉換為PDF的命令列工具,可以在這個網址下載:https://wkhtmltopdf.org/downloads.html

安裝好這兩個庫後,我們就可以開始實現HTML轉PDF的功能了,以下是具體的步驟:

  1. 讀取HTML檔案內容

#我們需要先從本機讀取要轉換的HTML檔案內容,可以使用os套件中的Open方法來開啟文件,再使用ioutil套件中的ReadFile方法讀取文件內容,具體程式碼如下:

content, err := ioutil.ReadFile("path/to/html")
if err != nil {
    log.Fatalf("Could not read html file: %v", err)
}
  1. 將HTML內容轉換為PDF

#我們可以使用exec套件將wkhtmltopdf命令列工具呼叫起來,將HTML內容轉換為PDF檔案。具體程式碼如下:

cmd := exec.Command("wkhtmltopdf", "-", "path/to/pdf")
stdin, err := cmd.StdinPipe()
if err != nil {
    log.Fatalf("Could not get stdin pipe: %v", err)
}
go func() {
    defer stdin.Close()
    _, _ = io.WriteString(stdin, string(content))
}()
out, err := cmd.CombinedOutput()
if err != nil {
    log.Fatalf("Could not convert html to pdf: %v: %s", err, out)
}

其中,cmd.StdinPipe()傳回一個可以寫入指令標準輸入的管道,我們可以將HTML內容作為指令的標準輸入。 cmd.CombinedOutput()等待命令完成並傳回命令輸出,如果有錯誤,則傳回錯誤訊息。

  1. 提示使用者轉換成功

最後,我們需要對使用者提示已成功將HTML檔案轉換為PDF檔案。程式碼如下:

fmt.Println("Convert completed.")

完整的程式碼如下:

package main

import (
    "fmt"
    "io"
    "io/ioutil"
    "log"
    "os/exec"
)

func main() {
    content, err := ioutil.ReadFile("path/to/html")
    if err != nil {
        log.Fatalf("Could not read html file: %v", err)
    }

    cmd := exec.Command("wkhtmltopdf", "-", "path/to/pdf")
    stdin, err := cmd.StdinPipe()
    if err != nil {
        log.Fatalf("Could not get stdin pipe: %v", err)
    }
    go func() {
        defer stdin.Close()
        _, _ = io.WriteString(stdin, string(content))
    }()
    out, err := cmd.CombinedOutput()
    if err != nil {
        log.Fatalf("Could not convert html to pdf: %v: %s", err, out)
    }

    fmt.Println("Convert completed.")
}

以上程式碼中,我們使用gofpdf函式庫可以透過Golang程式碼來產生PDF檔。我們可以使用gofpdf庫中的相關方法來添加文字、圖片和表格等,然後產生PDF文件,程式碼如下:

package main

import (
    "fmt"
    "github.com/jung-kurt/gofpdf"
    "log"
)

func main() {
    pdf := gofpdf.New("P", "mm", "A4", "")

    pdf.AddPage()

    pdf.SetFont("Arial", "B", 16)
    pdf.Cell(40, 10, "Hello, World!")

    pdf.Image("path/to/image", 10, 20, 30, 0, false, "", 0, "")

    pdf.OutputFileAndClose("path/to/pdf")

    fmt.Println("PDF created.")
}

在上面的程式碼中,我們創建了一個PDF文件,並在其中添加了Hello, World!和一張圖片。最後,我們將PDF文件保存在本機,並提示使用者已成功建立PDF文件。

總結:HTML轉PDF是一項很常見的需求,在Golang語言中也可以透​​過命令列工具以及相關的函式庫來實現。希望透過本篇文章,讓讀者對這個過程有一個全面而深入的了解,並且能夠在實際開發中靈活運用。

以上是html轉pdf golang的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn