golang pdfからpngへ

王林
王林オリジナル
2023-05-15 12:54:371473ブラウズ

デジタル時代の到来に伴い、ますます多くのファイルが電子ドキュメントに変換されており、その中で最も一般的に使用されているのが PDF ファイルです。 PDF ファイルの読み取りエクスペリエンスは他のファイル形式よりも読みやすいですが、特定のシナリオでは、PDF ファイルを PNG 画像形式に変換するなど、PDF ファイルの変換も必要になります。

Golang プログラミング言語では、PDF から PNG への変換機能を実現するさまざまな方法があります。これらのメソッドは通常、さまざまなサードパーティ ライブラリに基づいて実装されます。この記事では、より一般的に使用される方法をいくつか紹介します。

方法 1: Ghostscript と ImageMagick を使用する

Ghostscript は、PostScript または PDF ファイルをさまざまな形式の画像ファイルに変換できる、クロスプラットフォームの PostScript および PDF インタープリターです。 ImageMagick は、さまざまな画像形式を処理できる強力な画像処理ツールです。 Ghostscript と ImageMagick を組み合わせることで、PDF から PNG への変換機能を実現できます。

まず、コマンド ラインで次のコマンドを実行して Ghostscript と ImageMagick をインストールする必要があります:

sudo apt install ghostscript imagemagick

次に、Golang コードで、コマンド ラインで次のコマンドを実行できます。 os.Exec 関数 PDF を PNG に変換するコマンド:

cmd := exec.Command(
  "bash",
  "-c",
  fmt.Sprintf("gs -sDEVICE=pngalpha -r72 -o - %s | convert - %s.png", pdfFilePath, pngFilePath),
)
err := cmd.Run()

上記のコードでは、Ghostscript を使用して PDF ファイルを PNG ストリームに変換し、次に ImageMagick を使用して PNG ストリームを PNG ファイルに変換します。このうち、gs コマンドのパラメータ -sDEVICE=pngalpha は画像を PNG 形式で出力することを意味し、-r72 は解像度を 72dpi に設定することを意味し、-o は標準出力ストリームに出力することを意味します。

方法 2: GoFPDF ライブラリと rsvg-convert を使用する

GoFPDF は、FPDF および UFPDF に基づくモジュール式 PDF ドキュメント生成ライブラリであり、PDF ファイルの作成と操作に使用できます。 rsvg-convert は、rsvg ライブラリに基づくコマンド ライン ツールで、SVG ファイルをさまざまな画像形式に変換できます。 GoFPDF と rsvg-convert を組み合わせることで、PDF から PNG への変換機能を実現できます。

まず、コマンド ラインで次のコマンドを実行して rsvg-convert をインストールする必要があります:

sudo apt install librsvg2-bin

次に、Golang コードで GoFPDF を使用して PDF ファイルを読み取り、変換できます。 SVG ファイルの場合、コードは次のとおりです。

pdfReader := gofpdf.New("P", "mm", "A4", "")
pdfReader.SetSourceFile(pdfFile)

var buf bytes.Buffer
for i := 1; i <= pdfReader.GetPageCount(); i++ {
  tpl := pdfReader.ImportPage(i)
  opt := gofpdf.ImageOptions{}
  svg, err := tpl.ToSVG(&opt)
  if err != nil {
    return err
  }
  buf.Write(svg)
}

svgData := buf.Bytes()
svgFile, err := os.Create(svgFilePath)
if err != nil {
  return err
}
defer svgFile.Close()

_, err = svgFile.Write(svgData)
if err != nil {
  return err
}

上記のコードでは、gofpdf.ImportPage を使用して PDF ファイルの各ページをテンプレート (Template) に変換し、ToSVG を使用します。各テンプレートを SVG ファイルに変換し、複数の SVG ファイルを 1 つのファイルに結合してローカルに保存する方法。 gofpdf.ToSVG のパラメータ opt は gofpdf.ImageOptions 構造体であり、変換された SVG 画像の構成情報が含まれていることに注意してください。

次に、rsvg-convert コマンドを使用して、SVG ファイルを PNG ファイルに変換できます。コードは次のとおりです:

cmd := exec.Command(
  "bash",
  "-c",
  fmt.Sprintf("rsvg-convert -f png -o %s %s", pngFilePath, svgFilePath),
)
err := cmd.Run()

上記のコードでは、rsvg-convert コマンドを使用します。コマンドを使用して、SVG ファイルを PNG ファイルに変換し、ローカル ファイル システムに保存します。

方法 3: UniDoc ライブラリを使用する

UniDoc は、PDF ファイルおよびその他のドキュメント タイプ用の強力な Golang ライブラリであり、PDF から PNG への変換など、さまざまな PDF 操作をサポートします。 UniDoc は Ghostscript を使用して PDF を PNG に変換します。

UniDoc を使用したコードは次のとおりです。

pdfReader, err := unipdf.NewPdfReaderFromFile(pdfFilePath)
if err != nil {
  log.Fatalf("Error: %v", err)
}

numPages, err := pdfReader.GetNumPages()
if err != nil {
  log.Fatalf("Error: %v", err)
}

for i := 1; i <= numPages; i++ {
  page, err := pdfReader.GetPageAsImg(i)
  if err != nil {
    log.Fatalf("Error: %v", err)
  }

  pngFile, err := os.Create(pngFilePath)
  defer pngFile.Close()

  if err := png.Encode(pngFile, page); err != nil {
    log.Fatalf("Error: %v", err)
  }
}

上記のコードでは、UniDoc の GetPageAsImg メソッドを使用して、PDF ファイルの各ページを画像データを含む Image タイプに変換し、 Golang の組み込み png ライブラリは、画像タイプを PNG ファイルに変換し、ローカル ディスクに保存します。

要約:

上記 3 つの方法のうち、Ghostscript と ImageMagick に基づく方法、および GoFPDF ライブラリと rsvg-convert ツールに基づく方法については、関連するツールを次の場所にインストールする必要があります。最初にコマンド ラインを使用し、次に Golang コードの os.Exec 関数を使用して、対応するコマンドを実行します。 UniDoc ライブラリに基づくメソッドの場合、UniDoc ライブラリをインポートし、その中の関連メソッドを使用するだけで済みます。

要約すると、上記の 3 つの方法はすべて、Golang 独自の PNG ライブラリに加えて、サードパーティのライブラリまたはコマンド ライン ツールを使用して PDF to PNG 機能を実装します。特定の実装方法を選択するときは、プロジェクトのニーズと独自のテクノロジー スタックの特性に基づいて選択できます。

以上がgolang pdfからpngへの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:golang cgoの使い方次の記事:golang cgoの使い方