PDFium Component Docs

FPdfLayout Moduł

Buduje mierzalne plany układu przepływowego z ozdobnikami stron, kolumnami, tabelami międzystronicowymi, łączami, węzłami wielokrotnego użytku, wejściem znaczników i semantyką tagged-PDF

Exceptions and enumerations

TypeValues or purpose
EPdfLayoutErrorWyjątek zgłaszany dla nieprawidłowych danych układu, przekroczonych limitów i niespójnej struktury semantycznej
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
TPdfLayoutGridTracksTablica dynamiczna TPdfLayoutGridTrack
TPdfLayoutGridSizesTablica dynamiczna rozwiązanych rozmiarów ścieżek
TPdfLayoutTableOptionsCellPadding, BorderWidth, BorderColor, BorderAlpha, RepeatHeaderRows, AllowRowSpanContinuation, MaxContinuationRegions, ContinuationBefore, ContinuationAfter, ContinuationStyle, Default
TPdfLayoutTableTextRunText, Style
TPdfLayoutTableTextRunsTablica dynamiczna TPdfLayoutTableTextRun
TPdfMarkupOptionsBaseStyle, HeadingScale, MaxInputCharacters, MaxNodes, Default
TPdfLayoutSemanticElementSemantics, ParentElementIndex
TPdfLayoutSemanticElementsTablica dynamiczna TPdfLayoutSemanticElement
TPdfLayoutCommandKind, PageNumber, Bounds, Text, FontName, FontSize, Color, Alpha, Alignment, Thickness, FileName, Uri, Source, SourcePageIndex, SemanticElementIndex, MarkedContentID, AnnotationIndex
TPdfLayoutCommandsTablica dynamiczna 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, budżety MaxCommandCount, MaxStorageBytes, MaxPageCommands, MaxSourceCount i MaxCachedPages oraz statystyki bufora CachedPageCount, CacheHitCount, CacheMissCount i 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

Wywołaj SetLastItemConstraints po dodaniu dowolnego widocznego elementu przepływu, aby trzymać go razem, trzymać z początkiem następnego elementu albo wymusić fizyczny podział strony przed nim lub po nim

OrphanLines to minimalna liczba wierszy akapitu pozostawiona na dole obszaru, a WidowLines to minimum umieszczane na górze następnego obszaru; oba domyślnie wynoszą jeden, aby zachować istniejący podział na strony

Ograniczenia działają tak samo dla elementów ról akapitu, łącza, listy, ryciny i tabeli, podczas gdy kontenery wyłącznie semantyczne nie mają geometrii i dlatego odrzucają ograniczenia podziału

Element pliTable przyjmuje tylko PageBreakBefore i PageBreakAfter; dzielenie wierszy i utrzymywanie początku tabeli steruje model tabeli

Planista buforuje zawinięte wiersze podczas budowy, więc predykcja keep-with-next i finalna emisja poleceń nie mierzą tego samego tekstu dwa razy

Paged command plans

Utwórz TPdfLayoutPagedPlan nad dedykowanym przewijalnym i zmiennym rozmiarowo TStream, a następnie wywołaj BuildPagedPlan albo przekaż go do TPdf.GeneratePagedLayout

Planista serializuje polecenia natychmiast, zwalnia każdy ukończony wynik zawiniętego tekstu i pozostawia Plan.Commands puste, zachowując w podsumowaniu ustawienia stron, elementy semantyczne, liczniki i stabilne sumy stron

Polecenia treści i późniejsze polecenia nagłówka lub stopki są indeksowane jako połączone segmenty stron, więc MaterializePage odtwarza kompletną stronę bez skanowania poleceń innych stron

MaxCachedPages ogranicza tylko tablice stron zachowywane przez plan; wywołujący, którzy zatrzymują zwrócone tablice, wydłużają ich życie, a PDFium zachowuje natywne strony autorskie do momentu zapisania lub zamknięcia dokumentu docelowego

Format magazynu to prywatny stan sesji, a nie przenośny format pliku, strumień nie może być współdzielony ani modyfikowany zewnętrznie, a obiekty źródłowe przywoływane przez page XObjecty albo buforowane węzły muszą przeżyć stronicowany plan

Użyj TPdfRandomAccessStore, gdy polecenia mają pozostać w pamięci do wybranego progu, a potem przelewać się do magazynu tymczasowego usuwanego przy zamknięciu

Cross-page tables

Utwórz TPdfLayoutTable ze stałymi, ułamkowymi albo dopasowanymi do treści ścieżkami siatki, dodaj wiersze i komórki, a potem wywołaj AddTable; dokument przechowuje posiadaną migawkę, więc późniejsze mutacje wywołującego nie mogą unieważnić istniejącego bufora planu

Wiersze nagłówkowe muszą być ciągłe na początku tabeli i powtarzają się po przejściu strony lub kolumny, gdy RepeatHeaderRows ma wartość true; rozpiętości wiersza nagłówkowego nie mogą sięgać w wiersze treści

Wiersz treści może się dzielić tylko wtedy, gdy AllowSplit ma wartość true i nie należy do grupy łączonej rozpiętością wiersza; wszystkie komórki w podzielonym kawałku współdzielą ten sam pas wierszy, dopełnienie i geometrię obramowania

Ustaw AllowRowSpanContinuation na True, aby grupa łączona rozpiętością wiersza mogła przechodzić przez obszary stron lub kolumn; planista rozdziela dodatkową wysokość rozpiętości na jej wiersze i wybiera cięcia, które nie przecinają ani wiersza tekstu, ani obrazu

AllowSplit=False pozostaje ograniczeniem wiersza atomowego; niezgodne ograniczenia wierszy albo blok atomowy, który nie mieści się w świeżym obszarze, zgłasza EPdfLayoutError, zamiast przycinać lub powtarzać treść

