はじめに

この投稿では、Aspose.PDF FOSS を使用して Go でコア PDF ドキュメント管理操作を実行する方法を学びます:ドキュメントのオープンと保存、新しい PDF の作成、ドキュメントをページ単位のファイルに分割、複数の PDF のマージ、ページ範囲の抽出、そしてドキュメントメタデータの読み書きです。すべての操作は、ネイティブな C または C++ の依存関係なしで利用できます。

このライブラリは github.com/aspose-pdf-foss/aspose-pdf-foss-for-go にある Go モジュールで、MIT ライセンスです。また、Go 1.24 以降が必要です。

go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go

この投稿では、コアドキュメント管理インターフェースを構成する DocumentPagePageRange、および DocumentInfo タイプについて説明します。


コア操作

ドキュメントのオープンと保存

pdf.Open はディスクから PDF を読み込み、*Document を返します。OpenWithPassword はパスワード保護されたファイルに対して同様の処理を行います。Document.Save は結果をファイルパスに書き戻します。Document.WriteTo はインメモリまたはネットワークシナリオ用に io.Writer に書き込みます。

// Open a standard PDF
doc, err := pdf.Open("input.pdf")
if err != nil {
	panic(err)
}

// Open an encrypted PDF
protected, err := pdf.OpenWithPassword("locked.pdf", "userpassword")
if err != nil {
	panic(err)
}

// Save to a new path
err = doc.Save("output.pdf")
fmt.Println(protected.PageCount())

新しいドキュメントの作成

pdf.NewDocument は空の *Document を作成します。標準的な用紙サイズの空白ページを追加するには AddBlankPageFromFormat を使用します。PageFormat は名前付きフォーマット定数(PageFormatA4PageFormatLetter など)を提供します。

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)

doc.Save("new_document.pdf")

ドキュメントの分割

Document.Split は PDF をページごとの個別の *Document に分割します。返される各ドキュメントは正確に1ページを含み、個別に保存できます。これはバッチ生成されたレポートを分割したり、請求書のページを分離したりするのに便利です。

doc, _ := pdf.Open("multi_page.pdf")
pages, err := doc.Split()
if err != nil {
	panic(err)
}

for i, p := range pages {
	filename := fmt.Sprintf("page_%03d.pdf", i+1)
	if err := p.Save(filename); err != nil {
		fmt.Printf("Failed to save page %d: %v\n", i+1, err)
	}
}
fmt.Printf("Split into %d pages\n", len(pages))

複数の PDF の結合

Document.Append は2つ目の *Document を受信側にインプレースでマージし、ソースのすべてのページを追加します。Append を繰り返し呼び出すことで、単一の Save の前に複数のドキュメントを連結できます。ソースドキュメントは変更されません。

base, _ := pdf.Open("report_intro.pdf")
section1, _ := pdf.Open("section1.pdf")
section2, _ := pdf.Open("section2.pdf")
appendix, _ := pdf.Open("appendix.pdf")

base.Append(section1)
base.Append(section2)
base.Append(appendix)

base.Save("complete_report.pdf")

ページ範囲の抽出

PageRange は包括的な範囲を表します(1ベースで、From/To フィールドを使用)。範囲を Document.Extract に渡すと、選択したページだけを含む新しい *Document が生成されます。これは、章ごとのエクスポートや特定のページを除外した編集済みコピーを作成する際に便利です。

doc, _ := pdf.Open("long_report.pdf")

// Extract pages 3 through 7
subset, err := doc.Extract(pdf.PageRange{From: 3, To: 7})
if err != nil {
	panic(err)
}
subset.Save("pages_3_to_7.pdf")

ドキュメントメタデータの読み取りと書き込み

Document.InfoDocumentInfo 構造体を返し、Info 辞書のフィールド Title, Author, Subject, Keywords, Creator, Producer, CreationDate, ModDate を公開します。フィールドを直接変更し、Document.SetInfo を呼び出して更新された構造体を書き戻し、Save を呼び出す前に実行してください。

doc, _ := pdf.Open("report.pdf")
info, _ := doc.Info()

// Read current values
fmt.Printf("Title: %s\nAuthor: %s\n", info.Title, info.Author)

// Update fields
info.Title = "Annual Report 2026"
info.Author = "Finance Team"
info.Keywords = "annual, report, finance, 2026"

doc.SetInfo(info)
doc.Save("report_updated.pdf")

個別ページへのアクセス

Document.Page(n) は 1 ベースのインデックスで *Page を取得します。Document.PageCount はページ総数を返します。ページはジオメトリプロパティを公開しており、ページボックスやサイズを読み取ることができます。

doc, _ := pdf.Open("document.pdf")
fmt.Printf("Page count: %d\n", doc.PageCount())

page, _ := doc.Page(1)
size, err := page.Size()
if err != nil {
	panic(err)
}
fmt.Printf("Page 1 size: %.0f x %.0f pt\n", size.Width, size.Height)

クイックスタート

go get でモジュールをインストールし、以下の完全なサンプルを実行してください。このサンプルはソースドキュメントを開き、最初の 3 ページを新しいドキュメントに抽出し、DocumentInfo メタデータフィールドを更新し、結果をディスクに保存します。

go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go

ドキュメントを開き、ページ1〜3を抽出し、更新されたメタデータで結果を保存する完全な例:

package main

import (
	"fmt"
	pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)

func main() {
	// Open source document
	src, err := pdf.Open("source.pdf")
	if err != nil {
		panic(err)
	}

	// Extract pages 1-3
	subset, err := src.Extract(pdf.PageRange{From: 1, To: 3})
	if err != nil {
		panic(err)
	}

	// Update metadata
	info, _ := subset.Info()
	info.Title = "Pages 1-3 Extract"
	info.Author = "Document Pipeline"
	subset.SetInfo(info)

	if err := subset.Save("extract_pages_1_3.pdf"); err != nil {
		panic(err)
	}
	fmt.Printf("Saved %d pages\n", subset.PageCount())
}

オープンソースとライセンス

Aspose.PDF FOSS for Go は MIT ライセンスの下でリリースされています。使用制限はなく、ランタイム料金も登録要件もありません。ソースコードは github.com/aspose-pdf-foss/aspose-pdf-foss-for-go で入手可能です。


スタートガイド

関連リソース