65 lines
1.8 KiB
Plaintext
65 lines
1.8 KiB
Plaintext
type TSPdfColumnRange = class(TSPdfBasicRange)
|
|
public
|
|
function Create(docx_to_pdf: TSDocxToPdf; pg: TSPage; components: TSDocxComponentsWare);
|
|
function AddElement(ele: Element);
|
|
function Elements(): array of Element;
|
|
function GetLastPage(): TSPage;
|
|
function Do();override;
|
|
|
|
private
|
|
[weakref]docx_to_pdf_: TSDocxToPdf;
|
|
[weakref]docx_components_ware_: TSDocxComponentsWare;
|
|
[weakref]page_: TSPage;
|
|
elements_: array of Elements;
|
|
paragraph_: P;
|
|
last_y_: real;
|
|
end;
|
|
|
|
function TSPdfColumnRange.Create(docx_to_pdf: TSDocxToPdf; pg: TSPage; components: TSDocxComponentsWare);
|
|
begin
|
|
docx_to_pdf_ := docx_to_pdf;
|
|
page_ := pg;
|
|
docx_components_ware_ := components;
|
|
elements_ := array();
|
|
last_y_ := 0;
|
|
end;
|
|
|
|
function TSPdfColumnRange.AddElement(ele: Element);
|
|
begin
|
|
elements_[length(elements_)] := ele;
|
|
end;
|
|
|
|
function TSPdfColumnRange.Elements(): array of Element;
|
|
begin
|
|
return elements_;
|
|
end;
|
|
|
|
function TSPdfColumnRange.Do();override;
|
|
begin
|
|
x := {self.}StartX;
|
|
y := {self.}StartY;
|
|
for _,element in elements_ do
|
|
begin
|
|
range := nil;
|
|
if element.LocalName = "p" then
|
|
range := new TSPdfParagraphRange(docx_to_pdf_, page_, docx_components_ware_, element);
|
|
else if element.LocalName = "tbl" then
|
|
range := new TSPdfTableRange(docx_to_pdf_, page_, docx_components_ware_, element);
|
|
if ifnil(range) then continue;
|
|
range.StartX := x;
|
|
range.StartY := y;
|
|
range.Width := {self.}Width;
|
|
range.LowerBound := {self.}LowerBound;
|
|
range.Calc();
|
|
range.Do();
|
|
y := range.EndY;
|
|
page_ := range.GetLastPage();
|
|
end
|
|
{self.}EndY := y;
|
|
end;
|
|
|
|
function TSPdfColumnRange.GetLastPage(): TSPage;
|
|
begin
|
|
return page_;
|
|
end;
|