PDFium Delphi Component Docs

Unidade FPdfLayout

Constrói planos mensuráveis de layout de fluxo com elementos de página, colunas, tabelas entre páginas, links, nós reutilizáveis, entrada de markup e semântica de Tagged PDF

Exceções e enumerações

TipoValores ou finalidade
EPdfLayoutErrorExceção disparada para entrada de layout inválida, limites excedidos e estrutura 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

Layout records

TypePublic members
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
TPdfLayoutGridTracksArray dinâmico de TPdfLayoutGridTrack
TPdfLayoutGridSizesArray dinâmico de tamanhos de track resolvidos
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
TPdfLayoutSemanticElementsArray dinâmico de TPdfLayoutSemanticElement
TPdfLayoutCommandKind, PageNumber, Bounds, Text, FontName, FontSize, Color, Alpha, Alignment, Thickness, FileName, Uri, Source, SourcePageIndex, SemanticElementIndex, MarkedContentID, AnnotationIndex
TPdfLayoutCommandsArray 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

Layout classes

TypePublic members
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, os orçamentos MaxCommandCount, MaxStorageBytes, MaxPageCommands, MaxSourceCount e MaxCachedPages, e as estatísticas de cache CachedPageCount, CacheHitCount, CacheMissCount e 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

Pagination constraints

Chame SetLastItemConstraints depois de adicionar qualquer item de fluxo visível para mantê-lo junto, mantê-lo com o início do próximo item ou forçar uma quebra de página física antes ou depois dele

OrphanLines é o número mínimo de linhas de parágrafo retidas no rodapé de uma região e WidowLines é o mínimo colocado no topo da região seguinte; ambos têm como padrão um, para preservar a paginação existente

As restrições se aplicam igualmente a itens com papel de parágrafo, link, lista, figura e tabela, enquanto contêineres apenas semânticos não têm geometria e, portanto, rejeitam restrições de paginação

Um item pliTable aceita apenas PageBreakBefore e PageBreakAfter; a divisão de linhas e a retenção do início da tabela são controladas pelo modelo de tabela

O planejador faz cache das linhas quebradas durante uma construção, de modo que a previsão de keep-with-next e a emissão final de comandos não medem o mesmo texto duas vezes

Paged command plans

Crie TPdfLayoutPagedPlan sobre um TStream dedicado, seekable e redimensionável, depois chame BuildPagedPlan ou passe-o para TPdf.GeneratePagedLayout

O planejador serializa os comandos imediatamente, libera cada resultado de texto quebrado concluído e deixa Plan.Commands vazio, retendo no resumo as configurações de página, os elementos semânticos, as contagens e os totais estáveis de páginas

Os comandos do corpo e os comandos posteriores de header ou footer são indexados como segmentos de página encadeados, de modo que MaterializePage restaura a página completa sem examinar os comandos de outras páginas

MaxCachedPages limita apenas os arrays de páginas retidos pelo plano; quem chama e mantém os arrays retornados estende seu tempo de vida, e o PDFium retém as páginas autorais nativas até que o documento de destino seja salvo ou fechado

O formato de armazenamento é estado privado de sessão, e não um formato de arquivo portátil, o stream não deve ser compartilhado nem modificado externamente, e os objetos de origem referenciados por page XObjects ou nós em cache devem sobreviver ao plano paginado

Use TPdfRandomAccessStore quando os comandos devam permanecer na memória até um limite selecionado e, depois, transbordar para armazenamento temporário de exclusão ao fechar

Cross-page tables

Crie TPdfLayoutTable com tracks de grade fixos, fracionários ou dimensionados pelo conteúdo, adicione linhas e células e, então, chame AddTable; o documento armazena um snapshot de sua propriedade, de modo que mutações posteriores de quem chama não podem invalidar um cache de plano existente

As linhas de header devem ser contíguas no início da tabela e se repetem após uma transição de página ou de coluna quando RepeatHeaderRows é True; os spans de linhas de header não podem se estender a linhas do corpo

Uma linha do corpo só pode ser dividida quando AllowSplit é True e ela não pertence a um grupo de linhas com span; todas as células em um pedaço dividido compartilham a mesma faixa de linhas, padding e geometria de borda

Defina AllowRowSpanContinuation como True para permitir que um grupo com span de linha continue entre regiões de página ou coluna; o planejador distribui a altura extra do span entre suas linhas e escolhe cortes que não interceptam uma linha de texto nem uma imagem

AllowSplit=False permanece uma restrição de linha atômica; restrições de linha incompatíveis ou um bloco atômico que não cabe em uma região nova disparam EPdfLayoutError em vez de recortar ou repetir conteúdo

As legendas ficam com o bloco de header repetido e o início mínimo do primeiro grupo do corpo, enquanto grupos transitivos de linhas com span se movem como uma única unidade atômica

