PDFium Delphi Component Docs

Unité FPdfLayout

Construit des plans de mise en page fluide mesurables avec habillage de page, colonnes, tableaux multi-pages, liens, nœuds réutilisables, entrées de balisage et sémantique PDF étiqueté

Exceptions et énumérations

TypeValeurs ou rôle
EPdfLayoutErrorException levée pour une entrée de mise en page invalide, des limites dépassées et une structure sémantique incohérente
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

Enregistrements de mise en page

TypeMembres publics
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
TPdfLayoutGridTracksTableau dynamique de TPdfLayoutGridTrack
TPdfLayoutGridSizesTableau dynamique de tailles de pistes résolues
TPdfLayoutTableOptionsCellPadding, BorderWidth, BorderColor, BorderAlpha, RepeatHeaderRows, AllowRowSpanContinuation, MaxContinuationRegions, ContinuationBefore, ContinuationAfter, ContinuationStyle, Default
TPdfLayoutTableTextRunText, Style
TPdfLayoutTableTextRunsTableau dynamique de TPdfLayoutTableTextRun
TPdfMarkupOptionsBaseStyle, HeadingScale, MaxInputCharacters, MaxNodes, Default
TPdfLayoutSemanticElementSemantics, ParentElementIndex
TPdfLayoutSemanticElementsTableau dynamique de TPdfLayoutSemanticElement
TPdfLayoutCommandKind, PageNumber, Bounds, Text, FontName, FontSize, Color, Alpha, Alignment, Thickness, FileName, Uri, Source, SourcePageIndex, SemanticElementIndex, MarkedContentID, AnnotationIndex
TPdfLayoutCommandsTableau dynamique de TPdfLayoutCommand
TPdfLayoutPlanPageSettings, PageCount, Commands, SemanticElements, TextLineCount, RuleCount, RectangleCount, ImageCount, PageXObjectCount, CachedNodeCount, LinkCount, TaggedContentCount, ArtifactCount, MeasuredTextCount, TotalPageReferenceCount, ReservedPageDigits, CacheHitCount, CacheMissCount, ReusedXObjectCount, ColumnCount, ColumnGap

Classes de mise en page

TypeMembres publics
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, les budgets MaxCommandCount, MaxStorageBytes, MaxPageCommands, MaxSourceCount et MaxCachedPages, et les statistiques de cache CachedPageCount, CacheHitCount, CacheMissCount et 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

Contraintes de pagination

Appelez SetLastItemConstraints après l’ajout de tout élément de flux visible pour le maintenir ensemble, le lier au début de l’élément suivant ou forcer un saut de page physique avant ou après lui

OrphanLines est le nombre minimal de lignes de paragraphe conservées en bas d’une région et WidowLines le minimum placé en haut de la région suivante ; les deux valent un par défaut afin de préserver la pagination existante

Les contraintes s’appliquent également aux éléments de rôle paragraphe, lien, liste, figure et tableau, tandis que les conteneurs purement sémantiques n’ont pas de géométrie et rejettent donc les contraintes de pagination

Un élément pliTable n’accepte que PageBreakBefore et PageBreakAfter ; la scission des lignes et la rétention du début de tableau sont contrôlées par le modèle de tableau

Le planificateur met en cache les lignes enveloppées pendant une construction, de sorte que la prédiction keep-with-next et l’émission finale des commandes ne mesurent pas deux fois le même texte

Plans de commandes par page

Créez TPdfLayoutPagedPlan sur un TStream dédié adressable et redimensionnable, puis appelez BuildPagedPlan ou transmettez-le à TPdf.GeneratePagedLayout

Le planificateur sérialise les commandes immédiatement, libère chaque résultat de texte enveloppé achevé et laisse Plan.Commands vide tout en conservant les paramètres de page, les éléments sémantiques, les comptages et les totaux de pages stables dans le résumé

Les commandes de corps et les commandes ultérieures d’en-tête ou de pied sont indexées comme segments de page liés, de sorte que MaterializePage restaure la page complète sans analyser les commandes des autres pages

MaxCachedPages ne borne que les tableaux de pages conservés par le plan ; les appelants qui conservent les tableaux renvoyés prolongent leur durée de vie, et PDFium retient les pages natives créées jusqu’à ce que le document de destination soit enregistré ou fermé

Le format de stockage est un état de session privé plutôt qu’un format de fichier portable, le flux ne doit pas être partagé ni modifié de l’extérieur, et les objets sources référencés par des XObject de page ou des nœuds en cache doivent survivre au plan paginé

Utilisez TPdfRandomAccessStore lorsque les commandes doivent rester en mémoire jusqu’à un seuil choisi puis déborder vers un stockage temporaire supprimé à la fermeture

Tableaux sur plusieurs pages

Créez TPdfLayoutTable avec des pistes de grille fixes, fractionnelles ou dimensionnées au contenu, ajoutez des lignes et des cellules, puis appelez AddTable ; le document stocke un instantané dont il est propriétaire afin que des mutations ultérieures de l’appelant ne puissent pas invalider un cache de plan existant

Les lignes d’en-tête doivent être contiguës au début du tableau et se répéter après une transition de page ou de colonne lorsque RepeatHeaderRows est true ; les fusions de lignes d’en-tête ne peuvent pas s’étendre dans les lignes de corps

Une ligne de corps peut être divisée si AllowSplit vaut true ; par défaut, les groupes liés transitivement par des cellules fusionnées verticalement restent atomiques, et les cellules d’une ligne divisée ordinaire partagent les mêmes bandes de texte, marges et bordures

