PDFium Delphi Component Docs

Unità FPdfLayout

Costruisce piani di layout di flusso misurabili con testate e piè di pagina, colonne, tabelle su più pagine, collegamenti, nodi riutilizzabili, input di markup e semantica tagged-PDF

Eccezioni ed enumerazioni

TipoValori o scopo
EPdfLayoutErrorEccezione sollevata per input di layout non validi, limiti superati e struttura semantica incoerente
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

Record del layout

TipoMembri pubblici
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
TPdfLayoutGridTracksArray dinamico di TPdfLayoutGridTrack
TPdfLayoutGridSizesArray dinamico di dimensioni di traccia risolte
TPdfLayoutTableOptionsCellPadding, BorderWidth, BorderColor, BorderAlpha, RepeatHeaderRows, AllowRowSpanContinuation, MaxContinuationRegions, ContinuationBefore, ContinuationAfter, ContinuationStyle, Default
TPdfLayoutTableTextRunText, Style
TPdfLayoutTableTextRunsArray dinamico di TPdfLayoutTableTextRun
TPdfMarkupOptionsBaseStyle, HeadingScale, MaxInputCharacters, MaxNodes, Default
TPdfLayoutSemanticElementSemantics, ParentElementIndex
TPdfLayoutSemanticElementsArray dinamico di TPdfLayoutSemanticElement
TPdfLayoutCommandKind, PageNumber, Bounds, Text, FontName, FontSize, Color, Alpha, Alignment, Thickness, FileName, Uri, Source, SourcePageIndex, SemanticElementIndex, MarkedContentID, AnnotationIndex
TPdfLayoutCommandsArray dinamico di TPdfLayoutCommand
TPdfLayoutPlanPageSettings, PageCount, Commands, SemanticElements, TextLineCount, RuleCount, RectangleCount, ImageCount, PageXObjectCount, CachedNodeCount, LinkCount, TaggedContentCount, ArtifactCount, MeasuredTextCount, TotalPageReferenceCount, ReservedPageDigits, CacheHitCount, CacheMissCount, ReusedXObjectCount, ColumnCount, ColumnGap

Classi del layout

TipoMembri pubblici
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, i budget MaxCommandCount, MaxStorageBytes, MaxPageCommands, MaxSourceCount e MaxCachedPages e le statistiche di cache CachedPageCount, CacheHitCount, CacheMissCount e 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

Vincoli di impaginazione

Chiamare SetLastItemConstraints dopo aver aggiunto qualsiasi elemento di flusso visibile per tenerlo unito, mantenerlo con l'inizio dell'elemento successivo o forzare un'interruzione di pagina fisica prima o dopo di esso

OrphanLines è il numero minimo di righe di paragrafo trattenute in fondo a una regione e WidowLines è il minimo collocato in cima alla regione successiva; entrambi hanno come predefitto uno per preservare la paginazione esistente

I vincoli si applicano allo stesso modo agli elementi di ruolo paragrafo, collegamento, elenco, figura e tabella, mentre i contenitori solo semantici non hanno geometria e quindi rifiutano i vincoli di paginazione

Un elemento pliTable accetta solo PageBreakBefore e PageBreakAfter; la suddivisione delle righe e la trattenuta dell'inizio della tabella sono controllate dal modello di tabella

Il planner mette in cache le righe andate a capo durante una costruzione, così la predizione keep-with-next e l'emissione finale dei comandi non misurano lo stesso testo due volte

Piani dei comandi suddivisi in pagine

Creare TPdfLayoutPagedPlan su uno TStream dedicato seekable e ridimensionabile, quindi chiamare BuildPagedPlan o passarlo a TPdf.GeneratePagedLayout

Il planner serializza i comandi immediatamente, rilascia ogni risultato di testo andato a capo completato e lascia Plan.Commands vuoto conservando le impostazioni di pagina, gli elementi semantici, i conteggi e i totali stabili di pagina nel sommario

I comandi del corpo e i successivi comandi di testata o piè di pagina sono indicizzati come segmenti di pagina collegati, così MaterializePage ripristina la pagina completa senza scansionare i comandi delle altre pagine

MaxCachedPages limita solo gli array di pagina trattenuti dal piano; i chiamanti che conservano gli array restituiti ne estendono la durata, e PDFium mantiene le pagine autore native finché il documento di destinazione non viene salvato o chiuso

Il formato di archiviazione è uno stato privato di sessione anziché un formato di file portabile, lo stream non deve essere condiviso o modificato esternamente e gli oggetti sorgente referenziati dai page XObject o dai nodi in cache devono sopravvivere al piano paginato

Usare TPdfRandomAccessStore quando i comandi devono restare in memoria fino a una soglia selezionata e poi riversarsi in uno storage temporaneo eliminato alla chiusura

Tabelle su più pagine

Creare TPdfLayoutTable con tracce di griglia fisse, frazionarie o dimensionate sul contenuto, aggiungere righe e celle, quindi chiamare AddTable; il documento memorizza un'istantanea di sua proprietà, così che successive mutazioni del chiamante non possano invalidare una cache di piano esistente

Le righe di intestazione devono essere contigue all'inizio della tabella e si ripetono dopo una transizione di pagina o di colonna quando RepeatHeaderRows è true; gli span delle righe di intestazione non possono estendersi nelle righe del corpo

Una riga del corpo può dividersi se AllowSplit è true; per impostazione predefinita i gruppi transitivi con celle estese su più righe si spostano come unità atomiche e le celle di una normale riga divisa condividono fascia di linee, padding e geometria dei bordi

