Heim  >  Artikel  >  Backend-Entwicklung  >  Bild in PDF Golang konvertieren

Bild in PDF Golang konvertieren

WBOY
WBOYOriginal
2023-05-15 09:04:07878Durchsuche

Als ich kürzlich ein Dateikonvertierungstool entwickelte, musste ich mehrere Bilder in eine PDF-Datei konvertieren. Da ich die Golang-Sprache verwende, habe ich mich für die Go-Sprache entschieden, um ein Programm zum Konvertieren von Bildern in PDF zu schreiben.

In diesem Artikel werde ich die Erfahrungen und einige wichtige Details teilen, die ich während des Entwicklungsprozesses gewonnen habe. Im Folgenden sind die Hauptfunktionen und -prozesse des Programms aufgeführt:

  • Mehrere Bilddateien lesen
  • PDF-Dateien erstellen
  • Alle Bilder in PDF-Seiten konvertieren
  • Alle Seiten in PDF-Dateien speichern

Zuerst müssen wir is verarbeiten Datei lesen. In Go gibt es eine Standardbibliothek „io/ioutil“ zum Lesen von Dateien, die sehr praktisch und einfach zu verwenden ist. Mit der Methode ReadDir() in dieser Bibliothek können wir alle Dateien im angegebenen Verzeichnis abrufen.

func getImagesFromDir(dir string) ([]string, error) {
    files, err := ioutil.ReadDir(dir)
    images := []string{}

    if err != nil {
        return images, err
    }

    for _, file := range files {
        if !file.IsDir() && strings.Contains(file.Name(), ".jpg") {
            images = append(images, filepath.Join(dir, file.Name()))
        }
    }

    return images, nil
}

Als nächstes müssen wir eine PDF-Datei erstellen. In Go gibt es mehrere Bibliotheken von Drittanbietern, die PDF-Dateien erstellen können, und wir können uns für die Verwendung der GoFPDF-Bibliothek entscheiden. Die Bibliothek bietet zahlreiche Anpassungsoptionen und -funktionen wie die Größenänderung der Seite, das Festlegen von Schriftarten und Farben usw.

pdf := gofpdf.New("P", "mm", "A4", "")
pdf.AddPage()
pdf.SetFont("Arial", "B", 16)
pdf.Cell(40, 10, "Hello, world!")
pdf.OutputFileAndClose("hello.pdf")

Wir haben jetzt erfolgreich eine PDF-Datei erstellt, aber noch keine Bilder hinzugefügt. Der nächste Schritt besteht darin, alle Bilder in PDF-Seiten zu konvertieren. Dies kann erreicht werden, indem die Bilder als Seitenhintergründe hinzugefügt werden. Wir können die Bild- und Bild-/Zeichnungs-Standardbibliotheken in Go verwenden, um Bilder zu öffnen und zu verarbeiten.

func imageToPdf(imagePath string, pdf *gofpdf.Fpdf) {
    image.RegisterFormat("jpeg", "jpeg", jpeg.Decode, jpeg.DecodeConfig)

    f, err := os.Open(imagePath)
    defer f.Close()

    if err != nil {
        log.Fatal("Failed to open file:", err)
    }

    // decode the image
    img, _, err := image.Decode(f)

    if err != nil {
        log.Fatal("Failed to decode image:", err)
    }

    // get image dimensions
    w := float64(img.Bounds().Max.X)
    h := float64(img.Bounds().Max.Y)

    // add page to pdf
    pdf.AddPageFormat("P", gofpdf.SizeType{Wd: w, Ht: h})
    pdf.Image(imagePath, 0, 0, w, h, false, "", 0, "")
}

Der letzte Schritt besteht darin, alle Seiten in einer PDF-Datei zu speichern. Wir können die Methode WriteFile() in Golang verwenden, um alle Seiten in eine Datei mit dem Suffix pdf zu schreiben.

func savePdf(pdf *gofpdf.Fpdf, outputPath string) error {
    return pdf.OutputFileAndClose(outputPath)
}

