PDFium Component Docs

FPdfLayout unit

Bouwt meetbare flow-layoutplannen met paginamobilier, kolommen, tabellen over pagina's heen, links, herbruikbare knooppunten, markup-invoer en tagged-PDF-semantiek

Exceptions and enumerations

TypeValues or purpose
EPdfLayoutErrorExceptie verhoogd voor ongeldige layoutinvoer, overschreden limieten en inconsistente semantische structuur
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
TPdfLayoutGridTracksDynamische array van TPdfLayoutGridTrack
TPdfLayoutGridSizesDynamische array van geresolveerde trackgroottes
TPdfLayoutTableOptionsCellPadding, BorderWidth, BorderColor, BorderAlpha, RepeatHeaderRows, AllowRowSpanContinuation, MaxContinuationRegions, ContinuationBefore, ContinuationAfter, ContinuationStyle, Default
TPdfLayoutTableTextRunText, Style
TPdfLayoutTableTextRunsDynamische array van TPdfLayoutTableTextRun
TPdfMarkupOptionsBaseStyle, HeadingScale, MaxInputCharacters, MaxNodes, Default
TPdfLayoutSemanticElementSemantics, ParentElementIndex
TPdfLayoutSemanticElementsDynamische array van TPdfLayoutSemanticElement
TPdfLayoutCommandKind, PageNumber, Bounds, Text, FontName, FontSize, Color, Alpha, Alignment, Thickness, FileName, Uri, Source, SourcePageIndex, SemanticElementIndex, MarkedContentID, AnnotationIndex
TPdfLayoutCommandsDynamische array van 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, de budgetten MaxCommandCount, MaxStorageBytes, MaxPageCommands, MaxSourceCount en MaxCachedPages, en de cachestatistieken CachedPageCount, CacheHitCount, CacheMissCount en 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

Roep SetLastItemConstraints aan na het toevoegen van elk zichtbaar flow-item om het bij elkaar te houden, samen met het begin van het volgende item, of om een fysieke paginabreak voor of na het item af te dwingen

OrphanLines is het minimum aantal alinearegels dat onderaan een regio behouden blijft en WidowLines is het minimum dat bovenaan de volgende regio wordt geplaatst; beide staan standaard op één om bestaande paginering te bewaren

Constraints gelden in gelijke mate voor items met de rol alinea, link, lijst, figuur en tabel, terwijl semantic-only containers geen geometrie hebben en daarom pagineringsconstraints afwijzen

Een pliTable-item accepteert alleen PageBreakBefore en PageBreakAfter; rijopsplitsing en het vasthouden van de tabelstart worden door het tabelmodel gestuurd

De planner cachet gewrapte regels tijdens een build, zodat keep-with-next-voorspelling en de uiteindelijke commando-uitvoer niet dezelfde tekst tweemaal meten

Paged command plans

Maak een TPdfLayoutPagedPlan aan over een aparte seekable en resizable TStream, en roep daarna BuildPagedPlan aan of geef het plan door aan TPdf.GeneratePagedLayout

De planner serialiseert commando's onmiddellijk, geeft elk voltooid gewrappt-tekstresultaat vrij en laat Plan.Commands leeg terwijl pagina-instellingen, semantische elementen, tellingen en stabiele paginatotalen in de samenvatting behouden blijven

Body-commando's en latere header- of footer-commando's worden geïndexeerd als gekoppelde paginasegmenten, zodat MaterializePage de complete pagina herstelt zonder commando's van andere pagina's te doorzoeken

MaxCachedPages begrenst alleen de pagina-arrays die het plan vasthoudt; aanroepers die teruggegeven arrays bewaren verlengen hun levensduur, en PDFium houdt native authored pagina's vast totdat het doeldocument is opgeslagen of gesloten

Het opslagformaat is privé-sessiestatus in plaats van een draagbaar bestandsformaat, de stream mag niet extern worden gedeeld of gewijzigd, en bronobjecten waarnaar page XObjects of gecachte knooppunten verwijzen moeten langer bestaan dan het paged plan

Gebruik TPdfRandomAccessStore wanneer commando's tot een gekozen drempel in het geheugen moeten blijven en daarna moeten overlopen naar delete-on-close tijdelijke opslag

Cross-page tables

Maak een TPdfLayoutTable met vaste, fractionele of contentgestuurde gridtracks, voeg rijen en cellen toe en roep daarna AddTable aan; het document bewaart een eigen momentopname zodat latere mutaties van de aanroeper een bestaande plancache niet ongeldig kunnen maken

Headerrijen moeten aaneengesloten aan het begin van de tabel staan en worden herhaald na een pagina- of kolomovergang wanneer RepeatHeaderRows True is; headerrij-spans mogen niet doorlopen in bodyrijen

Een bodyrij kan worden gesplitst wanneer AllowSplit True is; standaard bewegen transitieve rijspan-groepen als één atomaire eenheid, en cellen in een gewone gesplitste rij delen dezelfde regelband, padding- en randgeometrie

Zet AllowRowSpanContinuation op True om een rijspan-groep te laten doorlopen over pagina- of kolomregio's; de planner verdeelt extra spanhoogte over de rijen van de groep en kiest snijpunten die noch een tekstregel noch een afbeelding doorsnijden

AllowSplit=False blijft een atomaire-rijbeperking; incompatibele rijbeperkingen of een atomaire blok dat niet in een verse regio past, verhogen EPdfLayoutError in plaats van content af te kappen of te herhalen

