Layout în flux constrâns

HotPDF poate măsura elemente reutilizabile fără a desena, poate împărți paragrafe, rânduri, containere și elemente personalizate în continuări gestionate de apelant, poate compune straturi reutilizabile de pagină, poate stoca paginile finalizate în memorie susținută de fișier, poate aplica constrângeri de rupere de pagină pentru paragrafe și poate expune diagnosticare limitată

Contract reutilizabil de măsurare și desen

Derivați din THPDFLayoutElement și implementați Measure fără efecte secundare plus Draw; măsurarea primește doar THPDFLayoutConstraints, deci nu dispune de nicio suprafață de desen pentru pagină sau document

MeasureLayoutElement validează dimensiunile nenegative și calculează Fits în mod central pe baza acelorași constrângeri de lățime și înălțime utilizate pentru plasare

THPDFLayoutElementKind permite ElementKind să clasifice o implementare ca lekParagraph, lekRow, lekContainer sau lekCustom, în timp ce ElementPath furnizează un context de diagnosticare stabil

Proprietatea despărțirii și a debordării

Un element despărțibil returnează THPDFLayoutSplit care conține elementele plasate și de debordare gestionate de apelant; PlaceLayoutElement remăsoară capul plasat, îl desenează doar când se încadrează și transferă coada în THPDFLayoutOverflow

THPDFLayoutOverflow înregistrează pagina sursă și calea elementului, deține continuarea în mod implicit și o transferă explicit prin DetachElement

Straturi declarative de pagină

Înregistrați apeluri inverse cu AddPageLayer înainte de BeginDoc selectând plkBackground, plkHeader, plkFooter sau plkForeground

Fiecare apel invers rulează exact o dată per pagină, în ordinea fundal, antet, conținut-document, subsol și prim-plan, și este izolat printr-o pereche de salvare și restaurare a stării grafice

RemovePageLayer elimină o înregistrare după identificator, în timp ce ClearPageLayers reinițializează compunerea reutilizabilă înainte de începerea generării documentului

THPDFPageLayerRegistration stochează identificatorul stabil, tipul de strat și gestionarul obiect-metodă utilizat intern de lista ordonată de înregistrări a documentului

Golirea imediată a paginilor

Setați ImmediateFlushLayout înainte de BeginDoc pentru rapoarte ale căror număr de pagini nu este cunoscut în avans

La închiderea unei pagini, fluxul său final de conținut, comprimat sau necomprimat, este mutat din memorie într-un flux de fișier temporar propriu, în timp ce obiectul PDF rămâne disponibil pentru finalizarea normală a referințelor încrucișate și a resurselor

ImmediateFlushedPageCount și ImmediateFlushedBytes raportează cantitatea de conținut stocată, iar fișierele temporare sunt șterse atunci când fluxurile care le dețin sunt eliberate

Paginarea paragrafelor

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;

Diagnosticare de layout

THPDFLayoutDiagnostic înregistrează THPDFLayoutDiagnosticKind, indicii paginilor sursă și corelate, dreptunghiul afectat, numărul de linii și un motiv în limba engleză pentru fiecare decizie reținută

THPDFLayoutDiagnosticArray este returnat de GetLayoutDiagnostics, în timp ce GetLayoutDiagnostic oferă acces indexat fără a aloca o copie

LayoutDiagnosticLimit limitează înregistrările reținute, iar LayoutDiagnosticDroppedCount raportează deciziile eliminate după acest plafon

Direcția paragrafului

THPDFParagraphDirection oferă pdAuto, pdLeftToRight și pdRightToLeft

DetectParagraphDirection aplică rezoluția primului caracter puternic în toate scripturile RTL din planul BMP și cele suplimentare, astfel încât prefixele neutre și execuțiile direcționale secundare nu aleg direcția de bază greșită

Folosiți ConfigureParagraphDirection pentru o setare persistentă de paragraf sau proprietatea THPDFPara.Direction pentru paragraful activ

Semantica paragrafelor 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 o secvență standard de conținut marcat /P cu un MCID alocat, conectare la arborele-părinte al paginii și valori opționale /Lang și /ActualText

THPDFPaginationArtifactSubtype oferă pasHeader, pasFooter, pasWatermark și pasPageNumber, emise ca conținut /Artifact cu /Type /Pagination și subtipul standard corespunzător

API-uri corelate