Jetzt können wir alle oben genannten Codes integrieren, um ein vollständiges Bild-zu-PDF-Programm zu implementieren.

package main

import (
    "fmt"
    "github.com/jung-kurt/gofpdf"
    "image"
    "image/jpeg"
    "io/ioutil"
    "log"
    "os"
    "path/filepath"
    "strings"
)

func getImagesFromDir(dir string) ([]string, error) {
    files, err := ioutil.ReadDir(dir)
    images := []string{}

    if err != nil {
        return images, err
    }

    for _, file := range files {
        if !file.IsDir() && strings.Contains(file.Name(), ".jpg") {
            images = append(images, filepath.Join(dir, file.Name()))
        }
    }

    return images, nil
}

func imageToPdf(imagePath string, pdf *gofpdf.Fpdf) {
    image.RegisterFormat("jpeg", "jpeg", jpeg.Decode, jpeg.DecodeConfig)

    f, err := os.Open(imagePath)
    defer f.Close()

    if err != nil {
        log.Fatal("Failed to open file:", err)
    }

    // decode the image
    img, _, err := image.Decode(f)

    if err != nil {
        log.Fatal("Failed to decode image:", err)
    }

    // get image dimensions
    w := float64(img.Bounds().Max.X)
    h := float64(img.Bounds().Max.Y)

    // add page to pdf
    pdf.AddPageFormat("P", gofpdf.SizeType{Wd: w, Ht: h})
    pdf.Image(imagePath, 0, 0, w, h, false, "", 0, "")
}

func savePdf(pdf *gofpdf.Fpdf, outputPath string) error {
    return pdf.OutputFileAndClose(outputPath)
}

func main() {
    inputDir := "input"
    outputPdf := "output.pdf"

    fmt.Printf("Reading images from '%v'
", inputDir)
    images, err := getImagesFromDir(inputDir)
    if err != nil {
        log.Fatal("Failed to read images:", err)
    }

    if len(images) == 0 {
        log.Fatal("No images found in directory")
    }

    fmt.Printf("Found %v images
", len(images))

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

    for _, imagePath := range images {
        fmt.Printf("Converting '%v'
", imagePath)
        imageToPdf(imagePath, pdf)
    }

    if err = savePdf(pdf, outputPdf); err != nil {
        log.Fatal("Failed to save PDF:", err)
    }

    fmt.Printf("Saved PDF to '%v'
", outputPdf)
}

Ein paar Vorschläge:

  • Verbessern Sie die Erweiterung. Wenn Ihre Anwendung weitere Dateierweiterungen verwenden muss, denken Sie daran, die entsprechenden Änderungen in der Funktion getImagesFromDir vorzunehmen.
  • Bilder zoomen. Sie können die Methoden in der Bild-/Zeichnungsbibliothek verwenden, um das Bild zu skalieren, um ein Überlaufen der PDF-Seite zu vermeiden.
  • Fügen Sie Seitenzahlen oder Text hinzu. Zusätzlich zu den in der App angezeigten Bildern können Sie Text, Titel, Seitenzahlen und mehr hinzufügen.

Fazit:

Das Konvertieren von Bildern in PDF ist eine häufige Aufgabe, aber das bedeutet nicht, dass sie übermäßig schwierig oder kompliziert sein sollte. Sie können Ihr eigenes Konvertierungsprogramm erstellen, indem Sie sich hauptsächlich auf den Prozess des Dateilesens, der Erstellung von PDF-Dateien, der Konvertierung von Bildern in PDF-Seiten und dem Speichern aller Seiten in einer einzigen Datei konzentrieren. Wenn Ihr Projekt auf der Konvertierung von Bildern in PDF-Dateien basiert, empfehlen wir die Verwendung der Golang-Sprache.

Das obige ist der detaillierte Inhalt vonBild in PDF Golang konvertieren. 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
Vorheriger Artikel:Golang-Array-LöschelementNächster Artikel:Golang-Array-Löschelement