Heim >Backend-Entwicklung >Golang >Golang-Dokument in PDF umwandeln
Bei der täglichen Arbeit müssen wir häufig einige Dokumente in das PDF-Format konvertieren, um sie einfacher teilen und drucken zu können. Obwohl es viele vorgefertigte PDF-Konvertierungstools auf dem Markt gibt, ist es für die meisten technischen Mitarbeiter interessanter und sinnvoller, selbst ein Dokument-zu-PDF-Konvertierungstool zu implementieren. In diesem Artikel stellen wir vor, wie Sie mit Golang ein einfaches Dokument-zu-PDF-Tool implementieren.
Zuerst müssen wir zwei Bibliotheken installieren, um die Aufgaben der Dateikonvertierung und PDF-Generierung abzuschließen. Diese beiden Bibliotheken sind:
Wir können den Befehl go mod verwenden, um diese beiden Bibliotheken zu installieren:
go get -u github.com/SebastiaanKlippert/go-wkhtmltopdf go get -u github.com/unidoc/unioffice
Da wir nun die beiden Bibliotheken vorbereitet haben, besteht der nächste Schritt darin, die Funktion zum Konvertieren von Dokumenten in HTML zu implementieren. Als Beispiel verwenden wir docx-Dateien. Das Lesen von docx-Dokumenten kann problemlos mit der Unioffice-Bibliothek erfolgen. Das Folgende ist ein einfacher Implementierungscode:
package main import ( "log" "github.com/unidoc/unioffice/document" ) func DocxToHtml(inputFilePath string) (string, error) { doc, err := document.Open(inputFilePath) if err != nil { return "", err } defer func() { err := doc.Close() if err != nil { log.Fatalf("unable to close document: %s", err) } }() html, err := doc.Html() if err != nil { return "", err } return html, nil }
Die Funktion dieser Funktion besteht darin, die eingegebene DOCX-Datei in eine HTML-Zeichenfolge zu konvertieren. Der Eingabeparameter der Funktion ist der Pfad zur docx-Datei und die Ausgabe ist eine HTML-Zeichenfolge und ein Fehlerwert. In dieser Funktion verwenden wir zunächst die Funktion document.Open, um die docx-Datei zu öffnen, und verwenden dann die Funktion doc.Html, um den Dateiinhalt in eine HTML-Zeichenfolge zu konvertieren. Abschließend wird der HTML-String als Ausgabewert zurückgegeben.
Da wir nun die Funktion zum Konvertieren von docx-Dateien in HTML abgeschlossen haben, besteht der nächste Schritt darin, HTML in PDF zu konvertieren. Wir werden die Bibliothek go-wkhtmltopdf verwenden, um diese Funktionalität zu implementieren. Bei dieser Bibliothek handelt es sich um eine in der Go-Sprache gekapselte wkhtmltopdf-Bibliothek, mit der Dokumente im HTML-Format problemlos in das PDF-Format konvertiert werden können. Das Folgende ist ein einfacher Implementierungscode:
package main import ( "io/ioutil" "strings" "github.com/SebastiaanKlippert/go-wkhtmltopdf" ) func HtmlToPdf(html string, outputFilePath string) error { err := ioutil.WriteFile("input.html", []byte(html), 0644) if err != nil { return err } pdfg, err := wkhtmltopdf.NewPDFGenerator() if err != nil { return err } pdfg.AddPage(wkhtmltopdf.NewPageReader(strings.NewReader(html))) pdfg.Dpi.Set(300) pdfg.Orientation.Set(wkhtmltopdf.OrientationPortrait) pdfg.PageSize.Set(wkhtmltopdf.PageSizeA4) err = pdfg.Create() if err != nil { return err } err = pdfg.WriteFile(outputFilePath) if err != nil { return err } return nil }
Die Funktion dieser Funktion besteht darin, die eingegebene HTML-Zeichenfolge in eine PDF-Datei zu konvertieren. Die Eingabeparameter der Funktion sind eine HTML-Zeichenfolge und der Pfad zur Ausgabe-PDF-Datei, und die Ausgabe ist ein Fehlerwert. In der Funktion schreiben wir zunächst den HTML-String in eine Datei und konvertieren dann die HTML-Datei mit der Bibliothek go-wkhtmltopdf in eine PDF-Datei. Beim Aufruf der AddPage-Funktion übergeben wir die HTML-Datei als Reader-Objekt. Für die Ausgabe-PDF-Datei können wir die Funktion pdfg.WriteFile verwenden, um sie in den angegebenen Pfad zu schreiben.
Jetzt haben wir die beiden Hauptschritte zum Konvertieren von Dokumenten in PDF abgeschlossen. Hier ist ein vollständiger Beispielcode:
package main import ( "io/ioutil" "log" "os" "strings" "github.com/SebastiaanKlippert/go-wkhtmltopdf" "github.com/unidoc/unioffice/document" ) func main() { inputFilePath := "input.docx" outputFilePath := "output.pdf" html, err := DocxToHtml(inputFilePath) if err != nil { log.Fatalf("unable to convert docx to html: %s", err) } err = HtmlToPdf(html, outputFilePath) if err != nil { log.Fatalf("unable to convert html to pdf: %s", err) } err = os.Remove("input.html") if err != nil { log.Fatalf("unable to delete input.html: %s", err) } } func DocxToHtml(inputFilePath string) (string, error) { doc, err := document.Open(inputFilePath) if err != nil { return "", err } defer func() { err := doc.Close() if err != nil { log.Fatalf("unable to close document: %s", err) } }() html, err := doc.Html() if err != nil { return "", err } return html, nil } func HtmlToPdf(html string, outputFilePath string) error { err := ioutil.WriteFile("input.html", []byte(html), 0644) if err != nil { return err } pdfg, err := wkhtmltopdf.NewPDFGenerator() if err != nil { return err } pdfg.AddPage(wkhtmltopdf.NewPageReader(strings.NewReader(html))) pdfg.Dpi.Set(300) pdfg.Orientation.Set(wkhtmltopdf.OrientationPortrait) pdfg.PageSize.Set(wkhtmltopdf.PageSizeA4) err = pdfg.Create() if err != nil { return err } err = pdfg.WriteFile(outputFilePath) if err != nil { return err } return nil }
In diesem Beispiel definieren wir zwei Funktionen: DocxToHtml und HtmlToPdf. Die DocxToHtml-Funktion wird verwendet, um die eingegebene DocX-Datei in eine HTML-Zeichenfolge zu konvertieren; die HtmlToPdf-Funktion wird verwendet, um die HTML-Zeichenfolge in eine PDF-Datei zu konvertieren. In der Hauptfunktion rufen wir zunächst die Funktion DocxToHtml auf, um die docx-Datei in eine HTML-Zeichenfolge zu konvertieren, und rufen dann die Funktion HtmlToPdf auf, um die HTML-Zeichenfolge in eine PDF-Datei zu konvertieren. Abschließend löschen wir die generierte Zwischendatei input.html.
In diesem Artikel haben wir vorgestellt, wie man mit Golang ein einfaches Dokument-zu-PDF-Tool implementiert. Wir haben zwei Bibliotheken verwendet: go-wkhtmltopdf und unioffice. Die Bibliothek go-wkhtmltopdf wird zum Konvertieren von Dateien im HTML-Format in das PDF-Format verwendet; die Bibliothek unioffice wird zum Lesen von docx-Dateien und zum Konvertieren dieser in HTML-Strings verwendet. Mit diesen beiden Bibliotheken können wir Dokumente problemlos in das PDF-Format konvertieren. Obwohl dieses Beispiel einfach ist, ist es ein guter Ausgangspunkt für Leute, die Golang zum Entwickeln von Projekten verwenden, und kann weiter erweitert und optimiert werden.
Das obige ist der detaillierte Inhalt vonGolang-Dokument in PDF umwandeln. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!