PDFium Delphi Component Docs

Unidad FPdfLayout

Construye planes medibles de diseño de flujo con elementos fijos de página, columnas, tablas entre páginas, enlaces, nodos reutilizables, entrada de marcado y semántica de PDF etiquetado

Excepciones y enumeraciones

TipoValores o propósito
EPdfLayoutErrorExcepción lanzada para entradas de diseño no válidas, límites excedidos y estructura semántica inconsistente
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

Registros de diseño

TipoMiembros públicos
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
TPdfLayoutGridTracksMatriz dinámica de TPdfLayoutGridTrack
TPdfLayoutGridSizesMatriz dinámica de tamaños de pista resueltos
TPdfLayoutTableOptionsCellPadding, BorderWidth, BorderColor, BorderAlpha, RepeatHeaderRows, AllowRowSpanContinuation, MaxContinuationRegions, ContinuationBefore, ContinuationAfter, ContinuationStyle, Default
TPdfLayoutTableTextRunText, Style
TPdfLayoutTableTextRunsArray dinámico de TPdfLayoutTableTextRun
TPdfMarkupOptionsBaseStyle, HeadingScale, MaxInputCharacters, MaxNodes, Default
TPdfLayoutSemanticElementSemantics, ParentElementIndex
TPdfLayoutSemanticElementsMatriz dinámica de TPdfLayoutSemanticElement
TPdfLayoutCommandKind, PageNumber, Bounds, Text, FontName, FontSize, Color, Alpha, Alignment, Thickness, FileName, Uri, Source, SourcePageIndex, SemanticElementIndex, MarkedContentID, AnnotationIndex
TPdfLayoutCommandsMatriz dinámica de TPdfLayoutCommand
TPdfLayoutPlanPageSettings, PageCount, Commands, SemanticElements, TextLineCount, RuleCount, RectangleCount, ImageCount, PageXObjectCount, CachedNodeCount, LinkCount, TaggedContentCount, ArtifactCount, MeasuredTextCount, TotalPageReferenceCount, ReservedPageDigits, CacheHitCount, CacheMissCount, ReusedXObjectCount, ColumnCount, ColumnGap

Clases de diseño

TipoMiembros públicos
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, los presupuestos MaxCommandCount, MaxStorageBytes, MaxPageCommands, MaxSourceCount y MaxCachedPages, y las estadísticas de caché CachedPageCount, CacheHitCount, CacheMissCount y 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

Restricciones de paginación

Llame a SetLastItemConstraints después de añadir cualquier elemento de flujo visible para mantenerlo unido, mantenerlo con el inicio del siguiente elemento o forzar un salto de página físico antes o después de él

OrphanLines es el número mínimo de líneas de párrafo retenidas al final de una región y WidowLines es el mínimo situado al principio de la región siguiente; ambas están predeterminadas en uno para preservar la paginación existente

Las restricciones se aplican por igual a los elementos con rol de párrafo, enlace, lista, figura y tabla, mientras que los contenedores de solo semántica no tienen geometría y por tanto rechazan las restricciones de paginación

Un elemento pliTable solo acepta PageBreakBefore y PageBreakAfter; la división de filas y la retención del inicio de la tabla están controladas por el modelo de tabla

El planificador almacena en caché las líneas envueltas durante una construcción, de modo que la predicción de mantener-con-el-siguiente y la emisión final de comandos no miden el mismo texto dos veces

Planes de comandos paginados

Cree TPdfLayoutPagedPlan sobre un TStream dedicado, posicionable y redimensionable, y después llame a BuildPagedPlan o páseselo a TPdf.GeneratePagedLayout

El planificador serializa los comandos inmediatamente, libera cada resultado de texto envuelto completado y deja Plan.Commands vacío mientras retiene en el resumen los ajustes de página, los elementos semánticos, los recuentos y los totales de página estables

Los comandos del cuerpo y los comandos posteriores de cabecera o pie se indexan como segmentos de página enlazados, de modo que MaterializePage restaura la página completa sin examinar comandos de otras páginas

MaxCachedPages acota solo las matrices de página retenidas por el plan; quienes conserven las matrices devueltas extienden su vida útil, y PDFium retiene las páginas nativas creadas hasta que el documento de destino se guarda o se cierra

El formato de almacenamiento es estado privado de sesión en lugar de un formato de archivo portable, el flujo no debe compartirse ni modificarse externamente, y los objetos de origen referenciados por page XObjects o nodos en caché deben sobrevivir al plan paginado

Use TPdfRandomAccessStore cuando los comandos deban permanecer en memoria hasta un umbral seleccionado y derramarse después en un almacenamiento temporal que se elimina al cerrar

Tablas que abarcan varias páginas

Cree TPdfLayoutTable con pistas de cuadrícula fijas, fraccionales o dimensionadas por contenido, añada filas y celdas y después llame a AddTable; el documento almacena una instantánea propia, de modo que las mutaciones posteriores del llamador no pueden invalidar una caché de planes existente

Las filas de cabecera deben ser contiguas al principio de la tabla y se repiten después de una transición de página o de columna cuando RepeatHeaderRows es true; los spans de las filas de cabecera no pueden extenderse a las filas del cuerpo

Una fila del cuerpo se puede dividir si AllowSplit es true; por defecto, los grupos transitivos que abarcan varias filas se mueven como una unidad atómica, y las celdas de una fila ordinaria dividida comparten la misma banda de líneas, relleno y geometría de bordes

