Golang-Dokument in PDF umwandeln

王林
Freigeben: 2023-05-13 11:06:37
Original
2146 Leute haben es durchsucht

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.

  1. Abhängigkeiten installieren

Zuerst müssen wir zwei Bibliotheken installieren, um die Aufgaben der Dateikonvertierung und PDF-Generierung abzuschließen. Diese beiden Bibliotheken sind:

  • github.com/SebastiaanKlippert/go-wkhtmltopdf: Diese Bibliothek ist eine wkhtmltopdf-Bibliothek, die in der Go-Sprache gekapselt ist und zum Konvertieren von Dateien im HTML-Format in das PDF-Format verwendet wird.
  • github.com/unidoc/unioffice: Diese Bibliothek ist eine Golang-Bibliothek zum Lesen und Schreiben von Office-Dateien, die mehrere Arten von Office-Dateien unterstützt, einschließlich doc, docx, xls, xlsx, ppt, pptx usw.

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
Nach dem Login kopieren
  1. Dokumente in HTML konvertieren

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
}
Nach dem Login kopieren

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.

  1. HTML in PDF konvertieren

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
}
Nach dem Login kopieren

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.

  1. Vollständiger Code

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
}
Nach dem Login kopieren

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.

  1. Zusammenfassung

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!