Bildirimsel Layout DOM

HPDFLayoutDOM; THPDFLayoutElement, MeasureLayoutElement, PlaceLayoutElement, sahipli taşma parçaları ve ImmediateFlushLayout üzerinde yeniden kullanılabilir belge bileşenleri kurar

Belge ve bölüm oluşturma

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 bölümlerinin sahibidir; her THPDFDOMSection kendi body, header, footer ve stilinin, her stack veya container ise kendine eklenen bileşenlerin sahibidir

THPDFDOMRenderer.Render hedef belgeyi başlatır ve bitirir, her yeni bölüm için taze bir sayfa açar, bölüm furniture'ını devam sayfalarında tekrarlar ve sayfa, yerleştirme, bölünme, furniture, yapı, marked-content, artifact ve maksimum devam istatistiklerini döndürür

Render'ı çağırmadan önce tüm THotPDF çıktı, sıkıştırma, conformance, katman ve immediate-flush seçeneklerini ayarlayın

GenerateStructure varsayılan olarak True'dur; bu yüzden renderer, devamlılık açısından güvenli bir mantıksal yapı ağacı da kurar ve hedefin dili yokken THPDFDOMDocument.Language değerini kullanır

Bileşenler

Tüm bileşenler; kararlı Name, Path, Style, Clone, Measure, Draw ve Split sözleşmelerini, ayrıca semantic role, dil, alternatif metin, replacement metni, expansion metni ve artifact override'larını açığa çıkarır

Üst düzey body dolaşımı doğrusaldır ve bileşen klonlamaz; metin ve tablo devamları, içerik ağacının tamamını kopyalamak yerine aralık veya satır dilimi meta verisini saklar

Stil kalıtımı

THPDFDOMStyle; yazı tipi adını, boyutu, stilleri, metin rengini, arka planı, kenarlığı, padding'i, spacing'i ve satır yüksekliğini üst zinciri üzerinden çözer

Bölüm stili, body'sinin ve furniture'ının üstüdür; stack veya container stili, alt bileşenlerinin üstüdür; tablo stili ise satırlardan hücrelere akar

Yalnızca açıkça atanan değerler üstü ezer; Clear yerel atamaları ve üst bağını kaldırır, Assign ise sahiplği veya soyu kopyalamadan yerel atamaları kopyalar

64 seviyeden derin üst zincirleri döngüsel veya sınırsız olarak reddedilir

Yeniden kullanılabilir bileşen factory'leri

THPDFDOMComponentFactory, her çağrıda çağıranın sahipliğinde tek bir THPDFDOMComponent örneği oluşturan anonim bir fonksiyondur

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

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

Factory isimleri büyük/küçük harf duyarsız ve tekildir; her çağrı yeni bir bileşen örneği döndürmelidir ve alan container, sahipliği Add sonrasında üstlenir

Bildirilen bir bileşenin birden fazla sahiplik noktasında yeniden kullanılması gerektiğinde SetHeaderClone, SetFooterClone veya Clone kullanın

Tekrarlayan header'lı tablolar

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

Header satırları bitişik olmalı ve body satırlarından önce gelmelidir; pozitif sütun ağırlıkları kullanılabilir genişliği böler, satır yükseklikleri açık pozitif değerlerdir

RepeatHeaders true olduğunda bir bölünme, tüm öndeki header satırlarına ve en az bir body satırına yer ister; böylece yalnızca header içeren devam sayfaları engellenir

Sayfalandırma ve hata sınırları

Renderer önce her bileşeni kalan body dikdörtgenine göre yeniden ölçer, bölünemeyen en küçük parçayı mümkünse taze bir sayfaya taşır ve her geçerli bölünmeyi PlaceLayoutElement'e devreder

Boş bir body sayfasına sığamayan öğe, içeriği sessizce atmak yerine kararlı öğe yoluyla bir exception fırlatır

MaximumContinuationDepth varsayılan olarak 100.000'dir ve sürekli ilerlemeyen bir devam döndüren hatalı biçimli bileşenleri sınırlar

Bölüm sayfa boyutları pozitif olmalıdır; kenar boşlukları ve furniture boşlukları negatif olamaz, header ve footer geometrisi pozitif bir body dikdörtgeni bırakmalıdır

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

Üretilen HPDFLayoutDOM.hpp, aynı belge, stil, bileşen, tablo, bölüm, renderer ve istatistik yüzeylerini dışa aktarır

İlgili API'ler