PDFium Delphi Component Docs

Unit FPdfLayout

Baut messbare Flusslayout-Pläne mit Seitenrahmen, Spalten, Tabellen über Seiten hinweg, Links, wiederverwendbaren Knoten, Markup-Eingabe und Tagged-PDF-Semantik

Exceptions und Aufzählungen

TypWerte oder Zweck
EPdfLayoutErrorAusnahme bei ungültiger Layout-Eingabe, überschrittenen Grenzen und inkonsistenter semantischer Struktur
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

Layout-Records

TypÖffentliche Member
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
TPdfLayoutGridTracksDynamisches Array aus TPdfLayoutGridTrack
TPdfLayoutGridSizesDynamisches Array aufgelöster Spurbreiten
TPdfLayoutTableOptionsCellPadding, BorderWidth, BorderColor, BorderAlpha, RepeatHeaderRows, AllowRowSpanContinuation, MaxContinuationRegions, ContinuationBefore, ContinuationAfter, ContinuationStyle, Default
TPdfLayoutTableTextRunText, Style
TPdfLayoutTableTextRunsDynamisches Array von TPdfLayoutTableTextRun
TPdfMarkupOptionsBaseStyle, HeadingScale, MaxInputCharacters, MaxNodes, Default
TPdfLayoutSemanticElementSemantics, ParentElementIndex
TPdfLayoutSemanticElementsDynamisches Array aus TPdfLayoutSemanticElement
TPdfLayoutCommandKind, PageNumber, Bounds, Text, FontName, FontSize, Color, Alpha, Alignment, Thickness, FileName, Uri, Source, SourcePageIndex, SemanticElementIndex, MarkedContentID, AnnotationIndex
TPdfLayoutCommandsDynamisches Array aus TPdfLayoutCommand
TPdfLayoutPlanPageSettings, PageCount, Commands, SemanticElements, TextLineCount, RuleCount, RectangleCount, ImageCount, PageXObjectCount, CachedNodeCount, LinkCount, TaggedContentCount, ArtifactCount, MeasuredTextCount, TotalPageReferenceCount, ReservedPageDigits, CacheHitCount, CacheMissCount, ReusedXObjectCount, ColumnCount, ColumnGap

Layout-Klassen

TypÖffentliche Member
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, die Budgets MaxCommandCount, MaxStorageBytes, MaxPageCommands, MaxSourceCount und MaxCachedPages sowie die Cache-Statistiken CachedPageCount, CacheHitCount, CacheMissCount und 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

Paginierungs-Constraints

Rufen Sie SetLastItemConstraints nach dem Hinzufügen eines sichtbaren Flusselements auf, um es zusammenzuhalten, mit dem Beginn des nächsten Elements zu koppeln oder einen physischen Seitenumbruch davor oder danach zu erzwingen

OrphanLines ist die Mindestanzahl von Absatzzeilen, die am unteren Rand eines Bereichs verbleiben, und WidowLines die Mindestanzahl, die am oberen Rand des Folgebereichs platziert wird; beide stehen standardmäßig auf eins, um die bestehende Paginierung zu bewahren

Constraints gelten gleichermaßen für Absatz-, Link-, Listen-, Bild- und Tabellen-Rollen-Elemente, während rein semantische Container keine Geometrie besitzen und daher Paginierungs-Constraints zurückweisen

Ein pliTable-Element akzeptiert nur PageBreakBefore und PageBreakAfter; Zeilentrennung und das Zusammenhalten des Tabellenbeginns werden vom Tabellenmodell gesteuert

Der Planer cached umbrochene Zeilen während eines Build-Vorgangs, sodass Keep-with-next-Vorhersage und die endgültige Befehlsausgabe denselben Text nicht zweimal messen

Seitenaufgeteilte Befehlspläne

Erzeugen Sie TPdfLayoutPagedPlan über einen dedizierten positionierbaren und vergrößerbaren TStream und rufen Sie anschließend BuildPagedPlan auf oder übergeben Sie ihn an TPdf.GeneratePagedLayout

