マージ

基本的なマージ

2つのPDFを1つに結合します。

merged, _ := gpdf.Merge([]gpdf.Source{
    {Data: cover},
    {Data: body},
})

ページ範囲の抽出

5ページのドキュメントから2〜4ページを抽出します。

extracted, _ := gpdf.Merge([]gpdf.Source{
    {Data: full, Pages: gpdf.PageRange{From: 2, To: 4}},
})

メタデータ付き

マージ出力にタイトル、著者、プロデューサーを設定します。

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

マージ + ページ番号

ドキュメントをマージし、すべてのページにページ番号をオーバーレイします。

// マージ
merged, _ := gpdf.Merge([]gpdf.Source{
    {Data: cover},
    {Data: body},
})

// 開いてページ番号を追加
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()

カバー + 生成コンテンツ + 部分添付

本番シナリオ: スキャンしたカバーページ、gpdfで生成した本文、添付ファイルの最初の3ページを結合します。

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

// gpdfで本文を生成
doc := template.New(template.WithPageSize(document.A4))
page := doc.AddPage()
page.AutoRow(func(r *template.RowBuilder) {
    r.Col(12, func(c *template.ColBuilder) {
        c.Text("Generated Content", template.FontSize(20), template.Bold())
    })
})
generated, _ := doc.Generate()

// すべてをマージ
merged, _ := gpdf.Merge(
    []gpdf.Source{
        {Data: coverPage},
        {Data: generated},
        {Data: attachment, Pages: gpdf.PageRange{From: 1, To: 3}},
    },
    gpdf.WithMergeMetadata("Policy Bundle", "Example Ltd", ""),
)