PDFium Delphi Component Docs

FPdfLayout ユニット

ページ装飾、段組、ページ横断テーブル、リンク、再利用可能なノード、マークアップ入力、タグ付き PDF セマンティクスを備えた、測定可能なフローレイアウト計画を構築します

例外と列挙型

型値または目的
EPdfLayoutError無効なレイアウト入力、上限超過、一貫しないセマンティック構造に対して発生する例外です
TPdfLayoutAlignmentplaLeft、plaCenter、plaRight
TPdfLayoutCommandKindplcText、plcRule、plcImage、plcPageXObject、plcCachedNode、plcLink、plcRectangle
TPdfLayoutItemKindpliText、pliSpacer、pliRule、pliImage、pliPageXObject、pliPageBreak、pliCachedNode、pliLink、pliSemanticNode、pliTable
TPdfLayoutSemanticRoleplsrArtifact、plsrParagraph、plsrHeading1、plsrHeading2、plsrHeading3、plsrHeading4、plsrHeading5、plsrHeading6、plsrList、plsrListItem、plsrListLabel、plsrListBody、plsrTable、plsrTableRow、plsrTableHeader、plsrTableData、plsrFigure、plsrCaption、plsrLink、plsrSection、plsrDivision
TPdfLayoutTableScopepltsNone、pltsRow、pltsColumn、pltsBoth
TPdfLayoutListNumberingplnNone、plnDisc、plnCircle、plnSquare、plnDecimal、plnUpperRoman、plnLowerRoman、plnUpperAlpha、plnLowerAlpha
TPdfLayoutGridTrackKindplgtkFixed、plgtkFraction、plgtkAuto
TPdfMarkupFormatpmfMarkdown、pmfHtml

レイアウトレコード

型公開メンバー
TPdfLayoutSemanticsRole, ParentID, ElementID, AlternateText, ActualText, Language, HeaderIDs, TableScope, ColumnSpan, RowSpan, ListNumbering, Artifact, Paragraph, Figure
TPdfLayoutTextStyleFontName, FontSize, Color, Alpha, LineHeight, Alignment, KeepTogether, BreakLongWords, SpaceBefore, SpaceAfter, Default
TPdfLayoutConstraintsKeepTogether, KeepWithNext, PageBreakBefore, PageBreakAfter, OrphanLines, WidowLines, Default
TPdfLayoutPageSettingsWidth, Height, MarginLeft, MarginTop, MarginRight, MarginBottom, HeaderHeight, FooterHeight, A4, Letter
TPdfLayoutRectLeft, Top, Width, Height
TPdfLayoutGridTrackKind, Value, Minimum, Maximum, MeasuredContent
TPdfLayoutGridTracksTPdfLayoutGridTrack の動的配列です
TPdfLayoutGridSizes解決済みトラックサイズの動的配列です
TPdfLayoutTableOptionsCellPadding, BorderWidth, BorderColor, BorderAlpha, RepeatHeaderRows, AllowRowSpanContinuation, MaxContinuationRegions, ContinuationBefore, ContinuationAfter, ContinuationStyle, Default
TPdfLayoutTableTextRunText, Style
TPdfLayoutTableTextRunsTPdfLayoutTableTextRun の動的配列
TPdfMarkupOptionsBaseStyle, HeadingScale, MaxInputCharacters, MaxNodes, Default
TPdfLayoutSemanticElementSemantics, ParentElementIndex
TPdfLayoutSemanticElementsTPdfLayoutSemanticElement の動的配列です
TPdfLayoutCommandKind, PageNumber, Bounds, Text, FontName, FontSize, Color, Alpha, Alignment, Thickness, FileName, Uri, Source, SourcePageIndex, SemanticElementIndex, MarkedContentID, AnnotationIndex
TPdfLayoutCommandsTPdfLayoutCommand の動的配列です
TPdfLayoutPlanPageSettings, PageCount, Commands, SemanticElements, TextLineCount, RuleCount, RectangleCount, ImageCount, PageXObjectCount, CachedNodeCount, LinkCount, TaggedContentCount, ArtifactCount, MeasuredTextCount, TotalPageReferenceCount, ReservedPageDigits, CacheHitCount, CacheMissCount, ReusedXObjectCount, ColumnCount, ColumnGap

レイアウトクラス

