Golang PDF-Bild konvertieren

王林
Freigeben: 2023-05-14 20:27:36
Original
2689 Leute haben es durchsucht

Mit dem Aufkommen des digitalen Zeitalters wird die Verwendung elektronischer Dokumente immer weiter verbreitet, und PDF-Dateien werden häufig in verschiedenen Szenarien verwendet, z. B. in wissenschaftlichen Arbeiten, Vertragsvereinbarungen, elektronischen Büchern usw. In einigen Fällen müssen wir jedoch PDF-Dateien zur späteren Verarbeitung oder Anzeige in ein Bildformat konvertieren. In diesem Artikel wird erläutert, wie Sie mit Golang PDF-Dateien in das Bildformat konvertieren.

Um die Funktion der Konvertierung von PDF in Bilder zu realisieren, müssen wir die Bibliothek eines Drittanbieters GoPdf verwenden. GoPdf ist eine Bibliothek zur Verarbeitung von PDF-Dateien in der Go-Sprache. Sie unterstützt das Generieren und Bearbeiten von PDF-Dateien sowie die Konvertierung von PDF-Dateien in Bildformate. Die Installation von GoPdf ist sehr einfach. Geben Sie einfach den folgenden Befehl in das Terminal ein:

go get github.com/signintech/gopdf/...
Nach dem Login kopieren

Nach Abschluss der Installation können wir mit dem Schreiben von Programmen zum Konvertieren von PDF-Dateien in Bilder beginnen. Nachfolgend finden Sie ein Beispielprogramm:

package main

import (
    "bufio"
    "flag"
    "fmt"
    "github.com/signintech/gopdf"
    "image"
    "image/jpeg"
    "image/png"
    "os"
    "path/filepath"
    "strings"
)

var (
    inputFile        string // 输入的 PDF 文件名
    outputFilePrefix string // 输出的图片文件名前缀
    outputFormat     string // 输出的图片格式
    dpi              int    // 输出图片分辨率(DPI)
)

func main() {
    flag.StringVar(&inputFile, "input", "", "Input PDF filename")
    flag.StringVar(&outputFilePrefix, "prefix", "", "Output image filename prefix")
    flag.StringVar(&outputFormat, "format", "png", "Output image format: png or jpeg")
    flag.IntVar(&dpi, "dpi", 72, "Output image resolution (DPI)")
    flag.Parse()

    if inputFile == "" {
        fmt.Println("Please specify input PDF filename using -input")
        return
    }

    if outputFilePrefix == "" {
        outputFilePrefix = strings.TrimSuffix(inputFile, filepath.Ext(inputFile))
    }

    pdf, err := gopdf.Open(inputFile)
    if err != nil {
        fmt.Println("Failed to open PDF file:", err)
        return
    }
    defer pdf.Close()

    numPages := pdf.GetPageCount()
    if numPages == 0 {
        fmt.Println("PDF file contains no page")
        return
    }

    for i := 1; i <= numPages; i++ {
        page := pdf.GetPage(i)
        if page == nil {
            continue
        }
        defer page.Close()

        img := page.Render(dpi, dpi, nil)
        if img == nil {
            fmt.Println("Failed to render page", i)
            return
        }

        outputFile := fmt.Sprintf("%s_%d.%s", outputFilePrefix, i, outputFormat)
        file, err := os.Create(outputFile)
        if err != nil {
            fmt.Println("Failed to create output file:", err)
            return
        }
        defer file.Close()

        writer := bufio.NewWriter(file)
        if outputFormat == "png" {
            if err := png.Encode(writer, img); err != nil {
                fmt.Println("Failed to encode image:", err)
                return
            }
        } else {
            if err := jpeg.Encode(writer, img, &jpeg.Options{Quality: 95}); err != nil {
                fmt.Println("Failed to encode image:", err)
                return
            }
        }

        fmt.Println("Page", i, "saved to", outputFile)
    }

    fmt.Println("Done")
}
Nach dem Login kopieren

In diesem Beispielprogramm geben wir den Namen der Eingabe-PDF-Datei über die Befehlszeilenparameter -input, -prefix</ an. code> gibt das Präfix für den Namen der Ausgabebilddatei an, <code>-format gibt das Ausgabebildformat an, -dpi gibt die Ausgabebildauflösung (DPI) an. Wenn -prefix nicht angegeben ist, wird standardmäßig der Name der Eingabedatei abzüglich der Erweiterung als Präfix verwendet. Das Programm öffnet zunächst die eingegebene PDF-Datei und ermittelt die Gesamtzahl der darin enthaltenen Seiten. Durchlaufen Sie dann jede Seite, rendern Sie sie als Bild und speichern Sie sie in der Ausgabedatei. Das Bildformat kann PNG oder JPEG sein, die mit image/png bzw. image/jpeg in der Go-Standardbibliothek codiert werden. -input 指定输入的 PDF 文件名,-prefix 指定输出的图片文件名前缀,-format 指定输出的图片格式,-dpi 指定输出图片的分辨率(DPI)。如果没有指定 -prefix,则默认使用输入文件名去掉扩展名作为前缀。程序首先打开输入的 PDF 文件,获取其中页面总数。然后遍历每一页,将其渲染为图片,并保存到输出文件中。图片格式可以选择 PNG 或 JPEG,分别使用 Go 标准库中的 image/pngimage/jpeg 进行编码。

使用示例程序非常简单,只需要在终端中输入以下命令即可:

go run pdf2img.go -input input.pdf
Nach dem Login kopieren

其中 input.pdf 是要转换的 PDF 文件名。如果需要指定输出文件的前缀、格式或分辨率,可以加上相应的命令行参数,例如:

go run pdf2img.go -input input.pdf -prefix output -format jpeg -dpi 300
Nach dem Login kopieren

这将把 input.pdf 转换为 JPEG 格式的图片,分辨率为 300 DPI,并以 output_1.jpegoutput_2.jpegoutput_3.jpeg 等命名保存。

综上所述,使用 GoPdf 和 Go 标准库中的 image/pngimage/jpeg

Die Verwendung des Beispielprogramms ist sehr einfach. Geben Sie einfach den folgenden Befehl in das Terminal ein: #🎜🎜#rrreee#🎜🎜#wobei input.pdf das zu erstellende PDF ist konvertierter Dateiname. Wenn Sie das Präfix, das Format oder die Auflösung der Ausgabedatei angeben müssen, können Sie die entsprechenden Befehlszeilenparameter hinzufügen, zum Beispiel: #🎜🎜#rrreee#🎜🎜#Dadurch wird input.pdf konvertiert ins JPEG-Format. Die Bilder haben eine Auflösung von 300 DPI und werden unter Namen wie output_1.jpeg, output_2.jpeg, output_3.jpeg gespeichert , usw. #🎜🎜##🎜🎜#Zusammenfassend lässt sich sagen, dass mit GoPdf und image/png und image/jpeg in der Go-Standardbibliothek PDF-Dateien problemlos in das Bildformat konvertiert werden können um Ihre eigenen PDF-Verarbeitungsanforderungen zu erfüllen. #🎜🎜#

Das obige ist der detaillierte Inhalt vonGolang PDF-Bild konvertieren. 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