PDFium Delphi Component Docs

FPdfLayout 單元

建置可量測的流式版面計畫,含頁面元件、欄位、跨頁表格、連結、可重用節點、標記輸入與 Tagged 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 預測與最終命令輸出不會重複量測相同文字

分頁指令計畫

在專屬、可搜尋且可調整大小的 TStream 上建立 TPdfLayoutPagedPlan,然後呼叫 BuildPagedPlan 或將它傳給 TPdf.GeneratePagedLayout

規劃器會立即序列化命令、釋放每個完成的換行文字結果,並讓 Plan.Commands 保持空白,同時在摘要中保留頁面設定、語意元素、計數與穩定的頁面總計

本文命令與後續的頁首或頁尾命令會以連結頁面區段的方式建立索引,因此 MaterializePage 可還原完整頁面,而無需掃描其他頁面的命令

MaxCachedPages 只限制計畫保留的頁面陣列;保留傳回陣列的呼叫端會延長其生命週期,且 PDFium 會保留原生建立的頁面,直到目的地文件儲存或關閉為止

儲存格式是私有的工作階段狀態而非可攜式檔案格式,串流不得被外部共用或修改,且頁面 XObject 或快取節點參照的來源物件存續時間必須長於分頁計畫

當命令需要在記憶體中保留到所選門檻、之後溢出到關閉即刪除的暫存儲存體時,請使用 TPdfRandomAccessStore

跨頁表格

以固定、比例或內容尺寸的格線軌道建立 TPdfLayoutTable,加入資料列與儲存格,然後呼叫 AddTable;文件會儲存自有快照,因此呼叫端後續的修改不會使現有的計畫快取失效

表格開頭的表頭列必須連續,且當 RepeatHeaderRows 為 true 時,在頁面或欄轉換後會重複;表頭列的跨度不得延伸到本文列

AllowSplit 為 true 時可分割本文列;預設會將具有傳遞關係的跨列合併群組視為一個不可分割單位移動,一般分割列中的儲存格則共用相同文字行帶、內距及邊框幾何

將 AllowRowSpanContinuation 設為 True,可讓跨列群組在不同頁面或欄區域續接;規劃器會把額外跨列高度分配到各列,並選擇不穿過文字行或影像的切割位置

AllowSplit=False 仍是不可分割列限制;列限制不相容,或不可分割區塊無法放進新的區域時,會拋出 EPdfLayoutError,不會裁切或重複內容

標題會與最初的表頭區塊及第一個本文群組所需的最小起始部分保持在一起;重複表頭重用相同的原始表頭元素

無論頁數多少,規劃器都會輸出一個 Table 元素、選用的 Caption、TR 子元素以及 TH 或 TD 儲存格;重複表頭命令會重用原始語意索引,除非提供明確的有效 ID,TD 儲存格會自動接收重疊的表頭 ID

表格邊框是以原生 PDFium 路徑物件算繪的 artifact plcRectangle 命令,而標題與儲存格文字仍是 Tagged 內容

混合文字與影像儲存格

AddTextRun 在儲存格原始 Text 之後附加行內文字;每個 Run 可指定字型、字級、色彩、Alpha、行高及長詞換行策略

混合文字依測量寬度換行,切開長詞時保留 UTF-16 代理字元對,並產生共用基線的獨立原生文字物件;水平對齊取自儲存格基本 Style

Run 層級的段落間距與保持在一起旗標不會新增段落區塊;需要這些限制時,請使用不同列或一般版面項目

SetImage 為每個儲存格設定一張以檔案提供的影像,放在文字上方、左側內距處;再次呼叫會取代影像

請明確提供正高度,以及可放入儲存格內寬的寬度;寬度為零時使用整個內寬,呼叫端以提供的尺寸控制影像長寬比

續接時影像不可分割,只會在原始位置輸出一次;產生文件之前檔案必須保持可用,缺少檔案或不支援的影像會使產生流程復原附加的頁面

必須提供非空替代描述;影像成為原始 TH 或 TD 的 Figure 子節點,所有文字片段仍與該儲存格關聯

跨頁時,原始 TH 或 TD 接收續接的標記內容參照,保留 RowSpan、ColumnSpan 及表頭關聯,不會建立重複的邏輯儲存格

小計與續頁標籤

AddSubtotalRow 使用呼叫端的標籤、格式化值與樣式建立不可分割的本文列;有多欄時,標籤跨越最後數值欄以外的所有欄

輔助功能設定 KeepWithPrevious=True,避免小計成為續頁上孤立的第一列;值由呼叫端提供,不進行數值彙總

ContinuationAfter 顯示在仍需續接的區域末尾,ContinuationBefore 則顯示在下一個區域的重複表頭之後

兩個標籤預設均為空,使用 ContinuationStyle,必須放得進單一行並保留自身高度;第一個區域沒有前置標籤,最後區域沒有後置標籤

標籤與邊框是 Artifact,不改變語意表格階層;{page}、{pages} 等頁面預留位置使用一般版面文字解析器

進階表格宣告與上限

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

表格維持 256 欄、100,000 列及 100,000 個語意元素的上限;儲存格文字總計最多 8,000,000 個 UTF-16 碼元

混合文字儲存格最多接受 1,024 個附加 Run、1,000,000 個 UTF-16 碼元、100,000 行及 100,000 個片段;單一字元或停用長詞換行的詞語若超過可用寬度,會遭拒絕

續接列群組最多 10,000 個儲存格;區域預算與有上限的切割搜尋避免無限分頁,影像也必須放得進扣除表頭、標籤及內距後的本文區域

自有的表格快照與計畫快取包含 Run 樣式、影像尺寸、替代文字、小計保留與續接設定;呼叫端之後修改表格,不影響該快照

頂層常式

常式說明
ResolveLayoutText使用保留的位數寬度展開頁碼預留位置
PdfLayoutSemanticRoleName傳回語意角色的 Tagged PDF 結構名稱
BuildTaggedLayoutPdf將完成的版面計畫與 Tagged 結構套用到來源 PDF 位元組
ResolvePdfLayoutGridTracks在可用寬度內解析固定、比例與內容尺寸的格線軌道

另請參閱