gpdf パッケージ

概要

gpdf パッケージは内部レイヤーからよく使う関数を再エクスポートするファサードです。便利に gpdf をインポートすることも、特定のパッケージを直接インポートすることもできます。

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

// Using facade
doc := gpdf.NewDocument(gpdf.WithPageSize(gpdf.A4))
import (
    "github.com/gpdf-dev/gpdf/template"
    "github.com/gpdf-dev/gpdf/document"
)

// Using packages directly (recommended)
doc := template.New(template.WithPageSize(document.A4))

関数

NewDocument

func NewDocument(opts ...template.Option) *template.Document

新しいPDFドキュメントビルダーを作成します。これが主要なエントリーポイントです。

doc := gpdf.NewDocument(
    gpdf.WithPageSize(gpdf.A4),
    gpdf.WithMargins(document.UniformEdges(document.Mm(20))),
)

FromJSON

func FromJSON(schema []byte, data any, opts ...template.Option) (*template.Document, error)

JSONスキーマ定義とオプションのGoテンプレートデータバインディングからDocumentを作成します。

doc, err := gpdf.FromJSON(schema, map[string]any{"title": "Report"})

FromTemplate

func FromTemplate(tmpl *template.Template, data any, opts ...template.Option) (*template.Document, error)

JSONスキーマ出力を生成するパース済みGoテンプレートを実行してDocumentを作成します。

TemplateFuncMap

func TemplateFuncMap() template.FuncMap

Goテンプレートのパース時に使用するヘルパー関数(toJSON など)を返します。

ドキュメントオプション

関数説明
WithPageSize(size)ページサイズを設定(A4, A3, Letter, Legal
WithMargins(edges)ページマージンを設定
WithFont(family, data)TrueTypeフォントを登録([]byte を受け取る)
WithDefaultFont(family, size)デフォルトのフォントファミリーとサイズを設定
WithMetadata(meta)ドキュメントメタデータを設定
WithEncryption(opts...)AES-256暗号化を有効化
WithPDFA(opts...)PDF/A準拠を有効化

ドキュメントメタデータ

gpdf.WithMetadata(document.DocumentMetadata{
    Title:   "Invoice #INV-2026-001",
    Author:  "ACME Corporation",
    Subject: "Monthly Invoice",
    Creator: "gpdf v1.0.4",
})

ページサイズ

定数寸法
gpdf.A4 / document.A4210mm x 297mm (595.28pt x 841.89pt)
gpdf.A3 / document.A3297mm x 420mm (841.89pt x 1190.55pt)
gpdf.Letter / document.Letter8.5" x 11" (612pt x 792pt)
gpdf.Legal / document.Legal8.5" x 14" (612pt x 1008pt)

Document メソッド

AddPage

func (d *Document) AddPage() *PageBuilder

新しいページを追加し、そのビルダーを返します。

func (d *Document) Header(fn func(p *PageBuilder))
func (d *Document) Footer(fn func(p *PageBuilder))

すべてのページに繰り返し表示されるコンテンツを定義します。

Generate / Render

func (d *Document) Generate() ([]byte, error)
func (d *Document) Render(w io.Writer) error

Generate() はPDFをバイトスライスとして返します。Render()io.Writer に直接書き込みます。

PageBuilder メソッド

Row

func (p *PageBuilder) Row(height document.Value, fn func(r *RowBuilder))
func (p *PageBuilder) AutoRow(fn func(r *RowBuilder))

Row() は固定高さの行を作成します。AutoRow() はコンテンツに合わせて調整される行を作成します。

RowBuilder メソッド

Col

func (r *RowBuilder) Col(span int, fn func(c *ColBuilder))

12グリッドカラムのうち span 分を占めるカラムを作成します。

ColBuilder メソッド

メソッド説明
Text(text, opts...)スタイリングオプション付きテキストを追加
Image(data, opts...)画像を追加(JPEGまたはPNGバイト)
Table(headers, rows, opts...)テーブルを追加
List(items, opts...)箇条書きリストを追加
OrderedList(items, opts...)番号付きリストを追加
Line(opts...)水平罫線を追加
Spacer(height)垂直スペースを追加
QRCode(data, opts...)QRコードを追加
Barcode(data, opts...)バーコードを追加(Code 128)
RichText(fn)混合スタイルのインラインテキストを追加
PageNumber(opts...)現在のページ番号
TotalPages(opts...)合計ページ数

QRコードオプション

関数説明
QRSize(value)表示サイズ(幅 = 高さ)
QRErrorCorrection(level)誤り訂正: LevelL, LevelM, LevelQ, LevelH
QRScale(s)QRモジュールあたりのピクセル数

バーコードオプション

関数説明
BarcodeWidth(value)表示幅
BarcodeHeight(value)表示高さ
BarcodeFormat(format)バーコード形式(デフォルト: Code 128)

既存PDFの操作

Open

func Open(data []byte, opts ...template.Option) (*template.ExistingDocument, error)

既存のPDFを読み取りおよび変更用に開きます。インクリメンタルアップデート(非破壊的な追記)によるオーバーレイ操作をサポートする ExistingDocument を返します。

doc, err := gpdf.Open(pdfBytes)

ExistingDocument メソッド

メソッド説明
PageCount() (int, error)PDFのページ数を返す
Overlay(pageIndex int, fn func(p *PageBuilder)) error特定のページにコンテンツを重ねる(0ベースインデックス)
EachPage(fn func(pageIndex int, p *PageBuilder)) errorすべてのページにコンテンツを重ねる
FlattenForms() errorすべてのAcroFormフィールドを静的ページコンテンツにフラット化 Since v1.0.4
Save() ([]byte, error)変更されたPDFをバイトスライスとして返す
doc, err := gpdf.Open(pdfBytes, gpdf.WithFont("NotoSans", fontData))

// Add watermark on page 1
doc.Overlay(0, func(p *template.PageBuilder) {
    p.Absolute(document.Mm(40), document.Mm(120), func(c *template.ColBuilder) {
        c.Text("DRAFT", template.FontSize(72),
            template.TextColor(pdf.Gray(0.85)))
    })
})

// Add page numbers on every page
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, err := doc.Save()

PDFマージ Since v1.0.2

Merge

func Merge(sources []Source, opts ...MergeOption) ([]byte, error)

複数のPDFソースのページを1つの出力PDFに結合します。

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

Source

type Source struct {
    Data  []byte    // 生のPDFバイト
    Pages PageRange // 含めるページ。ゼロ値 = すべてのページ
}

PageRange

type PageRange struct {
    From int  // 1ベースの開始ページ。0 = 最初のページ
    To   int  // 1ベースの終了ページ。0 = 最後のページ
}

マージオプション

関数説明
WithMergeMetadata(title, author, producer)マージ出力にドキュメント情報(タイトル、著者、プロデューサー)を設定
merged, err := gpdf.Merge(
    []gpdf.Source{
        {Data: cover},
        {Data: body},
        {Data: appendix},
    },
    gpdf.WithMergeMetadata("Policy Bundle", "Example Ltd", "gpdf"),
)

コンポーネントコンストラクタ

関数説明
NewInvoice(data)請求書PDFを作成
NewReport(data)レポートPDFを作成
NewLetter(data)ビジネスレターPDFを作成

詳細はコンポーネントを参照してください。