golang ドキュメントを PDF に変換

王林
リリース: 2023-05-13 11:06:37
オリジナル
2165 人が閲覧しました

私たちの日常業務では、共有や印刷を容易にするために、一部のドキュメントを PDF 形式に変換する必要がよくあります。市販の既製の PDF 変換ツールは数多くありますが、ほとんどの技術者にとっては、ドキュメントから PDF への変換ツールを自分で実装する方が興味深く、有意義です。この記事では、Golang を使用して簡単なドキュメントを PDF に変換するツールを実装する方法を紹介します。

  1. インストールの依存関係

まず、ファイル変換と PDF 生成のタスクを完了するために 2 つのライブラリをインストールする必要があります。これら 2 つのライブラリは次のとおりです:

  • github.com/SebastiaanKlippert/go-wkhtmltopdf: このライブラリは、go 言語でカプセル化された wkhtmltopdf ライブラリであり、HTML 形式のファイルを PDF 形式に変換するために使用されます。
  • github.com/unidoc/unioffice: このライブラリは、doc、docx、xls、xlsx、ppt、pptx などの複数のタイプの Office ファイルをサポートする Golang Office ファイルの読み取りおよび書き込みライブラリです。

go mod コマンドを使用して、次の 2 つのライブラリをインストールできます:

go get -u github.com/SebastiaanKlippert/go-wkhtmltopdf
go get -u github.com/unidoc/unioffice
ログイン後にコピー
  1. HTML へのドキュメント変換の実装

これで準備が整いました。 2 つのライブラリを構築したら、次のステップはドキュメントを HTML に変換する機能を実装することです。例として docx ファイルを使用します。 Docx ドキュメントは、unioffice ライブラリを使用して簡単に読み取ることができます。以下は簡単な実装コードです:

package main

import (
    "log"
    "github.com/unidoc/unioffice/document"
)

func DocxToHtml(inputFilePath string) (string, error) {
    doc, err := document.Open(inputFilePath)
    if err != nil {
        return "", err
    }
    defer func() {
        err := doc.Close()
        if err != nil {
            log.Fatalf("unable to close document: %s", err)
        }
    }()

    html, err := doc.Html()
    if err != nil {
        return "", err
    }
    
    return html, nil
}
ログイン後にコピー

この関数の機能は、入力 docx ファイルを HTML 文字列に変換することです。関数の入力パラメータは docx ファイルへのパスで、出力は HTML 文字列とエラー値です。この関数では、まず document.Open 関数を使用して docx ファイルを開き、次に doc.Html 関数を使用してファイルの内容を HTML 文字列に変換します。最後に、HTML 文字列が出力値として返されます。

  1. HTML を PDF に変換

docx ファイルを HTML に変換する機能は完了しました。次のステップは、HTML を PDF に変換することです。この機能を実装するには go-wkhtmltopdf ライブラリを使用します。このライブラリは、HTML 形式のドキュメントを PDF 形式に簡単に変換できる、Go 言語でカプセル化された wkhtmltopdf ライブラリです。以下は簡単な実装コードです:

package main

import (
    "io/ioutil"
    "strings"
    "github.com/SebastiaanKlippert/go-wkhtmltopdf"
)

func HtmlToPdf(html string, outputFilePath string) error {
    err := ioutil.WriteFile("input.html", []byte(html), 0644)
    if err != nil {
        return err
    }

    pdfg, err := wkhtmltopdf.NewPDFGenerator()
    if err != nil {
        return err
    }

    pdfg.AddPage(wkhtmltopdf.NewPageReader(strings.NewReader(html)))
    pdfg.Dpi.Set(300)
    pdfg.Orientation.Set(wkhtmltopdf.OrientationPortrait)
    pdfg.PageSize.Set(wkhtmltopdf.PageSizeA4)
    err = pdfg.Create()
    if err != nil {
        return err
    }

    err = pdfg.WriteFile(outputFilePath)
    if err != nil {
        return err
    }

    return nil
}
ログイン後にコピー