Active AllowRowSpanContinuation con True para que un grupo que abarca filas continúe entre regiones de página o columna; el planificador reparte la altura adicional del span entre sus filas y elige cortes que no atraviesen líneas de texto ni imágenes

AllowSplit=False sigue imponiendo una fila atómica; las restricciones de fila incompatibles o un bloque atómico que no quepa en una región nueva lanzan EPdfLayoutError en lugar de recortar o repetir contenido

Los títulos permanecen con el bloque de cabecera inicial y el comienzo mínimo del primer grupo del cuerpo; las cabeceras repetidas reutilizan los mismos elementos de cabecera originales

El planificador emite un elemento Table, un Caption opcional, hijos TR y celdas TH o TD con independencia del número de páginas; los comandos de cabecera repetida reutilizan los índices semánticos originales, y las celdas TD reciben automáticamente IDs de cabecera solapados a menos que se suministren IDs válidos explícitos

Los bordes de la tabla son comandos artifact plcRectangle renderizados a través de objetos de ruta nativos de PDFium, mientras que el texto del título y de las celdas permanece como contenido etiquetado

Celdas con texto e imágenes

AddTextRun añade texto en línea tras el Text original de la celda; cada fragmento tiene su propia fuente, tamaño, color, alfa, altura de línea y política de división de palabras largas

El texto mixto se ajusta usando anchos medidos, conserva los pares sustitutos UTF-16 al dividir palabras largas y emite objetos de texto nativos separados con una línea base común; la alineación horizontal procede del Style base de la celda

El espaciado de párrafo y los indicadores de mantener unido de cada fragmento no crean bloques de párrafo adicionales; use filas separadas o elementos de layout ordinarios cuando necesite esas restricciones

SetImage configura una imagen respaldada por un fichero por celda, situada encima del texto en el borde izquierdo del relleno; otra llamada sustituye esa imagen

Indique una altura positiva explícita y un ancho que quepa en el ancho interior de la celda; un ancho cero usa todo el espacio interior y las dimensiones indicadas por el llamador controlan la relación de aspecto

La imagen no se divide durante la continuación y se emite una sola vez en su posición original; su fichero debe seguir disponible hasta la generación, y un fichero ausente o una imagen no admitida hacen que la generación revierta las páginas añadidas

Se exige una descripción alternativa no vacía; la imagen pasa a ser un hijo Figure de su TH o TD original, mientras que todos los fragmentos de texto siguen asociados a esa celda

Entre páginas, el TH o TD original recibe las referencias de contenido marcado de la continuación y conserva su RowSpan, ColumnSpan y asociaciones de cabecera; no se crea una celda lógica duplicada

Subtotales y etiquetas de continuación

AddSubtotalRow crea una fila atómica del cuerpo con la etiqueta, el valor formateado y el estilo del llamador; si hay varias columnas, la etiqueta abarca todas salvo la última columna de valor

El helper activa KeepWithPrevious=True para que un subtotal no quede como primera fila aislada en una continuación; los valores los proporciona el llamador y no se realiza agregación numérica

ContinuationAfter aparece al final de una región que continúa y ContinuationBefore aparece tras las cabeceras repetidas de la región siguiente

Ambas etiquetas están vacías por defecto, usan ContinuationStyle, deben caber en una línea y reservan su propia altura; la primera región no tiene etiqueta anterior y la última no tiene etiqueta posterior

Las etiquetas y los bordes son artifacts y no alteran la jerarquía semántica de la tabla; los marcadores de página como {page} y {pages} usan el resolver de texto ordinario del layout

Declaraciones y límites de tablas avanzadas

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;

Use TPdfLayoutTableOptions.Default antes de cambiar opciones; AllowRowSpanContinuation vale False por defecto y MaxContinuationRegions admite por defecto 10,000 regiones de página o columna, con un máximo configurable de 100,000

Las tablas mantienen los límites de 256 columnas, 100,000 filas y 100,000 elementos semánticos; el texto total de las celdas se limita a 8,000,000 unidades de código UTF-16

Una celda de texto mixto admite como máximo 1,024 fragmentos añadidos, 1,000,000 unidades de código UTF-16, 100,000 líneas y 100,000 fragmentos de salida; se rechaza un carácter individual o una palabra con división desactivada que supere el ancho disponible

Un grupo de filas continuado se limita a 10,000 celdas; los presupuestos de regiones y las búsquedas acotadas de cortes evitan paginaciones ilimitadas, y las imágenes deben caber en la región de cuerpo disponible tras cabeceras, etiquetas y relleno

La instantánea propia de la tabla y la caché del plan incluyen los estilos de fragmentos, las dimensiones de imágenes, el texto alternativo, la retención de subtotales y los ajustes de continuación; los cambios posteriores en la tabla del llamador no alteran esa instantánea

Rutinas de nivel superior

RutinaDescripción
ResolveLayoutTextExpande los marcadores de posición de números de página usando el ancho de dígitos reservado
PdfLayoutSemanticRoleNameDevuelve el nombre de estructura de PDF etiquetado para un rol semántico
BuildTaggedLayoutPdfAplica un plan de diseño completado y una estructura etiquetada a bytes PDF de origen
ResolvePdfLayoutGridTracksResuelve pistas de cuadrícula fijas, fraccionales y dimensionadas por contenido dentro del ancho disponible

Véase también