O planejador emite um elemento Table, uma Caption opcional, filhos TR e células TH ou TD, independentemente da contagem de páginas; os comandos de header repetidos reutilizam os índices semânticos originais, e as células TD recebem automaticamente os IDs de header sobrepostos, a menos que IDs válidos explícitos sejam fornecidos

As bordas de tabela são comandos artifact plcRectangle renderizados por meio de objetos de caminho nativos do PDFium, enquanto o texto da legenda e das células permanece conteúdo tagged

Células de texto misto e imagem

AddTextRun acrescenta texto em linha após o Text original da célula; cada run tem sua própria fonte, tamanho de fonte, cor, alpha, altura de linha e política de quebra de palavras longas

O texto misto quebra usando larguras medidas, preserva pares substitutos UTF-16 ao quebrar uma palavra longa e emite objetos de texto nativos separados com uma linha de base compartilhada; o alinhamento horizontal vem do Style base da célula

Espaçamento de parágrafo em nível de run e flags de manter-junto não introduzem blocos de parágrafo adicionais; use linhas separadas ou itens de layout comuns quando essas restrições forem necessárias

SetImage configura uma imagem baseada em arquivo por célula, posicionada acima de seu texto no padding esquerdo; outra chamada substitui essa imagem

Forneça uma altura positiva explícita e uma largura que caiba na largura interna da célula; uma largura zero usa toda a largura interna, e quem chama controla a proporção da imagem por meio das dimensões fornecidas

A imagem é indivisível durante a continuação e é emitida uma vez na sua posição original; seu arquivo deve permanecer disponível até a geração, e um arquivo ausente ou uma imagem não suportada faz a geração reverter as páginas anexadas

Uma descrição alternativa não vazia é obrigatória; a imagem se torna um filho Figure de sua TH ou TD original, enquanto todos os fragmentos de texto permanecem associados a essa célula

Entre páginas, a TH ou TD original recebe as referências de conteúdo marcado continuadas e mantém suas associações de RowSpan, ColumnSpan e cabeçalho; nenhuma célula lógica duplicada é criada

Subtotais e rótulos de continuação

AddSubtotalRow cria uma linha de corpo atômica usando o rótulo, o valor formatado e o estilo de quem chama; para várias colunas, o rótulo abrange todas, exceto a coluna final de valor

O auxiliar define KeepWithPrevious=True para que um subtotal não se torne uma primeira linha isolada em uma continuação; os valores são fornecidos por quem chama e nenhuma agregação numérica é realizada

ContinuationAfter é mostrado no fim de uma região que continua, e ContinuationBefore é mostrado após quaisquer cabeçalhos repetidos na região seguinte

Ambos os rótulos têm como padrão vazio, usam ContinuationStyle, devem caber em uma linha e reservam a própria altura; a primeira região não tem rótulo before e a região final não tem rótulo after

Rótulos e bordas são artefatos, deixando a hierarquia semântica da tabela intacta; espaços reservados de página como {page} e {pages} usam o resolvedor comum de texto de layout

Declarações e limites avançados de tabela

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 sobrescrever opções; AllowRowSpanContinuation tem como padrão False e MaxContinuationRegions tem como padrão 10,000 regiões de página ou coluna, com um teto configurável de 100,000

As tabelas mantêm os limites de 256 colunas, 100,000 linhas e 100,000 elementos semânticos; o texto total das células é limitado a 8,000,000 unidades de código UTF-16

Uma célula de texto misto aceita no máximo 1,024 runs acrescentados, 1,000,000 unidades de código UTF-16, 100,000 linhas e 100,000 fragmentos; um caractere individual ou uma palavra com quebra de palavras longas desabilitada que exceda a largura disponível é rejeitado

Um grupo de linhas continuado é limitado a 10,000 células; orçamentos de região e buscas de corte delimitadas evitam paginação ilimitada, e as imagens devem caber na região de corpo disponível após cabeçalhos, rótulos e padding

O snapshot de tabela de propriedade e o cache do plano incluem estilos de run, dimensões de imagem, texto alternativo, retenção de subtotais e configurações de continuação; alterações posteriores na tabela de quem chama não alteram esse snapshot

Top-level routines

RoutineDescription
ResolveLayoutTextExpande os placeholders de número de página usando a largura de dígitos reservada
PdfLayoutSemanticRoleNameRetorna o nome de estrutura de Tagged PDF para um papel semântico
BuildTaggedLayoutPdfAplica um plano de layout concluído e uma estrutura tagged aos bytes de um PDF de origem
ResolvePdfLayoutGridTracksResolve tracks de grade fixos, fracionários e dimensionados pelo conteúdo dentro da largura disponível

See Also