Deklaratyvus išdėstymo DOM

HPDFLayoutDOM kuria pakartotinai naudojamus dokumento komponentus per THPDFLayoutElement, MeasureLayoutElement, PlaceLayoutElement, valdomus perpildymo fragmentus ir ImmediateFlushLayout

Dokumento ir sekcijų sudėtis

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 valdo savo sekcijas, kiekviena THPDFDOMSection valdo savo turinį, antraštę, poraštę ir stilių, o kiekvienas krūvas arba konteineris valdo prie jo pridėtus komponentus

THPDFDOMRenderer.Render pradeda ir baigia tikslinį dokumentą, sukuria naują puslapį kiekvienai naujai sekcijai, kartoja sekcijos baldus tęsinių puslapiuose ir grąžina puslapio, išdėstymo, padalijimo, baldų, struktūros, žymėto turinio, artefakto ir maksimalaus tęsinio statistiką

Prieš kviesdami Render nustatykite visus THotPDF išvesties, glaudinimo, atitikties, sluoksnio ir momentinio išleidimo parinktis

GenerateStructure pagal numatymą yra True, todėl atvaizduotojas taip pat kuria tęsiniui saugų loginės struktūros medį ir naudoja THPDFDOMDocument.Language, kai tikslinis dokumentas neturi kalbos

Komponentai

Visi komponentai atskleidžia stabilias Name, Path, Style, Clone, Measure, Draw ir Split sutartis bei semantinio vaidmens, kalbos, alternatyvaus teksto, pakaitinio teksto, išplėtimo teksto ir artefakto perrašus

Aukščiausio lygio turinio peržvalga yra tiesinė ir neklonuoja komponentų; teksto ir lentelių tęsiniai išlaiko intervalo arba eilutės pjūvio metaduomenis, o ne nukopijuoja visą turinio medį

Stiliaus paveldėjimas

THPDFDOMStyle išsprendžia šrifto pavadinimą, dydį, stilius, teksto spalvą, foną, kraštinę, užpildymą, tarpus ir eilutės aukštį per savo pirminių elementų grandinę

Sekcijos stilius yra jos turinio ir baldų pirminis, krūvo arba konteinerio stilius yra jos antrinių elementų pirminis, o lentelės stilius teka per eilutes į langelius

Tik aiškiai priskirtos reikšmės perrašo pirminį; Clear pašalina vietinius priskyrimus ir pirminio nuorodą, o Assign nukopijuoja vietinius priskyrimus nenukopijuodamas nuosavybės arba kilmės

Pirminių grandinės gilesnės nei 64 lygiai atmetamos kaip cikliškos arba neribotos

Pakartotinai naudojamų komponentų gamyklos

THPDFDOMComponentFactory yra anoniminė funkcija, kuri kiekvieno iškvietimo metu kuria vieną iškvietėjo valdomą THPDFDOMComponent egzempliorių

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

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

Gamyklų pavadinimai nepriklauso nuo raidžių dydžio ir yra unikalūs, kiekvienas kvietimas turi grąžinti naują komponento egzempliorių, o gaunantis konteineris prisiima nuosavybę po Add

Naudokite SetHeaderClone, SetFooterClone arba Clone, kai vienas deklaruotas komponentas turi būti pakartotinai naudojamas keliose nuosavybės vietose

Lentelės su kartojama antrašte

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

Antraštės eilutės turi būti gretimos ir eiti prieš turinio eilutes, teigiami stulpelių svoriai padalija turimą plotį, o eilučių aukščiai yra aiškios teigiamos reikšmės

Kai RepeatHeaders yra tiesa, padalijimui reikia vietos visoms pirmaujančioms antraštės eilutėms ir bent vienai turinio eilutei, todėl išvengiama tik antraštės tęsinių puslapių

Paginacija ir gedimo ribos

Atvaizduotojas pirma iš naujo išmatuoja kiekvieną komponentą pagal likusį turinio stačiakampį, kai įmanoma perkelia neskaidomą mažiausią fragmentą į naują puslapį ir perduoda kiekvieną teisingą padalijimą PlaceLayoutElement

Elementas, kuris netelpa į tuščią turinio puslapį, sukelia išimtį su savo stabiliu elemento keliu, o ne tyliai išmeta turinį

MaximumContinuationDepth pagal numatymą yra 100 000 ir riboja nepageidaujamus komponentus, kurie pakartotinai grąžina nejudantį tęsinį

Sekcijos puslapio matmenys turi būti teigiami, paraštės ir baldų tarpai negali būti neigiami, o antraštės bei poraštės geometrija turi palikti teigiamą turinio stačiakampį

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

Sugeneruotas HPDFLayoutDOM.hpp eksportuoja tuos pačius dokumento, stiliaus, komponento, lentelės, sekcijos, atvaizduotojo ir statistikos paviršius

Susijusios API