支持表格固定高度
This commit is contained in:
parent
535bdb20d4
commit
2d6632895b
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
Loading…
Reference in New Issue