Impostare AllowRowSpanContinuation a True per continuare un gruppo con celle estese su più righe tra regioni di pagina o colonna; il planner distribuisce l'altezza aggiuntiva sulle righe e sceglie tagli che non attraversano linee di testo o immagini

AllowSplit=False resta un vincolo di riga atomica; vincoli incompatibili o blocchi atomici che non entrano in una regione vuota sollevano EPdfLayoutError anziché tagliare o ripetere contenuto

Le didascalie restano con il blocco di intestazione iniziale e l'inizio minimo del primo gruppo del corpo; le intestazioni ripetute riutilizzano gli stessi elementi originali

Il planner emette un elemento Table, una Caption facoltativa, figli TR e celle TH o TD indipendentemente dal numero di pagine; i comandi di intestazione ripetuti riusano gli indici semantici originali e le celle TD ricevono automaticamente ID di intestazione sovrapposti, a meno che non vengano forniti ID validi espliciti

I bordi delle tabelle sono comandi artifact plcRectangle renderizzati tramite oggetti path nativi di PDFium, mentre il testo di didascalie e celle resta contenuto taggato

Celle con testo misto e immagini

AddTextRun aggiunge testo inline dopo il Text originale della cella; ogni run ha font, dimensione, colore, alpha, altezza di riga e politica di divisione delle parole lunghe propri

Il testo misto va a capo in base alle larghezze misurate, mantiene unite le coppie surrogate UTF-16 quando divide parole lunghe ed emette oggetti di testo nativi separati su una baseline condivisa; l'allineamento orizzontale deriva dallo Style base della cella

Spaziatura dei paragrafi e flag keep-together dei run non introducono ulteriori blocchi di paragrafo; usare righe separate o elementi di layout ordinari se servono questi vincoli

SetImage configura un'immagine da file per cella, sopra il testo al padding sinistro; un'altra chiamata la sostituisce

Fornire un'altezza positiva esplicita e una larghezza entro lo spazio interno della cella; zero usa tutta la larghezza interna e il chiamante controlla il rapporto d'aspetto tramite le dimensioni fornite

L'immagine è indivisibile nella continuazione ed è emessa una sola volta nella posizione originale; il file deve restare disponibile fino alla generazione e file mancanti o immagini non supportate causano rollback delle pagine aggiunte

È richiesta una descrizione alternativa non vuota; l'immagine diventa un figlio Figure del TH o TD originale e tutti i frammenti di testo restano associati alla cella

Tra pagine, il TH o TD originale riceve i riferimenti al marked content continuato e mantiene RowSpan, ColumnSpan e associazioni con le intestazioni; non viene creata una cella logica duplicata

Subtotali ed etichette di continuazione

AddSubtotalRow crea una riga atomica del corpo usando etichetta, valore formattato e stile del chiamante; con più colonne l'etichetta occupa tutte tranne quella finale del valore

L'helper imposta KeepWithPrevious=True affinché un subtotale non diventi la prima riga isolata di una continuazione; i valori sono forniti dal chiamante e non viene eseguita alcuna aggregazione numerica

ContinuationAfter appare alla fine di una regione che continua e ContinuationBefore dopo eventuali intestazioni ripetute nella regione successiva

Entrambe le etichette sono vuote per impostazione predefinita, usano ContinuationStyle, devono stare su una riga e riservano la propria altezza; la prima regione non ha etichetta precedente e l'ultima non ha quella successiva

Etichette e bordi sono artifact e non cambiano la gerarchia semantica della tabella; placeholder di pagina come {page} e {pages} usano il normale resolver di testo del layout

Dichiarazioni e limiti delle tabelle avanzate

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;

Usare TPdfLayoutTableOptions.Default prima di modificare le opzioni; AllowRowSpanContinuation è False per impostazione predefinita e MaxContinuationRegions vale 10,000 regioni di pagina o colonna, con massimo configurabile di 100,000

Le tabelle mantengono i limiti di 256 colonne, 100,000 righe e 100,000 elementi semantici; il testo totale delle celle è limitato a 8,000,000 unità di codice UTF-16

Una cella di testo misto accetta al massimo 1,024 run aggiunti, 1,000,000 unità di codice UTF-16, 100,000 righe e 100,000 frammenti; un carattere o una parola con divisione delle parole lunghe disabilitata che supera lo spazio disponibile viene rifiutato

Un gruppo di righe continuato è limitato a 10,000 celle; limiti delle regioni e ricerche di taglio limitate evitano paginazione illimitata e le immagini devono entrare nella regione del corpo rimasta dopo intestazioni, etichette e padding

Snapshot della tabella di proprietà del sistema e cache del piano includono stili dei run, dimensioni delle immagini, testo alternativo, mantenimento dei subtotali e impostazioni di continuazione; modifiche successive alla tabella del chiamante non cambiano lo snapshot

Routine di primo livello

RoutineDescrizione
ResolveLayoutTextEspande i segnaposto dei numeri di pagina usando la larghezza di cifre riservata
PdfLayoutSemanticRoleNameRestituisce il nome di struttura tagged-PDF per un ruolo semantico
BuildTaggedLayoutPdfApplica un piano di layout completato e una struttura tagged ai byte di un PDF sorgente
ResolvePdfLayoutGridTracksRisolve le tracce di griglia fisse, frazionarie e dimensionate sul contenuto entro la larghezza disponibile

Vedere anche