ドキュメント管理

ドキュメント管理

ドキュメント管理

Document は、ここで取り上げるすべてのドキュメント管理操作のエントリーポイントです:ファイルのオープンと保存、HTML へのエクスポート、オプションコンテンツレイヤーの追加、Tagged PDF の作成、そして AcroForm データの読み書き。Page と Form は、Document.Page(n) と Document.Form() を通じてアクセスできます。


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

pdf.Open はファイルパスから PDF をロードします;pdf.OpenWithPassword はパスワード保護されたファイルに対して同様に動作します。Document.Save は結果を新しいファイルパスに書き込みます。

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

_, err = pdf.OpenWithPassword("locked.pdf", "userpassword")
if err != nil {
	panic(err)
}

err = doc.Save("output.pdf")

HTML へのエクスポート

Document.SaveHTML と Document.WriteHTML はドキュメントを HTML に変換します。HTMLSaveOptions.Mode は表現を選択します:HTMLModeText(文字グリフのないラスタ背景上に可視のスタイルテキスト)、HTMLModeNative(ページグラフィックを1つのインラインSVGレイヤーとして)、または HTMLModeFlow(見出しと段落が読書順に配置されたリフロー可能な HTML)。Mode を未設定のままにすると、忠実なデフォルトが生成されます:透明な選択可能テキストレイヤーを持つフルページラスタです。

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

// Faithful mode (default)
doc.SaveHTML("out.html")

// Visible-text mode
doc.SaveHTML("out.html", pdf.HTMLSaveOptions{Mode: pdf.HTMLModeText})

// Multi-file output: external resources plus one HTML file per page
doc.SaveHTML("site/doc.html", pdf.HTMLSaveOptions{
    Mode: pdf.HTMLModeNative, ResourceDir: "assets", SplitPages: true,
})

// Page subset, custom raster DPI and title
doc.SaveHTML("part.html", pdf.HTMLSaveOptions{Pages: []int{1, 3}, DPI: 96, Title: "Report"})

オプションコンテンツレイヤーの管理

Document.AddLayer(name) は新しいオプショナルコンテンツグループを作成し、*Layer を返します; Document.Layers() は既に存在するすべてのレイヤーを一覧表示します。Page.BeginLayer / Page.EndLayer はページコンテンツをレイヤーに属するものとしてマークし、Layer.SetVisible(false) はそのコンテンツを非表示にします。

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
layer := doc.AddLayer("Watermark")

page, _ := doc.Page(1)
page.BeginLayer(layer)
page.AddText("DRAFT", pdf.TextStyle{Font: pdf.FontHelveticaBold, Size: 48},
    pdf.Rectangle{LLX: 150, LLY: 400, URX: 450, URY: 460})
page.EndLayer()

layer.SetVisible(false)
doc.Save("layered.pdf")

タグ付け(アクセシブル)PDF の作成

Document.TaggedContent() は、ドキュメントの論理構造ツリーを所有する *TaggedContent ファサードを返し、PDF/UA が必要とするカタログメタデータを設定します。Page.TagContent はマークドコンテンツ内で描画呼び出しを括弧で囲み、そのノードに対する *StructElement を返します。

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
tc := doc.TaggedContent()
tc.SetTitle("Quarterly Report")
tc.SetLanguage("en-US")
page, _ := doc.Page(1)

page.TagContent(tc.Root(), pdf.StructH1, func() error {
    return page.AddText("Quarterly Report", pdf.TextStyle{Font: pdf.FontHelveticaBold, Size: 24},
        pdf.Rectangle{LLX: 50, LLY: 760, URX: 545, URY: 800})
})
fig, _ := page.TagContent(tc.Root(), pdf.StructFigure, func() error {
    return page.AddImage("chart.png", pdf.Rectangle{LLX: 50, LLY: 540, URX: 300, URY: 680})
})
fig.SetAlt("Bar chart of Q3 sales by region") // required for figures

doc.Save("accessible.pdf")

要素のグルーピングもツリールートの下にネストされます:

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
tc := doc.TaggedContent()
page, _ := doc.Page(1)

tbl := tc.Root().AddChild(pdf.StructTable)
row := tbl.AddChild(pdf.StructTR)
cell := row.AddChild(pdf.StructTD)
page.TagContent(cell, pdf.StructP, func() error { return nil })

フォームデータを JSON としてエクスポートおよびインポート

Form.ExportJSON はすべてのフィールドタイプと値を JSON({"name": {"type": "text", "value": "Jane"}, ...})にシリアライズします; Form.ImportJSON はフォームに JSON ペイロードを適用し、更新したフィールド数を返します。JSONExportOptions.Indent は出力を整形して表示します。

doc, _ := pdf.Open("filled.pdf")
data, _ := doc.Form().ExportJSON(pdf.JSONExportOptions{Indent: true})

// Fill a template from a JSON payload; discard the applied-field count.
template, _ := pdf.Open("template.pdf")
_, _ = template.Form().ImportJSON(data)

