Disposição de Fluxo Restrita

O HotPDF consegue medir elementos reutilizáveis sem os desenhar, dividir elementos de parágrafo, linha, contentor e personalizados em continuações próprias, compor camadas de página reutilizáveis, encenar páginas concluídas em armazenamento com suporte de ficheiro, aplicar restrições de quebra de página a parágrafos e expor diagnósticos limitados

Contrato de medição e desenho reutilizável

Derive de THPDFLayoutElement e implemente Measure e Draw sem efeitos secundários; a medição recebe apenas THPDFLayoutConstraints, pelo que não tem qualquer superfície de desenho de página ou documento

MeasureLayoutElement valida dimensões não negativas e calcula Fits de forma centralizada a partir das mesmas restrições de largura e altura usadas no posicionamento

THPDFLayoutElementKind permite a ElementKind classificar uma implementação como lekParagraph, lekRow, lekContainer ou lekCustom, enquanto ElementPath fornece contexto de diagnóstico estável

Propriedade de divisão e transbordo

Um elemento divisível devolve THPDFLayoutSplit contendo elementos colocados e de transbordo pertencentes ao chamador; PlaceLayoutElement volta a medir a cabeça colocada, desenha-a apenas quando cabe e transfere a cauda para THPDFLayoutOverflow

THPDFLayoutOverflow regista a página de origem e o caminho do elemento, é dono da continuação por omissão e transfere-a explicitamente através de DetachElement

Camadas declarativas de página

Registe chamadas de retorno (callbacks) com AddPageLayer antes de BeginDoc selecionando plkBackground, plkHeader, plkFooter ou plkForeground

Cada chamada de retorno executa exatamente uma vez por página pela ordem fundo, cabeçalho, conteúdo do documento, rodapé e primeiro plano, e fica isolada por um par de guardar e restaurar o estado gráfico

RemovePageLayer remove um registo por identificador, enquanto ClearPageLayers repõe a composição reutilizável antes de a geração do documento começar

THPDFPageLayerRegistration armazena o identificador estável, o tipo de camada e o processador objeto-método usado internamente pela lista de registos ordenada do documento

Descarga imediata de páginas

Defina ImmediateFlushLayout antes de BeginDoc para relatórios cujo número de páginas não é conhecido antecipadamente

Quando uma página fecha, o seu fluxo de conteúdo final comprimido ou não comprimido é movido da memória para um fluxo de ficheiro temporário próprio, enquanto o objeto PDF permanece disponível para a finalização normal da referência cruzada e dos recursos

ImmediateFlushedPageCount e ImmediateFlushedBytes reportam a quantidade de conteúdo encenado e os ficheiros temporários são eliminados quando os fluxos que lhes pertencem são libertados

Paginação de parágrafos

ParagraphIndex := PDF.CreateParagraph(0, jtLeft, 36, 36, 36, 36);
PDF.ConfigureParagraphPagination(ParagraphIndex, True, 2, 2);
PDF.ConfigureParagraphDirection(ParagraphIndex, pdAuto);
PDF.BeginParagraph(ParagraphIndex);
PDF.CurrentParagraph.ShowUnicodeText(BodyText);
PDF.EndParagraph;

Diagnósticos de disposição

THPDFLayoutDiagnostic regista o THPDFLayoutDiagnosticKind, os índices de página de origem e relacionados, o retângulo afetado, a contagem de linhas e um motivo em inglês para cada decisão retida

THPDFLayoutDiagnosticArray é devolvido por GetLayoutDiagnostics, enquanto GetLayoutDiagnostic suporta acesso indexado sem alocar uma cópia

LayoutDiagnosticLimit limita os registos retidos e LayoutDiagnosticDroppedCount reporta decisões descartadas após esse limite

Direção do parágrafo

THPDFParagraphDirection fornece pdAuto, pdLeftToRight e pdRightToLeft

DetectParagraphDirection aplica resolução de primeiro caráter forte em scripts RTL do BMP e do plano suplementar, pelo que prefixos neutros e sequências direcionais secundárias não escolhem a direção base errada

Use ConfigureParagraphDirection para uma definição persistente de parágrafo ou a propriedade THPDFPara.Direction para o parágrafo ativo

Semântica de parágrafo PDF/UA

Root := PDF.AddStructureElement('Document', nil);
Paragraph := PDF.BeginTaggedParagraph(Root, 'en-US', 'Accessible text');
PDF.CurrentPage.TextOut(36, 72, 0, WideString('Accessible text'));
PDF.EndTaggedParagraph;

PDF.BeginPaginationArtifact(pasHeader);
PDF.CurrentPage.TextOut(36, 20, 0, WideString('Running header'));
PDF.EndPaginationArtifact;

BeginTaggedParagraph emite uma sequência padrão de conteúdo marcado /P com um MCID alocado, ligação à árvore parental da página e valores /Lang e /ActualText opcionais

THPDFPaginationArtifactSubtype fornece pasHeader, pasFooter, pasWatermark e pasPageNumber, emitidos como conteúdo /Artifact com /Type /Pagination e o subtipo padrão correspondente

APIs relacionadas