Der Planer serialisiert Befehle sofort, gibt jedes abgeschlossene umbrochene Textergebnis frei und lässt Plan.Commands leer, während Seiteneinstellungen, semantische Elemente, Zählungen und stabile Seitensummen in der Zusammenfassung erhalten bleiben

Körperbefehle und spätere Kopf- oder Fußbefehle werden als verknüpfte Seitensegmente indiziert, sodass MaterializePage die vollständige Seite wiederherstellt, ohne Befehle anderer Seiten zu durchsuchen

MaxCachedPages begrenzt nur die vom Plan vorgehaltenen Seiten-Arrays; Aufrufer, die zurückgegebene Arrays behalten, verlängern deren Lebensdauer, und PDFium hält nativ erzeugte Seiten vor, bis das Zieldokument gespeichert oder geschlossen wird

Das Speicherformat ist ein privater Sitzungszustand und kein portables Dateiformat, der Stream darf nicht extern gemeinsam genutzt oder verändert werden, und Quellobjekte, auf die Seiten-XObjects oder gecachte Knoten verweisen, müssen den seitenaufgeteilten Plan überdauern

Verwenden Sie TPdfRandomAccessStore, wenn Befehle bis zu einem gewählten Schwellwert im Arbeitsspeicher bleiben und danach in temporären Speicher mit Löschen-beim-Schließen überlaufen sollen

Tabellen über Seiten hinweg

Erzeugen Sie TPdfLayoutTable mit festen, bruchteilbasierten oder inhaltsbasierten Rasterspuren, fügen Sie Zeilen und Zellen hinzu und rufen Sie anschließend AddTable auf; das Dokument speichert einen eigenen Schnappschuss, sodass spätere Aufrufer-Mutationen einen bestehenden Plan-Cache nicht ungültig machen können

Kopfzeilen müssen am Tabellenbeginn zusammenhängend sein und werden nach einem Seiten- oder Spaltenwechsel wiederholt, wenn RepeatHeaderRows true ist; Kopfzeilen-Spans dürfen sich nicht in Körperzeilen erstrecken

Eine Körperzeile kann bei AllowSplit true geteilt werden; standardmäßig verschieben sich transitiv verbundene RowSpan-Gruppen atomar; Zellen einer gewöhnlichen geteilten Zeile teilen Zeilenband, Innenabstände und Rahmengeometrie

Setzen Sie AllowRowSpanContinuation auf True, um eine RowSpan-Gruppe über Seiten- oder Spaltenregionen fortzusetzen; der Planer verteilt zusätzliche Spannhöhe und wählt Schnitte ohne Textzeilen oder Bilder zu kreuzen

AllowSplit=False bleibt eine atomare Zeilenbedingung; inkompatible Bedingungen oder ein Block, der nicht in eine leere Region passt, lösen EPdfLayoutError aus, statt Inhalte zu beschneiden oder zu wiederholen

Beschriftungen bleiben beim anfänglichen Headerblock und Mindestanfang der ersten Körpergruppe; wiederholte Header verwenden dieselben Originalelemente

Der Planer gibt genau ein Table-Element, eine optionale Caption, TR-Kinder und TH- oder TD-Zellen aus, unabhängig von der Seitenzahl; wiederholte Kopfbefehle verwenden die ursprünglichen semantischen Indizes wieder, und TD-Zellen erhalten automatisch überlappende Header-IDs, sofern keine expliziten gültigen IDs übergeben werden

Tabellenränder sind Artifact-plcRectangle-Befehle, die über native PDFium-Pfadobjekte gerendert werden, während Beschriftungs- und Zelltext getaggter Inhalt bleibt

Zellen mit gemischtem Text und Bildern

AddTextRun hängt Inline-Text an das originale Text der Zelle; jeder Run hat eigene Schrift, Größe, Farbe, Alpha, Zeilenhöhe und Regeln für lange Wörter

Gemischter Text bricht nach gemessenen Breiten um, erhält UTF-16-Surrogatpaare bei langen Wörtern und erzeugt separate native Textobjekte auf gemeinsamer Grundlinie; horizontale Ausrichtung stammt vom Basis-Style

