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;
KeepWithNextmove um parágrafo quando este consumiria a última linha que deve permanecer para o conteúdo seguinteMinOrphanLinesimpede que fiquem muito poucas linhas iniciais no fundo de uma páginaMinWidowLinesavança uma quebra quando restariam muito poucas linhas finais na página seguinte- A continuação automática preserva a largura, altura, tipo de letra, margens e definições de parágrafo da página de origem
- Quando
ParaAutoAddPageé falso, o transbordo para na página atual e produz um diagnósticoldkOverflow
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
ldkAutomaticPageBreakreporta uma continuação comumldkKeepWithNext,ldkOrphanControleldkWidowControlidentificam a restrição que moveu uma quebraldkOverflowidentifica conteúdo parado por paginação automática desativadaldkImmediateFlushidentifica uma página fechada movida para armazenamento com suporte de ficheiroldkPageLayeridentifica uma passagem declarativa de camada de página concluída
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