Podpisy pozostają z powtarzanym blokiem nagłówka i minimalnym początkiem pierwszej grupy treści, podczas gdy przechodnie grupy łączone rozpiętością wiersza przesuwają się jako jedna jednostka atomowa

Planista emituje jeden element Table, opcjonalny Caption, potomków TR oraz komórki TH lub TD niezależnie od liczby stron; powtarzane polecenia nagłówka ponownie używają pierwotnych indeksów semantycznych, a komórki TD automatycznie otrzymują nakładające się identyfikatory nagłówków, chyba że podano jawne poprawne identyfikatory

Obramowania tabel to polecenia artefaktów plcRectangle renderowane przez natywne obiekty ścieżek PDFium, podczas gdy tekst podpisu i komórek pozostaje treścią oznaczoną

Mixed text and image cells

AddTextRun dopisuje tekst w linii po pierwotnym Text komórki; każde wstawienie ma własny font, rozmiar czcionki, kolor, krycie, wysokość wiersza i politykę łamania długich słów

Tekst mieszany zawija się według zmierzonych szerokości, zachowuje pary zastępcze UTF-16 przy łamaniu długiego słowa i emituje osobne natywne obiekty tekstowe ze wspólną linią bazową; wyrównanie poziome pochodzi z bazowego Style komórki

Odstępy akapitu i flagi trzymania razem na poziomie wstawienia nie wprowadzają dodatkowych bloków akapitów; użyj osobnych wierszy albo zwykłych elementów układu, gdy te ograniczenia są potrzebne

SetImage konfiguruje jeden obraz oparty na pliku na komórkę, umieszczony nad jej tekstem przy lewym dopełnieniu; kolejne wywołanie zastępuje ten obraz

Podaj jawną dodatnią wysokość i szerokość mieszczącą się w wewnętrznej szerokości komórki; szerokość zero używa całej wewnętrznej szerokości, a proporcje obrazu steruje wywołujący przez dostarczone wymiary

Obraz jest niepodzielny podczas kontynuacji i jest emitowany raz w swojej pierwotnej pozycji; jego plik musi pozostać dostępny do generowania, a brakujący plik lub nieobsługiwany obraz powoduje wycofanie dopisanych stron przez generowanie

Wymagany jest niepusty opis alternatywny; obraz staje się potomkiem Figure swojego pierwotnego TH lub TD, a wszystkie fragmenty tekstu pozostają powiązane z tą komórką

Między stronami pierwotny TH lub TD otrzymuje odwołania kontynuowanej treści oznaczonej i zachowuje swoje RowSpan, ColumnSpan oraz powiązania z nagłówkami; nie powstaje zduplikowana komórka logiczna

Subtotals and continuation labels

AddSubtotalRow tworzy atomowy wiersz treści z etykietą, sformatowaną wartością i stylem wywołującego; przy wielu kolumnach etykieta obejmuje wszystkie oprócz ostatniej kolumny wartości

Pomocnik ustawia KeepWithPrevious=True, aby sum częściowa nie stała się odosobnionym pierwszym wierszem na kontynuacji; wartości dostarcza wywołujący i nie jest wykonywana żadna agregacja liczbowa

ContinuationAfter jest pokazywane na końcu obszaru, który się kontynuuje, a ContinuationBefore jest pokazywane po powtarzanych nagłówkach w następnym obszarze

Obie etykiety domyślnie są puste, używają ContinuationStyle, muszą zmieścić się w jednym wierszu i rezerwują własną wysokość; pierwszy obszar nie ma etykiety przed, a ostatni nie ma etykiety po

Etykiety i obramowania są artefaktami, dzięki czemu hierarchia semantyczna tabeli pozostaje niezmieniona; placeholdery stron, takie jak {page} i {pages}, używają zwykłego resolvera tekstu układu

Advanced table declarations and limits

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;

Przed nadpisaniem opcji użyj TPdfLayoutTableOptions.Default; AllowRowSpanContinuation domyślnie ma False, a MaxContinuationRegions domyślnie 10,000 obszarów stron lub kolumn, z konfigurowalnym pułapem 100,000

Tabele zachowują limity 256 kolumn, 100,000 wierszy i 100,000 elementów semantycznych; łączny tekst komórek jest ograniczony do 8,000,000 jednostek kodu UTF-16

Komórka z tekstem mieszanym przyjmuje najwyżej 1,024 dopisane wstawienia, 1,000,000 jednostek kodu UTF-16, 100,000 wierszy i 100,000 fragmentów; pojedynczy znak albo słowo z wyłączonym łamaniem długich słów, które przekracza dostępną szerokość, jest odrzucane

Kontynuowana grupa wierszy jest ograniczona do 10,000 komórek; budżety obszarów i ograniczone przeszukiwania cięć zapobiegają nieograniczonemu dzieleniu stron, a obrazy muszą mieścić się w dostępnym obszarze treści po nagłówkach, etykietach i dopełnieniu

Posiadana migawka tabeli i bufor planu obejmują style wstawień, wymiary obrazów, tekst alternatywny, zachowanie sum częściowych i ustawienia kontynuacji; późniejsze zmiany tabeli wywołującego nie zmieniają tej migawki

Top-level routines

RoutineDescription
ResolveLayoutTextRozwija placeholdery numerów stron przy użyciu zarezerwowanej szerokości cyfr
PdfLayoutSemanticRoleNameZwraca nazwę struktury tagged-PDF dla roli semantycznej
BuildTaggedLayoutPdfStosuje ukończony plan układu i strukturę oznaczoną do bajtów PDF źródła
ResolvePdfLayoutGridTracksRozwiązuje stałe, ułamkowe i dopasowane do treści ścieżki siatki w dostępnym zakresie szerokości

See Also