首頁 > 後端開發 > Golang > golang pdf 轉圖片

golang pdf 轉圖片

王林
發布: 2023-05-14 20:27:36
原創
2737 人瀏覽過

隨著數位化時代的到來,電子文檔的使用越來越廣泛,其中 PDF 文件更是被廣泛應用於各種場景,例如學術論文、合約協議、電子書籍等等。然而,在某些情況下,我們需要將 PDF 文件轉換為圖片格式以便於後續處理或顯示。本文將介紹如何使用 Golang 將 PDF 檔案轉換為圖片格式。

為了實現 PDF 轉圖片的功能,我們需要使用一個第三方函式庫 GoPdf。 GoPdf 是一個用於在 Go 語言中處理 PDF 文件的庫,支援生成和編輯 PDF 文件,同時也支援將 PDF 轉換為圖片格式。 GoPdf 的安裝非常簡單,只需要在終端機中輸入以下命令:

go get github.com/signintech/gopdf/...
登入後複製

安裝完成後,我們可以開始編寫程式將 PDF 檔案轉換為圖片。以下給一個範例程式:

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")
}
登入後複製

在這個範例程式中,我們透過命令列參數-input 指定輸入的PDF 檔名,-prefix 指定輸出的圖片檔案名稱前綴,-format 指定輸出的圖片格式,-dpi 指定輸出圖片的解析度(DPI)。如果沒有指定 -prefix,則預設使用輸入檔名去掉副檔名作為前綴。程式首先開啟輸入的 PDF 文件,取得其中頁面總數。然後遍歷每一頁,將其渲染為圖片,並保存到輸出檔案中。圖片格式可以選擇 PNG 或 JPEG,分別使用 Go 標準庫中的 image/pngimage/jpeg 進行編碼。

使用範例程式非常簡單,只需要在終端機中輸入以下命令:

go run pdf2img.go -input input.pdf
登入後複製

其中 input.pdf 是要轉換的 PDF 檔名。如果需要指定輸出檔案的前綴、格式或分辨率,可以加上對應的命令列參數,例如:

go run pdf2img.go -input input.pdf -prefix output -format jpeg -dpi 300
登入後複製

這將把input.pdf 轉換為JPEG 格式的圖片,解析度為300 DPI,並以output_1.jpegoutput_2.jpegoutput_3.jpeg 等命名儲存。

綜上所述,使用GoPdf 和Go 標準庫中的image/pngimage/jpeg,可以很方便地將PDF 檔案轉換為圖片格式,實現自己的PDF 處理需求。

以上是golang pdf 轉圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板