Mettez AllowRowSpanContinuation à True pour prolonger un groupe de cellules fusionnées sur plusieurs régions de page ou colonne ; le planificateur répartit la hauteur supplémentaire entre les lignes et choisit des coupes ne traversant ni texte ni image

AllowSplit=False impose toujours une ligne atomique ; des contraintes incompatibles ou un bloc atomique trop grand pour une région vide lèvent EPdfLayoutError plutôt que de couper ou répéter le contenu

Les légendes restent avec le bloc d’en-tête initial et le début minimal du premier groupe de corps ; les en-têtes répétés réutilisent les éléments originaux

Le planificateur émet un élément Table, une Caption facultative, des enfants TR et des cellules TH ou TD quel que soit le nombre de pages ; les commandes d’en-tête répétées réutilisent les index sémantiques d’origine, et les cellules TD reçoivent automatiquement les ID d’en-tête en chevauchement sauf si des ID valides explicites sont fournis

Les bordures de tableau sont des commandes artifact plcRectangle rendues via des objets de chemin natifs PDFium, tandis que le texte des légendes et des cellules reste du contenu étiqueté

Cellules mêlant texte et image

AddTextRun ajoute du texte en ligne après le Text original de la cellule ; chaque segment possède sa police, taille, couleur, alpha, hauteur de ligne et politique de coupure des mots longs

Le texte mixte passe à la ligne selon les largeurs mesurées, préserve les paires de substituts UTF-16 lors de la coupure d’un mot long et produit des objets texte natifs distincts sur une même ligne de base ; l’alignement horizontal vient du Style de base

L’espacement de paragraphe et les indicateurs de maintien groupé des segments ne créent pas de blocs supplémentaires ; utilisez des lignes distinctes ou des éléments de mise en page ordinaires pour ces contraintes

SetImage configure une image issue d’un fichier par cellule, placée au-dessus du texte à la marge gauche ; un nouvel appel la remplace

Fournissez une hauteur explicitement positive et une largeur tenant dans la largeur intérieure ; zéro utilise toute cette largeur ; les dimensions fournies déterminent le rapport d’aspect

L’image est indivisible pendant une continuation et n’est produite qu’une fois à sa position originale ; son fichier doit rester disponible jusqu’à la génération ; un fichier absent ou une image non prise en charge provoque le retrait des pages ajoutées

Une description alternative non vide est obligatoire ; l’image devient un enfant Figure de son TH ou TD original, et tous les fragments de texte restent associés à cette cellule

Sur plusieurs pages, le TH ou TD original reçoit les références de contenu marqué prolongé et conserve RowSpan, ColumnSpan et ses associations d’en-tête ; aucune cellule logique dupliquée n’est créée

Sous-totaux et libellés de continuation

AddSubtotalRow crée une ligne de corps atomique avec le libellé, la valeur formatée et le style fournis ; sur plusieurs colonnes, le libellé occupe toutes les colonnes sauf la dernière, réservée à la valeur

Le helper fixe KeepWithPrevious=True pour éviter un sous-total isolé en début de continuation ; l’appelant fournit les valeurs et aucun calcul d’agrégation n’est effectué

ContinuationAfter s’affiche à la fin d’une région prolongée, et ContinuationBefore après les éventuels en-têtes répétés de la région suivante

Les deux libellés sont vides par défaut, utilisent ContinuationStyle, tiennent sur une ligne et réservent leur hauteur ; la première région n’a pas de libellé avant et la dernière n’a pas de libellé après

Les libellés et bordures sont des artefacts, sans modifier la hiérarchie sémantique du tableau ; les marqueurs de page comme {page} et {pages} utilisent le résolveur de texte ordinaire

Déclarations et limites des tableaux avancés

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;

Utilisez TPdfLayoutTableOptions.Default avant de modifier les options ; AllowRowSpanContinuation vaut False et MaxContinuationRegions vaut 10,000 régions de page ou colonne, avec un plafond configurable de 100,000

Les tableaux restent limités à 256 colonnes, 100,000 lignes et 100,000 éléments sémantiques ; le texte total des cellules est limité à 8,000,000 unités UTF-16

Une cellule de texte mixte accepte au plus 1,024 segments ajoutés, 1,000,000 unités UTF-16, 100,000 lignes et 100,000 fragments ; un caractère, ou un mot sans coupure des mots longs, dépassant la largeur disponible est refusé

Un groupe prolongé est limité à 10,000 cellules ; budgets de régions et recherches de coupe bornées évitent une pagination infinie ; les images doivent tenir dans le corps disponible après en-têtes, libellés et marges

L’instantané possédé du tableau et le cache du plan comprennent styles des segments, dimensions et descriptions des images, maintien des sous-totaux et paramètres de continuation ; les modifications ultérieures du tableau appelant ne changent pas cet instantané

Fonctions et procédures globales

RoutineDescription
ResolveLayoutTextDéveloppe les espaces réservés de numéros de page en utilisant la largeur de chiffres réservée
PdfLayoutSemanticRoleNameRenvoie le nom de structure PDF étiqueté d’un rôle sémantique
BuildTaggedLayoutPdfApplique un plan de mise en page achevé et une structure étiquetée aux octets PDF sources
ResolvePdfLayoutGridTracksRésout les pistes de grille fixes, fractionnelles et dimensionnées au contenu dans la largeur disponible

Voir aussi