この関数の機能は、入力 HTML 文字列を PDF ファイルに変換することです。関数の入力パラメータは HTML 文字列と出力 PDF ファイルへのパスで、出力はエラー値です。この関数では、まず HTML 文字列をファイルに書き込み、次に go-wkhtmltopdf ライブラリを使用して HTML ファイルを PDF ファイルに変換します。 AddPage 関数を呼び出すときは、HTML ファイルを Reader オブジェクトとして渡します。出力 PDF ファイルの場合は、pdfg.WriteFile 関数を使用して、指定されたパスに書き込むことができます。

  1. 完全なコード

これで、ドキュメントを PDF に変換する 2 つの主要な手順が完了しました。完全なコード例を次に示します。

package main

import (
    "io/ioutil"
    "log"
    "os"
    "strings"
    "github.com/SebastiaanKlippert/go-wkhtmltopdf"
    "github.com/unidoc/unioffice/document"
)

func main() {
    inputFilePath := "input.docx"
    outputFilePath := "output.pdf"
    html, err := DocxToHtml(inputFilePath)
    if err != nil {
        log.Fatalf("unable to convert docx to html: %s", err)
    }

    err = HtmlToPdf(html, outputFilePath)
    if err != nil {
        log.Fatalf("unable to convert html to pdf: %s", err)
    }

    err = os.Remove("input.html")
    if err != nil {
        log.Fatalf("unable to delete input.html: %s", err)
    }
}

func DocxToHtml(inputFilePath string) (string, error) {
    doc, err := document.Open(inputFilePath)
    if err != nil {
        return "", err
    }
    defer func() {
        err := doc.Close()
        if err != nil {
            log.Fatalf("unable to close document: %s", err)
        }
    }()

    html, err := doc.Html()
    if err != nil {
        return "", err
    }
    
    return html, nil
}

func HtmlToPdf(html string, outputFilePath string) error {
    err := ioutil.WriteFile("input.html", []byte(html), 0644)
    if err != nil {
        return err
    }

    pdfg, err := wkhtmltopdf.NewPDFGenerator()
    if err != nil {
        return err
    }

    pdfg.AddPage(wkhtmltopdf.NewPageReader(strings.NewReader(html)))
    pdfg.Dpi.Set(300)
    pdfg.Orientation.Set(wkhtmltopdf.OrientationPortrait)
    pdfg.PageSize.Set(wkhtmltopdf.PageSizeA4)
    err = pdfg.Create()
    if err != nil {
        return err
    }

    err = pdfg.WriteFile(outputFilePath)
    if err != nil {
        return err
    }

    return nil
}
ログイン後にコピー

この例では、DocxToHtml と HtmlToPdf という 2 つの関数を定義します。 DocxToHtml 関数は入力 docx ファイルを HTML 文字列に変換するために使用され、HtmlToPdf 関数は HTML 文字列を PDF ファイルに変換するために使用されます。 main 関数では、まず DocxToHtml 関数を呼び出して docx ファイルを HTML 文字列に変換し、次に HtmlToPdf 関数を呼び出して HTML 文字列を PDF ファイルに変換します。最後に、生成された中間ファイルinput.htmlを削除します。

  1. 概要

この記事では、Golang を使用して簡単なドキュメントを PDF に変換するツールを実装する方法を紹介しました。 go-wkhtmltopdf と unioffice の 2 つのライブラリを使用しました。 go-wkhtmltopdf ライブラリは HTML 形式のファイルを PDF 形式に変換するために使用され、unioffice ライブラリは docx ファイルを読み取って HTML 文字列に変換するために使用されます。これら 2 つのライブラリを使用すると、ドキュメントを PDF 形式に簡単に変換できます。この例は単純ですが、Golang を使用してプロジェクトを開発する人にとっては良い出発点であり、さらに拡張および最適化することができます。

以上がgolang ドキュメントを PDF に変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート