PdfConverter/range/Advanced/TSPdfColumnRange.tsf

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;