ヒントとベストプラクティス

  • ベクターベースのページには HTMLModeNative を、リフロー/モバイル閲覧には HTMLModeFlow を、視覚的忠実度が最も重要な場合は(Mode が設定されていない)忠実なデフォルトを選択してください。
  • Layer.SetVisible(false) を Save の前に呼び出して、デフォルトで透かしや注釈レイヤーを非表示にし、Layer オブジェクトを介してコンテンツをアドレス指定可能に保ちます。
  • Page.TagContent を呼び出す前に TaggedContent.SetTitle と SetLanguage を設定してください。PDF/UA の検証は、これらのメソッドが書き込むカタログレベルのメタデータをチェックするためです。
  • すべての StructFigure ノードで StructElement.SetAlt を呼び出してください — 代替テキストがない図は PDF/UA の検証に失敗します。
  • エクスポートされたフォーム状態の人間が読みやすい差分比較には JSONExportOptions.Indent を使用し、コンパクトな機械間ペイロードの場合は省略してください。

よくある問題

問題原因修正
HTML の出力に選択可能なテキスト字形がありませんHTMLSaveOptions.Mode はテキストレイヤー要件がなく、忠実なデフォルトのまま残ります可視でスタイルが適用されたテキストレイヤーに Mode: pdf.HTMLModeText を設定します。
HTML エクスポート時に元のフォント外観が失われますNoFontEmbedding が true に設定されていますNoFontEmbedding を false(デフォルト)のままにしておくと、埋め込みフォントが WOFF @font-face データ URL として再ラップされます
Page.TagContent はエラーを返しますDocument.TaggedContent() が構造ツリーを初期化する前に呼び出されました最初の TagContent 呼び出しの前に、Document.TaggedContent() を呼び出し(タイトル/言語を設定)してください
ValidatePDFUA は非準拠の図を報告していますStructFigure 要素に代替テキストがありませんすべての figure ノードで StructElement.SetAlt を呼び出してください
Form.ImportJSON が期待よりも少ないフィールドしか更新しませんJSON のペイロードフィールド名が対象フォームのフィールド名と一致しません。インポートは緩やかに処理し、一致しないエントリはスキップされますエクスポートされたフィールド名が対象フォームのフィールド名と正確に一致していることを確認してください

FAQ

どの HTML エクスポートモードを使用すべきですか?

HTMLModeText は最小で完全に選択可能な出力に使用します;HTMLModeNative はファイルサイズよりベクトルの忠実度(曲線、ネイティブストローク)が重要な場合に使用します;HTMLModeFlow は再フロー可能でモバイルフレンドリーな読書レイアウトに使用します。デフォルトの忠実なラスタ+透過テキストを得るには、Mode を設定しないでください。

特定のページだけをHTMLにエクスポートできますか?

はい。HTMLSaveOptions.Pagesを1ベースのページ番号のスライスに設定します。例: pdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []int{1, 3}}}}。

レイヤーをデフォルトで非表示にし、ビューアが再度表示できるようにするにはどうすればよいですか?

保存する前にLayer.SetVisible(false)を呼び出します。レイヤーはアドレス指定可能な Optional Content Group のままで、Layer.IsVisible()が現在の状態を報告します。

JSON フォームのエクスポートにはフィールドタイプが含まれますか?

はい。エクスポートされる各フィールドは type と value キーを持つ JSON オブジェクトで、例: {"subscribe": {"type": "checkbox", "value": true}}。

各要素ごとにTagContentを呼び出す必要がありますか、それともグループを直接ネストできますか?

両方とも可能です。Page.TagContentは描画呼び出しをラップし、リーフ構造要素を追加します。要素のグルーピング(テーブル、リスト)の場合、まずツリーのルートまたは親要素に対してStructElement.AddChildを呼び出してネストを構築し、その下にリーフコンテンツにタグ付けします。


API Reference 概要

クラス/メソッド説明
Document.SaveHTML / WriteHTMLドキュメントを HTML にエクスポートし、HTMLSaveOptions が制御します
HTMLSaveOptionsHTML エクスポート設定: モード、DPI、ページサブセット、リソース処理
Document.AddLayer / Layersドキュメント上のオプショナル コンテンツ グループを作成または一覧表示する
Page.BeginLayer / EndLayerページコンテンツをレイヤーに属するものとしてマークする
Layerオプションコンテンツグループ — 名前と可視性
Document.TaggedContent文書の論理構造ツリー(Tagged PDF)のFacade
TaggedContent文書のタイトル/言語を設定し、構造ツリーのルートを公開する
Page.TagContent / TagArtifactマークされたコンテンツと構造要素におけるブラケット描画呼び出し
StructElement論理構造ツリーのノード — 子要素、代替テキスト、言語
Form.ExportJSON / ImportJSONAcroForm フィールドデータを JSON としてシリアライズまたは適用する
JSONExportOptionsJSON エクスポート設定: インデント, omit-empty

参照

 日本語