DOM Tata Letak Deklaratif

HPDFLayoutDOM membangun komponen dokumen yang dapat digunakan kembali di atas THPDFLayoutElement, MeasureLayoutElement, PlaceLayoutElement, fragmen overflow yang dimiliki, dan ImmediateFlushLayout

Komposisi dokumen dan bagian

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 memiliki bagian-bagiannya, setiap THPDFDOMSection memiliki body, header, footer, dan gayanya, dan setiap stack atau kontainer memiliki komponen yang dilampirkan padanya

THPDFDOMRenderer.Render memulai dan mengakhiri dokumen target, membuat halaman baru untuk setiap bagian baru, mengulang furnitur bagian pada halaman kelanjutan, dan mengembalikan statistik halaman, penempatan, pemecahan, furnitur, struktur, konten bertanda, artifact, dan kelanjutan maksimum

Setel semua opsi keluaran, kompresi, kesesuaian, lapisan, dan immediate-flush THotPDF sebelum memanggil Render

GenerateStructure default-nya True, sehingga renderer juga membangun pohon struktur logis yang aman untuk kelanjutan dan menggunakan THPDFDOMDocument.Language ketika target tidak memiliki bahasa

Komponen

Semua komponen mengekspos kontrak Name, Path, Style, Clone, Measure, Draw, dan Split yang stabil plus penimpaan peran semantik, bahasa, teks alternatif, teks pengganti, teks ekspansi, dan artifact

Traversal body tingkat atas bersifat linier dan tidak mengkloning komponen; kelanjutan teks dan tabel mempertahankan metadata rentang atau irisan baris alih-alih menyalin pohon konten lengkap

Warisan gaya

THPDFDOMStyle menyelesaikan nama font, ukuran, gaya, warna teks, latar belakang, border, padding, spacing, dan tinggi baris melalui rantai induknya

Gaya bagian adalah induk dari body dan furniturnya, gaya stack atau kontainer adalah induk dari anak-anaknya, dan gaya tabel mengalir melalui baris ke sel

Hanya nilai yang ditetapkan eksplisit yang menimpa induk; Clear menghapus penugasan lokal dan tautan induk, sementara Assign menyalin penugasan lokal tanpa menyalin kepemilikan atau leluhur

Rantai induk lebih dalam dari 64 tingkat ditolak sebagai siklik atau tak terbatas

Pabrik komponen yang dapat digunakan kembali

THPDFDOMComponentFactory adalah fungsi anonim yang membuat satu instance THPDFDOMComponent milik pemanggil per pemanggilan

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

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

Nama pabrik tidak membedakan huruf besar/kecil dan unik, setiap panggilan harus mengembalikan instance komponen baru, dan kontainer penerima mengambil kepemilikan setelah Add

Gunakan SetHeaderClone, SetFooterClone, atau Clone ketika satu komponen yang dideklarasikan harus digunakan kembali di beberapa situs kepemilikan

Tabel header berulang

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

Baris header harus berurutan dan mendahului baris body, bobot kolom positif membagi lebar yang tersedia, dan tinggi baris adalah nilai positif eksplisit

Ketika RepeatHeaders true, pemecahan memerlukan ruang untuk semua baris header terdepan dan setidaknya satu baris body, mencegah halaman kelanjutan hanya-header

Paginasi dan batas kegagalan

Renderer pertama-tama mengukur ulang setiap komponen terhadap persegi panjang body yang tersisa, memindahkan fragmen minimum yang tidak dapat dipecah ke halaman baru ketika memungkinkan, dan mendelegasikan setiap pemecahan valid ke PlaceLayoutElement

Elemen yang tidak dapat muat di halaman body kosong memunculkan pengecualian dengan jalur elemen stabilnya alih-alih membuang konten secara senyap

MaximumContinuationDepth default-nya 100.000 dan membatasi komponen salah bentuk yang berulang kali mengembalikan kelanjutan yang tidak berkembang

Dimensi halaman bagian harus positif, margin dan celah furnitur tidak boleh negatif, dan geometri header plus footer harus meninggalkan persegi panjang body positif

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

HPDFLayoutDOM.hpp yang dihasilkan mengekspor permukaan dokumen, gaya, komponen, tabel, bagian, renderer, dan statistik yang sama

API terkait