Deklarativni DOM rasporeda

HPDFLayoutDOM gradi komponente dokumenta koje se ponovo koriste preko THPDFLayoutElement, MeasureLayoutElement, PlaceLayoutElement, vlasničkih fragmenata prekoračenja i ImmediateFlushLayout

Kompozicija dokumenta i sekcije

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 poseduje svoje sekcije, svaki THPDFDOMSection poseduje svoje telo, zaglavlje, podnožje i stil, a svaki stek ili kontejner poseduje komponente prikačene na njega

THPDFDOMRenderer.Render počinje i završava ciljni dokument, formira svežu stranicu za svaku novu sekciju, ponavlja nameštaj sekcije na stranicama nastavka i vraća statistike stranica, pozicioniranja, podele, nameštaja, strukture, označenog sadržaja, artefakata i maksimalnog nastavka

Postavite sve THotPDF opcije izlaza, kompresije, usklađenosti, sloja i trenutnog ispiranja pre pozivanja Render

GenerateStructure podrazumevano je True, pa renderer takođe gradi stablo logičke strukture bezbedno po nastavak i koristi THPDFDOMDocument.Language kada cilj nema jezik

Komponente

Sve komponente izlažu stabilne ugovore Name, Path, Style, Clone, Measure, Draw i Split plus pregaze semantičke uloge, jezika, alternativnog teksta, teksta zamene, teksta proširivanja i artefakta

Prolaz tela najvišeg nivoa je linearan i ne klonira komponente; nastavci teksta i tabele zadržavaju metapodatke opsega ili sečenja redova umesto kopiranja kompletnog stabla sadržaja

Nasleđivanje stila

THPDFDOMStyle razrešava ime fonta, veličinu, stilove, boju teksta, pozadinu, granicu, padding, spacing i visinu reda kroz svoj lanac roditelja

Stil sekcije je roditelj njenog tela i nameštaja, stil steka ili kontejnera je roditelj njegove dece, a stil tabele teče kroz redove do ćelija

Samo eksplicitno dodeljene vrednosti pregažuju roditelja; Clear uklanja lokalne dodele i vezu roditelja, dok Assign kopira lokalne dodele bez kopiranja vlasništva ili porekla

Lančići roditelja dublji od 64 nivoa odbijaju se kao ciklični ili neograničeni

Fabrike komponenata koje se ponovo koriste

THPDFDOMComponentFactory je anonimna funkcija koja formira jednu instancu THPDFDOMComponent u vlasništvu pozivaoca po pozivanju

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

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

Imena fabrika ne razlikuju velika i mala slova i jedinstvena su, svaki poziv mora da vrati novu instancu komponente, a kontejner primaoc preuzima vlasništvo nakon Add

Koristite SetHeaderClone, SetFooterClone ili Clone kada se jedna deklarirana komponenta mora ponovo koristiti na više mesta vlasništva

Tabele sa ponovljenim zaglavljem

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

Redovi zaglavlja moraju biti neprekidni i prethoditi redovima tela, pozitivne težine kolona dele dostupnu širinu, a visine redova su eksplicitne pozitivne vrednosti

Kada je RepeatHeaders tačno, podela zahteva prostor za sve vodeće redove zaglavlja i najmanje jedan red tela, sprečavajući stranice nastavka samo sa zaglavljem

Paginacija i granice neuspeha

Renderer prvo ponovo meri svaku komponentu prema preostalom pravougaoniku tela, pomeri nedeljiv minimalni fragment na svežu stranicu kada je moguće i delegira svaku važeću podelu na PlaceLayoutElement

Element koji ne može da stane u praznu stranicu tela podiže izuzetak sa svojom stabilnom putanjom elementa umesto tihog odbacivanja sadržaja

MaximumContinuationDepth podrazumevano je 100 000 i ograničava neispravne komponente koje opetovano vraćaju neprogresivni nastavak

Dimenzije stranice sekcije moraju biti pozitivne, margine i praznine nameštaja ne mogu biti negativne, a geometrija zaglavlja plus podnožja mora da ostavi pozitivan pravougaonik tela

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

Generisani HPDFLayoutDOM.hpp izvozi iste površine dokumenta, stila, komponente, tabele, sekcije, renderera i statistika

Povezani API-ji