型公開メンバー
TPdfLayoutMeasurerMeasureTextWidth, CacheIdentity
TPdfLayoutItemKind
TPdfLayoutTableCellText, Uri, Style, AddTextRun, TextRuns, SetImage, ColumnSpan, RowSpan, Header, ElementID, HeaderIDs, Scope
TPdfLayoutTableRowAddCell, Cells, Header, AllowSplit, MinimumHeight, KeepWithPrevious
TPdfLayoutTableCreate, Destroy, AddRow, AddSubtotalRow, SetCaption, Columns, Rows, Options, Caption, CaptionStyle, ElementID, ParentID
TPdfLayoutPagedPlanCreate, Destroy, ClearPageCache, MaterializePage, Reset, Summary, CommandCount, StorageByteCount, SourceCount, Completed、MaxCommandCount、MaxStorageBytes、MaxPageCommands、MaxSourceCount、MaxCachedPages の各予算、および CachedPageCount、CacheHitCount、CacheMissCount、PeakCachedPageCount のキャッシュ統計
TPdfLayoutDocumentCreate, Destroy, Clear, AddText, AddSpacer, AddRule, AddImage, AddPageXObject, AddCachedNode, AddLink, AddSemanticNode, SetLastItemSemantics, SetLastItemConstraints, AddTable, AddPageBreak, LoadMarkup, InvalidateCache, BuildPlan, BuildPagedPlan, PageSettings, HeaderText, FooterText, HeaderStyle, FooterStyle, ReservedPageDigits, ColumnCount, ColumnGap, Items
TPdfLayoutCachedNodeCreate, Destroy, Invalidate, BeginEmission, EndEmission, Content, Width, Height, Built

改ページ制約

可視のフロー項目を追加した後で SetLastItemConstraints を呼び出すと、項目をまとめて保持する、次の項目の先頭と結び付ける、前後に物理的な改ページを強制する、といった制御ができます

OrphanLines は領域の末尾に保持される段落行の最小数、WidowLines は次の領域の先頭に配置される最小数です。どちらも既存の改ページを維持するために既定値は 1 です

制約は段落、リンク、リスト、図、テーブル役割の項目に等しく適用されます。セマンティクス専用のコンテナはジオメトリを持たないため、改ページ制約を受け付けません

pliTable 項目が受け付けるのは PageBreakBefore と PageBreakAfter のみです。行の分割とテーブル先頭の保持はテーブルモデルが制御します

プランナーは構築中に折り返し済みの行をキャッシュするため、keep-with-next の予測と最終コマンド出力が同じテキストを 2 回測定することはありません

ページ分割されたコマンド計画

専用のシーク可能でリサイズ可能な TStream 上に TPdfLayoutPagedPlan を作成し、その後 BuildPagedPlan を呼び出すか、TPdf.GeneratePagedLayout に渡します

プランナーはコマンドをただちにシリアライズし、完成した折り返しテキストの結果を解放し、ページ設定、セマンティック要素、カウント、安定したページ合計をサマリーに保持したまま Plan.Commands を空にします

本体コマンドと後続のヘッダー/フッターコマンドはリンクされたページセグメントとしてインデックスされるため、MaterializePage は他のページのコマンドを走査せずに完全なページを復元します

MaxCachedPages が制限するのは計画が保持するページ配列のみです。返された配列を保持する呼び出し側はその寿命を延ばします。また PDFium は、宛先ドキュメントが保存またはクローズされるまでネイティブの作成済みページを保持します

ストレージ形式は可搬ファイル形式ではなくプライベートなセッション状態です。ストリームを外部と共有したり外部から変更してはならず、ページ XObject やキャッシュノードが参照するソースオブジェクトはページ分割計画より長く生存しなければなりません

コマンドを選択したしきい値までメモリに保持し、その後クローズ時に削除される一時ストレージへあふれさせるには TPdfRandomAccessStore を使用します

ページ横断テーブル

固定、分数、コンテンツサイズのいずれかのグリッドトラックで TPdfLayoutTable を作成し、行とセルを追加してから AddTable を呼び出します。ドキュメントは所有するスナップショットを保存するため、その後の呼び出し側の変更が既存の計画キャッシュを壊すことはありません

ヘッダー行はテーブルの先頭で連続していなければならず、RepeatHeaderRows が true のときはページ遷移または段遷移の後に繰り返されます。ヘッダー行のスパンが本体行へ広がることはありません

body 行は AllowSplit が true なら分割できます。既定では、推移的につながる行 span グループは一体として移動し、通常の分割行のセルは同じ行帯、padding、border 形状を共有します

AllowRowSpanContinuation を True にすると、行 span グループをページや列の領域をまたいで継続できます。planner は span に必要な追加高さを各行に配分し、テキスト行や画像を横切らない切断位置を選びます

AllowSplit=False は行を不可分にする制約として維持されます。行制約が両立しない場合や、新しい領域にも不可分のブロックが収まらない場合は、clip や内容の繰り返しを行わず EPdfLayoutError を送出します

