私たちの日常業務では、共有や印刷を容易にするために、一部のドキュメントを PDF 形式に変換する必要がよくあります。市販の既製の PDF 変換ツールは数多くありますが、ほとんどの技術者にとっては、ドキュメントから PDF への変換ツールを自分で実装する方が興味深く、有意義です。この記事では、Golang を使用して簡単なドキュメントを PDF に変換するツールを実装する方法を紹介します。
まず、ファイル変換と PDF 生成のタスクを完了するために 2 つのライブラリをインストールする必要があります。これら 2 つのライブラリは次のとおりです:
go mod コマンドを使用して、次の 2 つのライブラリをインストールできます:
go get -u github.com/SebastiaanKlippert/go-wkhtmltopdf go get -u github.com/unidoc/unioffice
これで準備が整いました。 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 文字列が出力値として返されます。
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 関数を使用して、指定されたパスに書き込むことができます。
これで、ドキュメントを 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を削除します。
この記事では、Golang を使用して簡単なドキュメントを PDF に変換するツールを実装する方法を紹介しました。 go-wkhtmltopdf と unioffice の 2 つのライブラリを使用しました。 go-wkhtmltopdf ライブラリは HTML 形式のファイルを PDF 形式に変換するために使用され、unioffice ライブラリは docx ファイルを読み取って HTML 文字列に変換するために使用されます。これら 2 つのライブラリを使用すると、ドキュメントを PDF 形式に簡単に変換できます。この例は単純ですが、Golang を使用してプロジェクトを開発する人にとっては良い出発点であり、さらに拡張および最適化することができます。
以上がgolang ドキュメントを PDF に変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。