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:
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:
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!