PDFium Delphi Component Docs

Unidad FPdfLayout

Construye planes medibles de layout de flujo con elementos de página, columnas, tablas entre páginas, enlaces, nodos reutilizables, entrada de markup y semántica Tagged PDF

Excepciones y enumeraciones

TipoValores o propósito
EPdfLayoutErrorExcepción generada por entrada de diseño no válida, 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 layout

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
TPdfLayoutGridTracksArreglo dinámico de TPdfLayoutGridTrack
TPdfLayoutGridSizesArreglo dinámico de tamaños de pista resueltos
TPdfLayoutTableOptionsCellPadding, BorderWidth, BorderColor, BorderAlpha, RepeatHeaderRows, AllowRowSpanContinuation, MaxContinuationRegions, ContinuationBefore, ContinuationAfter, ContinuationStyle, Default
TPdfLayoutTableTextRunText, Style
TPdfLayoutTableTextRunsArreglo dinámico de TPdfLayoutTableTextRun
TPdfMarkupOptionsBaseStyle, HeadingScale, MaxInputCharacters, MaxNodes, Default
TPdfLayoutSemanticElementSemantics, ParentElementIndex
TPdfLayoutSemanticElementsArreglo dinámico de TPdfLayoutSemanticElement
TPdfLayoutCommandKind, PageNumber, Bounds, Text, FontName, FontSize, Color, Alpha, Alignment, Thickness, FileName, Uri, Source, SourcePageIndex, SemanticElementIndex, MarkedContentID, AnnotationIndex
TPdfLayoutCommandsArreglo dinámico 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 layout

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 agregar 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 la cantidad mínima de líneas de párrafo retenidas en la parte inferior de una región y WidowLines es la mínima colocada en la parte superior de la región siguiente; ambas tienen el valor predeterminado uno para preservar la paginación existente

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

Un elemento pliTable acepta solo PageBreakBefore y PageBreakAfter; la división de filas y la retención del inicio de tabla las controla el modelo de tabla

El planificador almacena en caché las líneas ajustadas 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 un TPdfLayoutPagedPlan sobre un TStream dedicado, posicionable y redimensionable, luego llame a BuildPagedPlan o páselo a TPdf.GeneratePagedLayout

El planificador serializa los comandos de inmediato, libera cada resultado de texto ajustado completado y deja Plan.Commands vacío mientras retiene la configuración de página, los elementos semánticos, los conteos y los totales de página estables en el resumen

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

MaxCachedPages acota solo los arreglos de páginas retenidos por el plan; quienes llaman y conservan los arreglos devueltos 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 la sesión y no un formato de archivo portátil, el flujo no debe compartirse ni modificarse externamente, y los objetos de origen referenciados por XObjects de página o nodos en caché deben sobrevivir al plan paginado

Use TPdfRandomAccessStore cuando los comandos deban permanecer en memoria hasta un umbral seleccionado y posteriormente pasen a almacenamiento temporal que se elimina al cerrar

Tablas entre páginas

Cree un TPdfLayoutTable con pistas de cuadrícula fijas, fraccionales o del tamaño del contenido, agregue filas y celdas, y luego llame a AddTable; el documento almacena una instantánea propia, de modo que las mutaciones posteriores de quien llama no pueden invalidar una caché de planes existente

Las filas de encabezado deben ser contiguas al inicio de la tabla y se repiten después de una transición de página o de columna cuando RepeatHeaderRows es true; las expansiones de filas de encabezado no pueden extenderse hacia las filas del cuerpo

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

Establezca AllowRowSpanContinuation en True para permitir que un grupo con celdas extendidas entre filas continúe entre regiones de página o columna; el planificador distribuye la altura adicional entre sus filas y elige cortes que no atraviesen líneas de texto ni imágenes

AllowSplit=False sigue exigiendo una fila atómica; las restricciones de fila incompatibles o un bloque atómico que no cabe en una región nueva lanzan EPdfLayoutError, sin recortar ni repetir contenido

Los títulos permanecen con el bloque inicial de encabezados y con el inicio mínimo del primer grupo del cuerpo; los encabezados repetidos reutilizan los mismos elementos originales

El planificador emite un elemento Table, un Caption opcional, hijos TR y celdas TH o TD sin importar la cantidad de páginas; los comandos repetidos de encabezado reutilizan los índices semánticos originales, y las celdas TD reciben automáticamente los ID de encabezado superpuestos a menos que se suministren ID válidos explícitos

Los bordes de tabla son comandos de artefacto plcRectangle renderizados mediante objetos de ruta nativos de PDFium, mientras que el texto del título y de las celdas permanece como contenido etiquetado

Celdas que combinan texto e imágenes

AddTextRun agrega texto inline después del Text original de la celda; cada segmento tiene fuente, tamaño, color, alfa, altura de línea y política de división de palabras largas propios

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

El espaciado de párrafo y los flags de mantener unido de cada segmento no crean bloques de párrafo adicionales; si se necesitan esas restricciones, use filas independientes o elementos normales de layout

SetImage configura una imagen basada en archivo por celda, sobre el texto y alineada al relleno izquierdo; otra llamada reemplaza esa imagen

Indique una altura positiva explícita y un ancho que quepa dentro de la celda; un ancho cero usa todo el ancho interior, y el llamador controla la relación de aspecto con las dimensiones proporcionadas

La imagen es indivisible durante la continuación y se genera una sola vez en su posición original; su archivo debe seguir disponible hasta la generación, y un archivo ausente o una imagen no compatible revierte las páginas agregadas

Se exige una descripción alternativa no vacía; la imagen pasa a ser un hijo Figure del 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 continuadas y conserva RowSpan, ColumnSpan y sus asociaciones con encabezados; 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, valor formateado y estilo del llamador; con varias columnas, la etiqueta abarca todas excepto la última, que contiene el valor

El helper establece KeepWithPrevious=True para que un subtotal no quede como primera fila aislada en una continuación; los valores vienen del llamador y no se hace agregación numérica

ContinuationAfter aparece al final de una región que continúa, y ContinuationBefore después de los encabezados repetidos en la región siguiente

Ambas etiquetas están vacías de forma predeterminada, 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 modifican la jerarquía semántica de la tabla; placeholders de página como {page} y {pages} usan el resolvedor habitual de texto 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 ajustar opciones; AllowRowSpanContinuation es False de forma predeterminada y MaxContinuationRegions limita a 10,000 regiones de página o columna, con un máximo configurable de 100,000

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

Una celda de texto mixto acepta hasta 1,024 segmentos agregados, 1,000,000 unidades de código UTF-16, 100,000 líneas y 100,000 fragmentos; se rechaza un carácter individual o una palabra sin división de palabras largas que exceda el ancho disponible

Un grupo de filas continuado se limita a 10,000 celdas; los presupuestos de regiones y las búsquedas de corte acotadas evitan paginación ilimitada, y las imágenes deben caber en la región del cuerpo disponible después de encabezados, etiquetas y relleno

La instantánea propia de tabla y la caché del plan incluyen estilos de segmentos, dimensiones de imágenes, texto alternativo, retención de subtotales y opciones de continuación; los cambios posteriores a la tabla del llamador no modifican 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 de PDF de origen
ResolvePdfLayoutGridTracksResuelve las pistas de cuadrícula fijas, fraccionales y del tamaño del contenido dentro del ancho disponible

Ver también