diff --git a/range/Advanced/TSPdfCellRange.tsf b/range/Advanced/TSPdfCellRange.tsf index 72987c1..acd999a 100644 --- a/range/Advanced/TSPdfCellRange.tsf +++ b/range/Advanced/TSPdfCellRange.tsf @@ -1,6 +1,6 @@ type TSPdfCellRange = class(TSPdfBasicRange) public - function Create(table_range: TSPdfTableRange; docx_to_pdf: TSDocxToPdf; pg: TSPage; components: TSDocxComponentsWare; tc: Tc; tbl_pr: TblPr; tr_pr: TrPr); + function Create(table_range: TSPdfTableRange; docx_to_pdf: TSDocxToPdf; pg: TSPage; components: TSDocxComponentsWare; tc: Tc; tbl_pr: TblPr; trp: TSTrProperty); function Calc(); function Do();override; function SetTSPage(page: TSPage); @@ -20,6 +20,7 @@ public RemoveFlag; Row; Col; + [weakref]TSTrPr: TSTrProperty; private [weakref]parent_: TSPdfTableRange; @@ -28,7 +29,6 @@ private [weakref]docx_components_ware_: TSDocxComponentsWare; [weakref]tc_: Tc; [weakref]tbl_pr_: TblPr; - [weakref]tr_pr_: TrPr; region_array_: array of Region; // 单元格可能跨页,所以可能存在多个 end; @@ -43,7 +43,7 @@ type Region = class RangeArr: array of TSPdfAbstractRange; end; -function TSPdfCellRange.Create(table_range: TSPdfTableRange; docx_to_pdf: TSDocxToPdf; pg: TSPage; components: TSDocxComponentsWare; tc: Tc; tbl_pr: TblPr; tr_pr: TrPr); +function TSPdfCellRange.Create(table_range: TSPdfTableRange; docx_to_pdf: TSDocxToPdf; pg: TSPage; components: TSDocxComponentsWare; tc: Tc; tbl_pr: TblPr; trp: TSTrProperty); begin parent_ := table_range; docx_to_pdf_ := docx_to_pdf; @@ -51,8 +51,8 @@ begin docx_components_ware_ := components; tc_ := tc; tbl_pr_ := tbl_pr; - tr_pr_ := tr_pr; region_array_ := array(); + {self.}TSTrPr := trp; {self.}TSPage := page_; {self.}VMerge := 0; end; @@ -114,6 +114,13 @@ begin {self.}StartY := point.Y; {self.}Calc(); end + if not {self.}VMerge and {self.}TSTrPr.TrPr.TrHeight.HRule <> "exact" and {self.}DynamicHeight > {self.}FixedHeight then + begin + region.RectangleRange.FixedHeight := {self.}DynamicHeight; + {self.}FixedHeight := {self.}DynamicHeight; + end + if not {self.}VMerge and {self.}DynamicHeight > {self.}TSTrPr.Height then + {self.}TSTrPr.Height := {self.}DynamicHeight; end; function TSPdfCellRange.Do();override; @@ -135,13 +142,13 @@ end; function TSPdfCellRange.AlignHeight(height: real); begin - if {self.}FixedHeight > height then height := {self.}FixedHeight; + if {self.}TSTrPr.Height > height then height := {self.}TSTrPr.Height; region := region_array_[0]; surplus := height - ({self.}StartY - {self.}LowerBound); if surplus < 1e-6 then begin region.RectangleRange.DynamicHeight := height; - if {self.}FixedHeight then region.RectangleRange.DynamicHeight := {self.}FixedHeight; + if {self.}TSTrPr.Height then region.RectangleRange.DynamicHeight := {self.}TSTrPr.Height; {self.}EndY := {self.}StartY - region.RectangleRange.DynamicHeight; return; end @@ -231,7 +238,7 @@ end; function TSPdfCellRange.IsReComputeByCantSplit(): boolean; begin if {self.}VMerge then return false; - return tr_pr_.CantSplit and page_ <> {self.}TSPage; + return {self.}TSTrPr.TrPr.CantSplit and page_ <> {self.}TSPage; end; function TSPdfCellRange.IfRemoveEmptyRectangle(): boolean; diff --git a/range/Advanced/TSPdfTableRange.tsf b/range/Advanced/TSPdfTableRange.tsf index 3194ec9..a9e6149 100644 --- a/range/Advanced/TSPdfTableRange.tsf +++ b/range/Advanced/TSPdfTableRange.tsf @@ -27,6 +27,7 @@ private [weakref]page_: TSPage; tbl_pr_unit_decorator_: TblPrUnitDecorator; cell_range_array_: tableArray; + tr_array_: array of TSTrProperty; end; function TSPdfTableRange.Create(docx_to_pdf: TSDocxToPdf; pg: PdfPage; components: Components; table: Tbl); @@ -36,6 +37,7 @@ begin docx_components_ware_ := Components; table_ := table; cell_range_array_ := array(); + tr_array_ := array(); {self.}TSPage := page_; end; @@ -98,6 +100,9 @@ begin tc_x := {self.}EndX; tcs := tr.Tcs(); pos := 0; + trp := new TSTrProperty(); + trp.TrPr := tr_pr; + tr_array_[i] := trp; for j,tc in tcs do begin {self.}SetTcPr(tc.TcPr); @@ -126,7 +131,7 @@ begin cell_range_array_[vmerge_arr[pos][0]][pos].VMerge := vmerge_arr[pos][1]; vmerge_arr[pos] := nil; end - cell_range := new TSPdfCellRange(self, docx_to_pdf_, page_, docx_components_ware_, tc, tbl_pr_unit_decorator_, tr.TrPr); + cell_range := new TSPdfCellRange(self, docx_to_pdf_, page_, docx_components_ware_, tc, tbl_pr_unit_decorator_, trp); cell_range.StartX := tc_x; cell_range.Width := grid_cols[pos].W; cell_range.LowerBound := {self.}LowerBound; @@ -147,6 +152,7 @@ begin // for i,arr in cell_range_array_ do // begin + // println("i = {}, tr = {}", i, tr_array_[i]); // println("i = {}, len = {}, arr = {}", i, length(arr), arr); // end return; @@ -206,7 +212,6 @@ begin end if range.VMerge then vmerge_arr[j] := array(i, range.VMerge); if not range.VMerge and range.DynamicHeight > max_height then max_height := range.DynamicHeight; - if range.FixedHeight > max_height then max_height := tc_h; end if recompute_flag then continue; row_height[i] := max_height; diff --git a/utils/TSTrProperty.tsf b/utils/TSTrProperty.tsf new file mode 100644 index 0000000..529bde9 --- /dev/null +++ b/utils/TSTrProperty.tsf @@ -0,0 +1,12 @@ +type TSTrProperty = class + function Create(); +public + TrPr: TrPrUnitDecorator; + Height: real; +end; + +function TSTrProperty.Create(); +begin + {self.}TrPr := nil; + {self.}Height := 0; +end;