Declarative Layout DOM
HPDFLayoutDOM xây dựng các thành phần tài liệu tái sử dụng trên THPDFLayoutElement, MeasureLayoutElement, PlaceLayoutElement, các mảnh tràn thuộc sở hữu, và ImmediateFlushLayout
Soạn tài liệu và section
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 sở hữu các section của nó, mỗi THPDFDOMSection sở hữu thân, tiêu đề đầu, chân trang, và kiểu của nó, và mỗi stack hoặc container sở hữu các thành phần được gắn vào nó
THPDFDOMRenderer.Render bắt đầu và kết thúc tài liệu đích, tạo một trang mới cho mỗi section mới, lặp lại đồ nội thất section trên các trang tiếp nối, và trả về thống kê trang, vị trí đặt, tách, đồ nội thất, cấu trúc, marked-content, artifact, và độ sâu tiếp nối tối đa
Đặt mọi tùy chọn đầu ra, nén, tuân thủ, lớp, và immediate-flush của THotPDF trước khi gọi Render
GenerateStructure mặc định là True, nên trình dựng cũng xây một cây cấu trúc logic an toàn tiếp nối và dùng THPDFDOMDocument.Language khi đích không có ngôn ngữ
Thành phần
THPDFDOMTextbọc văn bản Unicode, lưu cache ranh giới dòng theo độ rộng và số liệu văn bản kế thừa, và tách qua các dải ký tự nguồn mà không sao chép văn bản nguồnTHPDFDOMSpacerdành không gian dọc và có thể tách trên nhiều trangTHPDFDOMStackbố trí các con thuộc sở hữu theo chiều dọc với padding và spacing kế thừaTHPDFDOMContainerthêm một hộp có kiểu quanh một con thuộc sở hữu và chuyển tiếp các phần tiếp nối táchTHPDFDOMTablegiải quyết các cột có trọng số, vẽ các hàng và ô có kiểu, và lặp lại các hàng tiêu đề đầu trên các trang tiếp nốiTHPDFDOMListtạo các mục danh sách có số hoặc không có số với thành phần nhãn và thânTHPDFDOMImagesở hữu một đồ họa đã nhân bản, giải quyết kích thước tường minh, và cung cấp ngữ nghĩa figure và kiểm soát nén
Mọi thành phần cung cấp các hợp đồng Name, Path, Style, Clone, Measure, Draw, và Split ổn định cùng các ghi đè vai trò ngữ nghĩa, ngôn ngữ, văn bản thay thế, văn bản thay thế, văn bản mở rộng, và artifact
Việc duyệt thân cấp cao nhất là tuyến tính và không nhân bản thành phần; các phần tiếp nối văn bản và bảng giữ siêu dữ liệu dải hoặc lát hàng thay vì sao chép toàn bộ cây nội dung
Kế thừa kiểu
THPDFDOMStyle giải quyết tên font, cỡ, kiểu, màu văn bản, nền, viền, padding, spacing, và chiều cao dòng qua chuỗi cha của nó
Kiểu section là cha của thân và đồ nội thất của nó, kiểu stack hoặc container là cha của các con của nó, và kiểu bảng chảy qua các hàng đến các ô
Chỉ các giá trị được gán tường minh mới ghi đè cha; Clear xóa các gán cục bộ và liên kết cha, trong khi Assign sao chép các gán cục bộ mà không sao chép quyền sở hữu hoặc tổ tiên
Chuỗi cha sâu hơn 64 mức bị từ chối là tuần hoàn hoặc không có giới hạn
Nhà máy thành phần tái sử dụng
THPDFDOMComponentFactory là một hàm ẩn danh tạo một thể hiện THPDFDOMComponent do caller sở hữu cho mỗi lần gọi
Document.RegisterComponent('notice',
function: THPDFDOMComponent
begin
Result := THPDFDOMContainer.Create(
THPDFDOMText.Create('Reusable notice'));
end);
Section.Body.Add(Document.CreateComponent('notice'));
Tên nhà máy không phân biệt hoa thường và duy nhất, mỗi lần gọi phải trả về một thể hiện thành phần mới, và container nhận lấy quyền sở hữu sau Add
Hãy dùng SetHeaderClone, SetFooterClone, hoặc Clone khi một thành phần đã khai báo phải được tái sử dụng tại nhiều vị trí sở hữu
Bảng tiêu đề lặp lại
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);
Các hàng tiêu đề phải liền nhau và đứng trước các hàng thân, trọng số cột dương chia độ rộng có sẵn, và chiều cao hàng là các giá trị dương tường minh
Khi RepeatHeaders là true, một lần tách yêu cầu chỗ cho mọi hàng tiêu đề đầu và ít nhất một hàng thân, ngăn các trang tiếp nối chỉ có tiêu đề
Phân trang và ranh giới lỗi
Trình dựng trước tiên đo lại mỗi thành phần so với hình chữ nhật thân còn lại, di chuyển một mảnh tối thiểu không tách được sang một trang mới khi có thể, và ủy thác mọi lần tách hợp lệ cho PlaceLayoutElement
Một phần tử không thể vừa một trang thân trống nâng một ngoại lệ với đường dẫn phần tử ổn định của nó thay vì âm thầm loại bỏ nội dung
MaximumContinuationDepth mặc định là 100.000 và giới hạn các thành phần sai định dạng liên tục trả về một phần tiếp nối không tiến triển
Kích thước trang section phải dương, lề và khoảng trống đồ nội thất không thể âm, và hình học tiêu đề đầu cộng chân trang phải để lại một hình chữ nhật thân dương
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 được tạo ra xuất cùng các bề mặt tài liệu, kiểu, thành phần, bảng, section, trình dựng, và thống kê