Aspose.PDF FOSS for Goの一般的な使用例
Aspose.PDF FOSS for Go は PDF 文書管理のための純粋な Go モジュールです。本記事では、Document、Form、EncryptionOptions、Table、および OutlineItemCollection タイプを使用した、最も頻繁に必要とされる操作を取り上げます。
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goステップバイステップ ガイド
ステップ 1: パッケージをインストールする
Go モジュールの依存関係を追加する:
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goステップ 2: パッケージをインポートする
インポート参照を簡潔に保つためにエイリアスを使用します:
import (
"fmt"
pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)ステップ 3: PDF をページ単位のファイルに分割する
Document.Split はマルチページ文書をページごとに 1 つの *Document に分割します。
doc, err := pdf.Open("report.pdf")
if err != nil {
panic(err)
}
pages, _ := doc.Split()
for i, p := range pages {
p.Save(fmt.Sprintf("report_page_%03d.pdf", i+1))
}
fmt.Printf("Split %d pages\n", len(pages))ステップ 4: 複数の PDF を 1 つに結合する
Document.Append は保存前に、2 番目のドキュメントからページをその場でマージします。
base, _ := pdf.Open("intro.pdf")
chapter1, _ := pdf.Open("chapter1.pdf")
chapter2, _ := pdf.Open("chapter2.pdf")
appendix, _ := pdf.Open("appendix.pdf")
base.Append(chapter1)
base.Append(chapter2)
base.Append(appendix)
base.Save("full_document.pdf")ステップ 5: パスワード暗号化を適用する
EncryptionOptions は単一の呼び出しで、ユーザーパスワード、オーナーパスワード、アルゴリズム、および操作ごとの Permissions を設定します:
doc, _ := pdf.Open("contract.pdf")
doc.SetEncryption(pdf.EncryptionOptions{
UserPassword: "clientpass",
OwnerPassword: "adminpass",
Permissions: &pdf.Permissions{AllowPrint: true, AllowCopy: false},
})
doc.Save("contract_protected.pdf")暗号化されたファイルからプレーンテキストのコピーを作成するには:
doc, _ := pdf.OpenWithPassword("contract_protected.pdf", "clientpass")
doc.RemoveEncryption()
doc.Save("contract_decrypted.pdf")ステップ 6: AcroForm を入力する
名前でフィールドを反復または対象にする。具体的な型をアサートする (TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField)。
doc, _ := pdf.Open("application_form.pdf")
name := doc.Form().Field("applicant_name").(*pdf.TextBoxField)
name.SetValue("Jane Doe")
agree := doc.Form().Field("terms_accepted").(*pdf.CheckboxField)
agree.SetChecked(true)
country := doc.Form().Field("country").(*pdf.ComboBoxField)
country.SetSelected(0)
doc.Save("application_filled.pdf")ステップ 7: テーブルレイアウトを構築する
請求書またはレポート生成用のページに、Row と Cell エントリを持つ Table を追加する:
doc, _ := pdf.Open("invoice_template.pdf")
page, _ := doc.Page(1)
tbl := pdf.NewTable()
tbl.SetColumnWidths([]float64{200, 80, 100})
header := tbl.AddRow()
header.AddCell("Description")
header.AddCell("Qty")
header.AddCell("Amount")
row := tbl.AddRow()
row.AddCell("PDF Processing Service")
row.AddCell("1")
row.AddCell("$500.00")
page.AddTable(tbl, pdf.Rectangle{LLX: 72, LLY: 100, URX: 540, URY: 700})
doc.Save("invoice.pdf")ステップ 8: ブックマークツリーを追加する
OutlineItemCollection は章/セクションのネストと DestinationXYZ ページターゲットを持つブックマークを作成する:
doc, _ := pdf.Open("manual.pdf")
page1, _ := doc.Page(1)
page2, _ := doc.Page(2)
ch1 := pdf.NewOutlineItemCollection(doc)
ch1.SetTitle("Introduction")
ch1.SetBold(true)
ch1.SetDestination(pdf.NewDestinationXYZ(page1, 0, 792, 1.0))
doc.Outlines().Add(ch1)
ch2 := pdf.NewOutlineItemCollection(doc)
ch2.SetTitle("Configuration")
ch2.SetDestination(pdf.NewDestinationFit(page2))
doc.Outlines().Add(ch2)
doc.Save("manual_bookmarked.pdf")一般的な問題と対策
pdf.Open 有効なPDFファイルに対してエラーを返します ファイルパスが正しいこと、そしてファイルが他のプロセスで開かれていないことを確認してください。Windows では、ファイルロックが読み取りを妨げることがあります。
フォームフィールドにアクセスするときに型アサーションでパニックが発生します 使用してください pdf.FieldType(f) アサートする前にフィールド型を調べるための型スイッチまたは *pdf.TextBoxField に対するアサーション CheckboxField はパニックします。
go get “module not found” エラーで失敗します Ensure GOPROXY は到達可能なプロキシ(例: GOPROXY=direct)そして、ネットワークが到達できることを確認してください github.com。エアギャップ環境では、使用してください GONOSUMCHECK またはローカルモジュールミラー。
SaveTo は… の後に失敗します OpenWithPassword 呼び出す場合は Save after OpenWithPassword 呼び出さずに RemoveEncryption、出力は元のパスワードで再暗号化されます。これは期待される動作です — 呼び出してください RemoveEncryption 明示的にプレーンテキストのコピーを生成する。
結合された文書のページ数が正しくありません Append 受信側をその場で変更します。呼び出していないことを確認してください Append 既に保存された文書に対してです;複数の結合出力を作成する必要がある場合は、ベース文書を再度開いてください。
よくある質問
ディスクに書き込まずに PDF を処理できますか?
Document.WriteTo は io.Writer を受け取りますので、バッファやネットワークストリーム、あるいはレスポンスライターに一時ファイルを作成せずに書き込むことができます。
Go で Aspose.PDF の FOSS を同時に使用しても安全ですか?
各 *Document インスタンスは goroutine セーフではありません。goroutine ごとに Document を1つ使用するか、共有インスタンスはミューテックスで保護してください。
入力済みのフォームからフィールド値を読み戻すにはどうすればよいですか?
任意のフィールドに Field.Value() を使用するか、型アサーションを行って CheckboxField.Checked() や ComboBoxField.SelectedIndex() などの型固有アクセサにアクセスしてください。
既存のテンプレートなしで、ゼロから PDF を作成できますか?
はい。pdf.NewDocument() は空のドキュメントを作成します。AddBlankPageFromFormat(pdf.PageFormatA4) を呼び出して空白ページを追加し、保存する前にコンテンツ(テーブル、注釈など)を追加してください。
Document.Save と Document.WriteTo の違いは何ですか?
Save(path string) はファイルパスに書き込みます。WriteTo(w io.Writer) は任意の io.Writer に書き込みます — HTTP のレスポンス、バッファ、またはストリームパイプラインに便利です。