Bijschriften blijven bij het initiële headerblok en het minimale begin van de eerste bodygroep; herhaalde headers hergebruiken dezelfde oorspronkelijke headerelementen

De planner levert één Table-element, een optionele Caption, TR-children en TH- of TD-cellen, ongeacht het pagina-aantal; herhaalde header-commando's hergebruiken de oorspronkelijke semantische indexen, en TD-cellen krijgen automatisch overlappende header-ID's tenzij expliciete geldige ID's worden aangeleverd

Tabelranden zijn artifact-plcRectangle-commando's die via native PDFium-padobjecten worden gerenderd, terwijl bijschrift- en celtekst getagde content blijven

Gemengde tekst- en afbeeldingscellen

AddTextRun voegt inline tekst toe na de oorspronkelijke Text van de cel; elke run heeft zijn eigen lettertype, lettergrootte, kleur, alpha, regelhoogte en beleid voor het afbreken van lange woorden

Gemengde tekst wordt gewrapt met gemeten breedtes, behoudt UTF-16-surrogaatparen bij het afbreken van een lang woord en emitteert afzonderlijke native tekstobjecten met een gedeelde baseline; horizontale uitlijning komt van de basis-Style van de cel

Alineaspacing en keep-together-vlaggen op runniveau introduceren geen extra alineablokken; gebruik aparte rijen of gewone layoutitems wanneer die beperkingen nodig zijn

SetImage configureert één bestandsgebaseerde afbeelding per cel, gepositioneerd boven de tekst bij de linker padding; een nieuwe aanroep vervangt die afbeelding

Geef een expliciete positieve hoogte en een breedte die binnen de binnenste celbreedte past; een breedte van nul gebruikt de volledige binnenbreedte, en de aanroeper bepaalt de beeldverhouding via de meegegeven afmetingen

De afbeelding is ondeelbaar tijdens continuatie en wordt één keer op zijn oorspronkelijke positie geëmitteerd; het bestand moet beschikbaar blijven tot de generatie, en een ontbrekend bestand of een niet-ondersteunde afbeelding zorgt dat de generatie toegevoegde pagina's terugdraait

Een niet-lege alternatieve beschrijving is vereist; de afbeelding wordt een Figure-child van zijn oorspronkelijke TH of TD, terwijl alle tekstfragmenten aan die cel gekoppeld blijven

Over pagina's heen ontvangt de oorspronkelijke TH of TD de voortgezette marked-content-referenties en behoudt hij zijn RowSpan, ColumnSpan en headerkopelingen; er wordt geen dubbele logische cel aangemaakt

Subtotalen en continuatielabels

AddSubtotalRow maakt een atomaire bodyrij met het label, de opgemaakte waarde en de stijl van de aanroeper; bij meerdere kolommen overspant het label alle kolommen behalve de laatste waardekolom

Het hulpje zet KeepWithPrevious=True zodat een subtotaal geen geïsoleerde eerste rij op een vervolg wordt; waarden worden door de aanroeper aangeleverd en er wordt geen numerieke aggregatie uitgevoerd

ContinuationAfter wordt getoond aan het einde van een regio die doorloopt, en ContinuationBefore wordt getoond na eventuele herhaalde headers in de volgende regio

Beide labels zijn standaard leeg, gebruiken ContinuationStyle, moeten op één regel passen en reserveren hun eigen hoogte; de eerste regio heeft geen before-label en de laatste regio heeft geen after-label

Labels en randen zijn artifacts, waardoor de semantische tabelhiërarchie ongewijzigd blijft; pagina-placeholders zoals {page} en {pages} gebruiken de gewone layouttekstresolver

Geavanceerde tabeldeclaraties en limieten

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;

Gebruik TPdfLayoutTableOptions.Default voordat je opties overschrijft; AllowRowSpanContinuation staat standaard op False en MaxContinuationRegions staat standaard op 10,000 pagina- of kolomregio's, met een instelbaar plafond van 100,000

Tabellen behouden de limieten van 256 kolommen, 100,000 rijen en 100,000 semantische elementen; de totale celtekst is beperkt tot 8,000,000 UTF-16-code-eenheden

Een cel met gemengde tekst accepteert hooguit 1,024 toegevoegde runs, 1,000,000 UTF-16-code-eenheden, 100,000 regels en 100,000 fragmenten; een afzonderlijk teken of een woord met uitgeschakeld lange-woorden-afbreken dat de beschikbare breedte overschrijdt, wordt afgewezen

Een doorlopende rijgroep is beperkt tot 10,000 cellen; regiobudgetten en begrensde snijzoekacties voorkomen onbegrensde paginering, en afbeeldingen moeten binnen de beschikbare body-regio passen na headers, labels en padding

De eigen tabelmomentopname en plancache bevatten runstijlen, afbeeldingsafmetingen, alternatieve tekst, subtotaalbehoud en continuatie-instellingen; latere wijzigingen aan de tabel van de aanroeper veranderen die momentopname niet

Top-level routines

RoutineDescription
ResolveLayoutTextWerkt paginanummer-placeholders bij met de gereserveerde cijferbreedte
PdfLayoutSemanticRoleNameGeeft de tagged-PDF-structuurnaam voor een semantische rol terug
BuildTaggedLayoutPdfPast een voltooid layoutplan en tagged structure toe op PDF-bronbytes
ResolvePdfLayoutGridTracksResolveert vaste, fractionele en contentgestuurde gridtracks binnen de beschikbare breedte

See Also