Run-Absatzabstände und Zusammenhalteflags erzeugen keine zusätzlichen Absatzblöcke; verwenden Sie separate Zeilen oder normale Layoutobjekte für solche Bedingungen

SetImage konfiguriert ein dateibasiertes Bild je Zelle oberhalb des Textes am linken Innenabstand; erneuter Aufruf ersetzt es

Geben Sie explizit positive Höhe und passende Innenbreite an; Breite null nutzt die gesamte Innenbreite; das Seitenverhältnis bestimmen die übergebenen Abmessungen

Das Bild ist bei Fortsetzung unteilbar und wird einmal an seiner Originalposition ausgegeben; seine Datei muss bis zur Generierung verfügbar bleiben; fehlende oder nicht unterstützte Bilder führen zum Rollback angehängter Seiten

Eine nicht leere Alternativbeschreibung ist erforderlich; das Bild wird Figure-Kind des ursprünglichen TH oder TD, alle Textfragmente bleiben derselben Zelle zugeordnet

Das ursprüngliche TH oder TD erhält über Seiten hinweg die fortgesetzten Marked-Content-Referenzen und behält RowSpan, ColumnSpan und Headerbeziehungen; keine logische Zelle wird dupliziert

Zwischensummen und Fortsetzungslabels

AddSubtotalRow erstellt eine atomare Körperzeile aus Label, formatiertem Wert und Stil des Aufrufers; bei mehreren Spalten überspannt das Label alle außer der letzten Wertspalte

Der Helper setzt KeepWithPrevious=True, damit eine Zwischensumme nicht isoliert am Anfang der Fortsetzung steht; Werte kommen vom Aufrufer, es erfolgt keine numerische Aggregation

ContinuationAfter steht am Ende einer fortgesetzten Region, ContinuationBefore nach wiederholten Headern der nächsten Region

Beide Labels sind standardmäßig leer, nutzen ContinuationStyle, müssen einzeilig passen und reservieren eigene Höhe; die erste Region hat kein Vorher-, die letzte kein Nachherlabel

Labels und Rahmen sind Artefakte ohne Änderung der semantischen Tabellenhierarchie; Seitenplatzhalter wie {page} und {pages} verwenden den normalen Layouttextresolver

Erweiterte Tabellendeklarationen und Grenzen

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;

Initialisieren Sie mit TPdfLayoutTableOptions.Default; AllowRowSpanContinuation ist standardmäßig False, MaxContinuationRegions 10,000 Seiten-/Spaltenregionen, konfigurierbar bis 100,000

Tabellen behalten Limits von 256 Spalten, 100,000 Zeilen und 100,000 semantischen Elementen; Zelltext insgesamt ist auf 8,000,000 UTF-16-Einheiten begrenzt

Eine Mischtextzelle akzeptiert höchstens 1,024 zusätzliche Runs, 1,000,000 UTF-16-Einheiten, 100,000 Zeilen und 100,000 Fragmente; einzelne zu breite Zeichen oder Wörter ohne erlaubten Umbruch werden abgelehnt

Eine fortgesetzte Gruppe ist auf 10,000 Zellen begrenzt; Regionsbudgets und begrenzte Schnittsuche verhindern endlose Paginierung; Bilder müssen nach Headern, Labels und Innenabständen in den Körperbereich passen

Tabellensnapshot und Plancache umfassen Run-Stile, Bildmaße, Alternativtext, Zwischensummenbindung und Fortsetzungsoptionen; spätere Änderungen der Aufrufertabelle ändern den Snapshot nicht

Routinen auf oberster Ebene

RoutineBeschreibung
ResolveLayoutTextErsetzt Seitennummern-Platzhalter unter Verwendung der reservierten Ziffernbreite
PdfLayoutSemanticRoleNameGibt den Tagged-PDF-Strukturnamen für eine semantische Rolle zurück
BuildTaggedLayoutPdfWendet einen fertigen Layoutplan und eine getaggte Struktur auf PDF-Quellbytes an
ResolvePdfLayoutGridTracksLöst feste, bruchteilbasierte und inhaltsbasierte Rasterspuren innerhalb der verfügbaren Breite auf

Siehe auch