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;