Deklarativt layout-DOM

HPDFLayoutDOM bygger gjenbrukbare dokumentkomponenter over THPDFLayoutElement, MeasureLayoutElement, PlaceLayoutElement, eide overløpsfragmenter og ImmediateFlushLayout

Dokument- og seksjonskomposisjon

Document := THPDFDOMDocument.Create;
Renderer := THPDFDOMRenderer.Create;
try
  Section := Document.AddSection;
  Section.PageWidth := 595.28;
  Section.PageHeight := 841.89;
  Section.Header := THPDFDOMText.Create('Quarterly report');
  Section.Footer := THPDFDOMText.Create('Confidential');
  Section.Body.Style.Padding := 12;
  Section.Body.Style.Spacing := 8;
  Section.Body.AddText(BodyText, 'Narrative');

  PDF.OutputStream := Output;
  PDF.ImmediateFlushLayout := True;
  Statistics := Renderer.Render(Document, PDF);
finally
  Renderer.Free;
  Document.Free;
end;

THPDFDOMDocument eier sine seksjoner, hver THPDFDOMSection eier sin kropp, topptekst, bunntekst og stil, og hver stakk eller beholder eier komponentene som er festet til den

THPDFDOMRenderer.Render starter og avslutter måldokumentet, oppretter en fersk side for hver nye seksjon, gjentar seksjonsmøbler på fortsettelsessider og returnerer statistikk for side, plassering, deling, møbler, struktur, merket innhold, artefakt og maksimum fortsettelse

Sett alle THotPDF-utdata-, komprimerings-, konformans-, lag- og umiddelbar-flush-alternativer før du kaller Render

GenerateStructure er som standard True, så rendereren bygger også et fortsettelsesikkert logisk strukturtre og bruker THPDFDOMDocument.Language når målet ikke har noe språk

Komponenter

Alle komponenter eksponerer stabile Name, Path, Style, Clone, Measure, Draw og Split-kontrakter samt semantisk rolle, språk, alternativ tekst, erstatningstekst, utvidelsestekst og artefakt-overstyringer

Kroppstraversering på toppnivå er lineær og kloner ikke komponenter; tekst- og tabellfortsettelseer beholder tegnområde- eller radskive-metadata i stedet for å kopiere hele innholdstreet

Stilarv

THPDFDOMStyle løser fontnavn, størrelse, stiler, tekstfarge, bakgrunn, kant, utfylling, mellomrom og linjehøyde gjennom sin overordnede kjede

En seksjonsstil er forelder til sin kropp og møbler, en stakk- eller beholderstil er forelder til sine barn, og tabellstil flyter gjennom rader til celler

Bare eksplisitt tildelte verdier overstyrer forelderen; Clear fjerner lokale tildelinger og foreldrekoblingen, mens Assign kopierer lokale tildelinger uten å kopiere eierskap eller slektskap

Foreldre-kjeder dypere enn 64 nivåer avvises som sykliske eller ubegrensede

Fabrikker for gjenbrukbare komponenter

THPDFDOMComponentFactory er en anonym funksjon som oppretter én kaller-eid THPDFDOMComponent-instans per påkalling

Document.RegisterComponent('notice',
  function: THPDFDOMComponent
  begin
    Result := THPDFDOMContainer.Create(
      THPDFDOMText.Create('Reusable notice'));
  end);

Section.Body.Add(Document.CreateComponent('notice'));

Fabrikknavn er uten skille på store og små bokstaver og unike, hvert kall må returnere en ny komponentinstans, og den mottakende beholderen tar eierskap etter Add

Bruk SetHeaderClone, SetFooterClone eller Clone når én deklarert komponent må gjenbrukes på flere eierskapssteder

Tabeller med gjentatt topptekst

Table := THPDFDOMTable.Create('Orders');
Table.AddColumn(1);
Table.AddColumn(3);
Header := Table.AddRow(18, True);
Header[0].Text := 'ID';
Header[1].Text := 'Description';

Row := Table.AddRow(22);
Row[0].Text := '1001';
Row[1].Text := 'Bounded streaming layout';
Section.Body.Add(Table);

Topptekst-rader må være sammenhengende og gå foran kroppsrader, positive kolonnevekter deler tilgjengelig bredde, og radehøyder er eksplisitte positive verdier

Når RepeatHeaders er sann, krever en deling rom for alle ledende topptekst-rader og minst én kroppsrad, noe som forhindrer fortsettelsesside som bare er topptekst

Paginering og feilgrenser

Rendereren remåler først hver komponent mot gjenværende kroppsrektangel, flytter et udelbart minimumsfragment til en fersk side når mulig, og delegerer enhver gyldig deling til PlaceLayoutElement

Et element som ikke får plass på en tom kroppsside reiser et unntak med sin stabile elementbane i stedet for stille å forkaste innhold

MaximumContinuationDepth er som standard 100 000 og avgrenser feilformede komponenter som gjentatte ganger returnerer en ikke-bidragende fortsettelse

Seksjons-sideilimensjoner må være positive, marger og møbel-avstander kan ikke være negative, og topptekst pluss bunntekst-geometri må etterlate et positivt kroppsrektangel

C++Builder

std::unique_ptr<THPDFDOMDocument> document(new THPDFDOMDocument());
THPDFDOMSection* section = document->AddSection();
section->Header = new THPDFDOMText(L"Report", "Header");
section->Body->AddText(L"Declarative content", "BodyText");

std::unique_ptr<THPDFDOMRenderer> renderer(new THPDFDOMRenderer());
THPDFDOMRenderStatistics statistics =
    renderer->Render(document.get(), pdf.get());

Den genererte HPDFLayoutDOM.hpp eksporterer de samme dokument-, stil-, komponent-, tabell-, seksjons-, renderer- og statistikk-overflatene

Relaterte API-er