caption は最初の header block と最初の body group の必要最小限の先頭部分と一緒に配置します。繰り返し header は元の同じ header 要素を再利用します

プランナーはページ数に関係なく 1 つの Table 要素、任意の Caption、TR の子、TH または TD セルを出力します。繰り返されるヘッダーコマンドは元のセマンティックインデックスを再利用し、有効な ID が明示的に供給されない限り TD セルは重複するヘッダー ID を自動的に受け取ります

テーブル罫線はネイティブ PDFium パスオブジェクトで描画されるアーティファクトの plcRectangle コマンドであり、キャプションとセルテキストはタグ付きコンテンツのままです

テキストと画像を混在させるセル

AddTextRun はセルの元の Text の後に inline text を追加します。run ごとにフォント、文字サイズ、色、alpha、行高、長い単語の分割ポリシーを持ちます

混在テキストは測定した幅で折り返し、長い単語の分割でも UTF-16 サロゲートペアを保持します。共通 baseline を持つ別々のネイティブテキストオブジェクトを生成し、水平配置はセルの基本 Style に従います

run の段落間隔や keep-together flag は追加の段落 block を作りません。その制約が必要なら別行や通常の layout 項目を使ってください

SetImage はセルごとにファイルから読む画像を 1 つ設定し、テキストの上、左 padding の位置に置きます。再度呼ぶと画像を置き換えます

明示的な正の高さと、セル内幅に収まる幅を指定してください。幅 0 は内幅全体を使い、指定寸法で呼び出し側が縦横比を制御します

画像は継続時も分割せず、元の位置に一度だけ生成します。ファイルは生成まで利用可能である必要があり、欠落や未対応画像では追加ページを rollback します

空でない代替説明が必要です。画像は元の TH または TD の Figure 子となり、すべてのテキスト断片もそのセルに関連付けます

ページをまたぐ場合、元の TH または TD に継続部分の marked-content reference を追加し、RowSpan、ColumnSpan、header 関連を維持します。論理セルを重複作成しません

小計と継続ラベル

AddSubtotalRow は呼び出し側のラベル、整形済みの値、スタイルで不可分の body 行を作ります。複数列では、ラベルが最後の値列以外を span します

小計が継続先の孤立した先頭行にならないよう、ヘルパーは KeepWithPrevious=True を設定します。値は呼び出し側が指定し、数値の集計は行いません

ContinuationAfter は継続する領域の末尾、ContinuationBefore は次の領域の繰り返し header の後に表示します

両ラベルは既定で空で、ContinuationStyle を使います。1 行に収まる必要があり、独自の高さを確保します。最初の領域に before、最後の領域に after は表示しません

ラベルと border は artifact として扱い、意味上の table 階層を変更しません。{page}、{pages} などのページ placeholder は通常の layout text resolver を使います

高度なテーブルの宣言と上限

procedure TPdfLayoutTableCell.AddTextRun(const Text: WideString;
  const Style: TPdfLayoutTextStyle);

procedure TPdfLayoutTableCell.SetImage(const FileName: string;
  Width, Height: Single; const AlternateText: WideString);

function TPdfLayoutTable.AddSubtotalRow(const LabelText, ValueText: WideString;
  const Style: TPdfLayoutTextStyle): TPdfLayoutTableRow;

オプションを上書きする前に TPdfLayoutTableOptions.Default を使ってください。AllowRowSpanContinuation は既定で False、MaxContinuationRegions はページ/列領域 10,000 件で、最大 100,000 に設定できます

table の上限は 256 列、100,000 行、意味要素 100,000 個を維持します。セルのテキスト合計は UTF-16 コード単位 8,000,000 までです

混在テキストセルは追加 run 1,024 個、UTF-16 コード単位 1,000,000、100,000 行、100,000 断片までです。幅に収まらない単独文字や、長い単語の分割を無効にした単語は拒否します

継続行グループは 10,000 セルまでです。領域上限と制限付きの切断探索で無制限の pagination を防ぎます。画像は header、label、padding を引いた body 領域に収まる必要があります

所有する table snapshot と plan cache には run style、画像寸法、代替テキスト、小計保持、継続設定を含めます。その後の呼び出し側の table 変更は snapshot に影響しません

トップレベルルーチン

ルーチン説明
ResolveLayoutText予約された桁幅を使ってページ番号プレースホルダを展開します
PdfLayoutSemanticRoleNameセマンティックロールに対応するタグ付き PDF 構造名を返します
BuildTaggedLayoutPdf完成したレイアウト計画とタグ付き構造をソース PDF バイトへ適用します
ResolvePdfLayoutGridTracks利用可能な幅の中で固定、分数、コンテンツサイズのグリッドトラックを解決します

関連項目