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;
KeepWithNextmută un paragraf atunci când ar consuma ultima linie care ar trebui să rămână pentru conținutul următorMinOrphanLinesîmpiedică lăsarea unui număr prea mic de linii de deschidere în partea de jos a unei paginiMinWidowLinesavansează o rupere atunci când ar rămâne prea puține linii de închidere pe pagina următoare- Continuarea automată păstrează lățimea, înălțimea, fontul, marginile și setările de paragraf ale paginii sursă
- Când
ParaAutoAddPageeste false, debordarea se oprește pe pagina curentă și produce un diagnosticldkOverflow
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
ldkAutomaticPageBreakraportează o continuare obișnuităldkKeepWithNext,ldkOrphanControlșildkWidowControlidentifică constrângerea care a mutat o rupereldkOverflowidentifică conținut oprit de paginarea automată dezactivatăldkImmediateFlushidentifică o pagină închisă, mutată în stocare susținută de fișierldkPageLayeridentifică o trecere declarativă completată a unui strat de pagină
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