PDFマージ

概要

Since v1.0.2

gpdfは複数のPDFドキュメントを1つに結合できます。ドキュメント全体を結合することも、各ソースから特定のページ範囲を抽出することもできます。

一般的なユースケース:

  • カバーページと生成コンテンツの結合
  • 請求書を1つのバンドルにマージ
  • 大きなドキュメントから特定のページを抽出
  • 複数のソースからレポートを組み立て

基本的なマージ

gpdf.Merge() を使って2つ以上のPDFを結合します:

import gpdf "github.com/gpdf-dev/gpdf"

cover, _ := os.ReadFile("cover.pdf")
body, _ := os.ReadFile("body.pdf")

merged, err := gpdf.Merge([]gpdf.Source{
    {Data: cover},
    {Data: body},
})
if err != nil {
    log.Fatal(err)
}

os.WriteFile("output.pdf", merged, 0644)

Source は生のPDFバイトを含みます。デフォルトでは、各ソースのすべてのページが含まれます。

ページ範囲の抽出

PageRange を使って、ソースから特定のページのみを含めます(1ベース、両端を含む):

full, _ := os.ReadFile("report.pdf")

// 2ページ目から4ページ目を抽出
extracted, err := gpdf.Merge([]gpdf.Source{
    {Data: full, Pages: gpdf.PageRange{From: 2, To: 4}},
})

PageRange のルール:

  • From: 0 または省略 — 最初のページから開始
  • To: 0 または省略 — 最後のページまで
  • ゼロ値 PageRange{} — すべてのページを含む

メタデータの設定

WithMergeMetadata を使って、マージ出力にドキュメント情報を設定します:

merged, err := gpdf.Merge(
    []gpdf.Source{
        {Data: cover},
        {Data: body},
        {Data: appendix},
    },
    gpdf.WithMergeMetadata("Policy Bundle", "Example Ltd", "gpdf"),
)

パラメータ: title, author, producer

マージ + オーバーレイ

マージとオーバーレイを組み合わせて、マージ後にページ番号や透かしを追加します:

// Step 1: ドキュメントをマージ
merged, _ := gpdf.Merge([]gpdf.Source{
    {Data: cover},
    {Data: body},
})

// Step 2: マージ結果を開いてページ番号を追加
doc, _ := gpdf.Open(merged)
count, _ := doc.PageCount()

doc.EachPage(func(i int, p *template.PageBuilder) {
    p.Absolute(document.Mm(170), document.Mm(285), func(c *template.ColBuilder) {
        c.Text(fmt.Sprintf("%d / %d", i+1, count),
            template.FontSize(10),
            template.AlignRight(),
        )
    }, template.AbsoluteWidth(document.Mm(20)))
})

result, _ := doc.Save()
os.WriteFile("final.pdf", result, 0644)

APIリファレンス

関数 / 型説明
gpdf.Merge(sources, opts...)複数のPDFを1つに結合
gpdf.Source入力PDF: Data []byte + Pages PageRange
gpdf.PageRange1ベースの範囲: From, To(0 = デフォルト)
gpdf.WithMergeMetadata(title, author, producer)出力にドキュメントメタデータを設定

次のステップ