Heim  >  Artikel  >  Backend-Entwicklung  >  HTML zu PDF Golang

HTML zu PDF Golang

王林
王林Original
2023-05-15 15:22:081380Durchsuche

In tatsächlichen Entwicklungsprojekten kann es erforderlich sein, HTML in PDF zu konvertieren. Beispielsweise möchten wir einige Seiten als PDF-Dateien zum Drucken oder Verteilen usw. speichern. Es ist auch sehr einfach, diese Anforderung mit der Golang-Sprache zu realisieren. Lassen Sie uns Schritt für Schritt erklären, wie Sie mit Golang die Funktion der Konvertierung von HTML in PDF realisieren.

Zuerst müssen wir einige Konzepte klären:

HTML (Hyper Text Markup Language), Hypertext-Auszeichnungssprache, die zum Erstellen strukturierter Dokumente und Webseiten verwendet wird, auf die über einen Browser zugegriffen werden kann.

PDF (Portable Document Format), ein tragbares Dokumentformat, ist für mehrere Betriebssysteme geeignet und kann auf verschiedenen Geräten das gleiche Erscheinungsbild anzeigen.

Als nächstes müssen wir einige wichtige Bibliotheken verwenden:

  1. gofpdf-Bibliothek, die zum Generieren von PDF-Dateien in Golang verwendet wird. Es kann über den folgenden Befehl installiert werden:

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

  2. wkhtmltopdf, ein Befehlszeilentool zum Konvertieren von HTML/CSS in PDF, kann unter dieser URL heruntergeladen werden: https://wkhtmltopdf.org/downloads.html

Nach der Installation dieser beiden Bibliotheken können wir mit der Implementierung der HTML-zu-PDF-Funktion beginnen. Im Folgenden sind die spezifischen Schritte aufgeführt:

  1. Lesen Sie den Inhalt der HTML-Datei.

Wir müssen zuerst die HTML-Datei lesen, um den Inhalt lokal zu konvertieren , können Sie die Open-Methode im OS-Paket verwenden, um die Datei zu öffnen, und dann die ReadFile-Methode im ioutil-Paket verwenden, um den Dateiinhalt zu lesen. Der spezifische Code lautet wie folgt:

content, err := ioutil.ReadFile("path/to/html")
if err != nil {
    log.Fatalf("Could not read html file: %v", err)
}
  1. HTML-Inhalt in PDF konvertieren

Wir können das Exec-Paket verwenden, um das Befehlszeilentool wkhtmltopdf aufzurufen, um HTML-Inhalte in PDF-Dateien zu konvertieren. Der spezifische Code lautet wie folgt:

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)
}

Unter anderem gibt cmd.StdinPipe() eine Pipe zurück, die in die Standardeingabe des Befehls geschrieben werden kann. Wir können HTML-Inhalte als Standardeingabe des Befehls verwenden. cmd.CombinedOutput() wartet auf den Abschluss des Befehls und gibt die Befehlsausgabe zurück. Wenn ein Fehler vorliegt, wird eine Fehlermeldung zurückgegeben.

  1. Den Benutzer darüber informieren, dass die Konvertierung erfolgreich war

Abschließend müssen wir den Benutzer darüber informieren, dass die HTML-Datei erfolgreich in eine PDF-Datei konvertiert wurde. Der Code lautet wie folgt:

fmt.Println("Convert completed.")

Der vollständige Code lautet wie folgt:

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.")
}

Im obigen Code verwenden wir die gofpdf-Bibliothek, um PDF-Dateien über Golang-Code zu generieren. Wir können die entsprechenden Methoden in der gofpdf-Bibliothek verwenden, um Text, Bilder, Tabellen usw. hinzuzufügen und dann eine PDF-Datei zu generieren. Der Code lautet wie folgt:

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.")
}

Im obigen Code haben wir eine PDF-Datei erstellt und Hello hinzugefügt , Welt dazu !und ein Bild. Abschließend speichern wir die PDF-Datei lokal und melden dem Benutzer, dass die PDF-Datei erfolgreich erstellt wurde.

Zusammenfassung: Das Konvertieren von HTML in PDF ist eine sehr häufige Anforderung, die auch in der Golang-Sprache durch Befehlszeilentools und zugehörige Bibliotheken erreicht werden kann. Ich hoffe, dass der Leser durch diesen Artikel ein umfassendes und tiefgreifendes Verständnis dieses Prozesses erhält und ihn flexibel in der tatsächlichen Entwicklung einsetzen kann.

Das obige ist der detaillierte Inhalt vonHTML zu PDF Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn