Deklarativt layout-DOM

HPDFLayoutDOM bygger genanvendelige dokumentkomponenter oven på THPDFLayoutElement, MeasureLayoutElement, PlaceLayoutElement, ejede overløbsfragmenter og ImmediateFlushLayout

Dokument- og sektionssammensætning

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 ejer sine sektioner, hver THPDFDOMSection ejer sin brødtekst, sit sidehoved, sin sidefod og sin stil, og hver stak eller container ejer de komponenter, der er knyttet til den

THPDFDOMRenderer.Render starter og afslutter måldokumentet, opretter en ny side for hver ny sektion, gentager sektionsinventar på fortsættelsessider og returnerer statistik for side, placering, opdeling, inventar, struktur, markeret indhold, artefakt og maksimal fortsættelse

Angiv alle THotPDF-indstillinger for output, komprimering, konformitet, lag og øjeblikkelig flush før kaldet til Render

GenerateStructure er som standard True, så rendereren også bygger et fortsættelsessikkert logisk strukturtræ og bruger THPDFDOMDocument.Language, når målet ikke har noget sprog

Komponenter

Alle komponenter eksponerer stabile kontrakter for Name, Path, Style, Clone, Measure, Draw og Split samt semantisk rolle, sprog, alternativ tekst, erstatningstekst, udvidelsestekst og artefaktoverrides

Gennemløb af brødtekst på øverste niveau er lineært og kloner ikke komponenter; tekst- og tabelfortsættelser bevarer område- eller rækkeskivemetadata i stedet for at kopiere hele indholdstræet

Stilarv

THPDFDOMStyle opløser skrifttypenavn, størrelse, typografier, tekstfarve, baggrund, kant, indvendig margen, afstand og linjehøjde gennem sin overordnede kæde

En sektionsstil er overordnet for dens brødtekst og inventar, en stak- eller containerstil er overordnet for dens børn, og tabelstil flyder gennem rækker til celler

Kun eksplicit tildelte værdier tilsidesætter den overordnede; Clear fjerner lokale tildelinger og den overordnede forbindelse, mens Assign kopierer lokale tildelinger uden at kopiere ejerskab eller afstamning

Overordnede kæder dybere end 64 niveauer afvises som cykliske eller ubegrænsede

Genanvendelige komponentfabrikker

THPDFDOMComponentFactory er en anonym funktion, som opretter én kalder-ejet THPDFDOMComponent-instans pr. kald

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

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

Fabriksnavne er unikke uden forskel på store og små bogstaver, hvert kald skal returnere en ny komponentinstans, og den modtagende container overtager ejerskabet efter Add

Brug SetHeaderClone, SetFooterClone eller Clone, når én deklareret komponent skal genbruges på flere ejerskabssteder

Tabeller med gentaget overskrift

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);

Overskriftsrækker skal være sammenhængende og gå forud for brødtekstrækker, positive kolonnevægte fordeler den tilgængelige bredde, og rækkehøjder er eksplicitte positive værdier

Når RepeatHeaders er true, kræver en opdeling plads til alle førende overskriftsrækker og mindst én brødtekstrække, hvilket forhindrer fortsættelsessider med kun overskrift

Paginering og fejlgrænser

Rendereren måler først hver komponent igen mod det resterende brødtekst-rektangel, flytter et udeleligt minimumsfragment til en ny side, når det er muligt, og delegerer hver gyldig opdeling til PlaceLayoutElement

Et element, der ikke kan være på en tom brødtekstside, rejser en undtagelse med sin stabile elementsti i stedet for stiltiende at kassere indhold

MaximumContinuationDepth er som standard 100.000 og begrænser fejldannede komponenter, der gentagne gange returnerer en fortsættelse uden fremskridt

Sektionens sidedimensioner skal være positive, margener og afstande til inventar kan ikke være negative, og geometri for sidehoved plus sidefod skal efterlade et positivt brødtekst-rektangel

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 genererede HPDFLayoutDOM.hpp eksponerer de samme dokument-, stil-, komponent-, tabel-, sektions-, renderer- og statistikflader

Relaterede API'er