支持表格固定高度
This commit is contained in:
parent
535bdb20d4
commit
2d6632895b
|
|
@ -1,6 +1,6 @@
|
||||||
type TSPdfCellRange = class(TSPdfBasicRange)
|
type TSPdfCellRange = class(TSPdfBasicRange)
|
||||||
public
|
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 Calc();
|
||||||
function Do();override;
|
function Do();override;
|
||||||
function SetTSPage(page: TSPage);
|
function SetTSPage(page: TSPage);
|
||||||
|
|
@ -20,6 +20,7 @@ public
|
||||||
RemoveFlag;
|
RemoveFlag;
|
||||||
Row;
|
Row;
|
||||||
Col;
|
Col;
|
||||||
|
[weakref]TSTrPr: TSTrProperty;
|
||||||
|
|
||||||
private
|
private
|
||||||
[weakref]parent_: TSPdfTableRange;
|
[weakref]parent_: TSPdfTableRange;
|
||||||
|
|
@ -28,7 +29,6 @@ private
|
||||||
[weakref]docx_components_ware_: TSDocxComponentsWare;
|
[weakref]docx_components_ware_: TSDocxComponentsWare;
|
||||||
[weakref]tc_: Tc;
|
[weakref]tc_: Tc;
|
||||||
[weakref]tbl_pr_: TblPr;
|
[weakref]tbl_pr_: TblPr;
|
||||||
[weakref]tr_pr_: TrPr;
|
|
||||||
region_array_: array of Region; // 单元格可能跨页,所以可能存在多个
|
region_array_: array of Region; // 单元格可能跨页,所以可能存在多个
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -43,7 +43,7 @@ type Region = class
|
||||||
RangeArr: array of TSPdfAbstractRange;
|
RangeArr: array of TSPdfAbstractRange;
|
||||||
end;
|
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
|
begin
|
||||||
parent_ := table_range;
|
parent_ := table_range;
|
||||||
docx_to_pdf_ := docx_to_pdf;
|
docx_to_pdf_ := docx_to_pdf;
|
||||||
|
|
@ -51,8 +51,8 @@ begin
|
||||||
docx_components_ware_ := components;
|
docx_components_ware_ := components;
|
||||||
tc_ := tc;
|
tc_ := tc;
|
||||||
tbl_pr_ := tbl_pr;
|
tbl_pr_ := tbl_pr;
|
||||||
tr_pr_ := tr_pr;
|
|
||||||
region_array_ := array();
|
region_array_ := array();
|
||||||
|
{self.}TSTrPr := trp;
|
||||||
{self.}TSPage := page_;
|
{self.}TSPage := page_;
|
||||||
{self.}VMerge := 0;
|
{self.}VMerge := 0;
|
||||||
end;
|
end;
|
||||||
|
|
@ -114,6 +114,13 @@ begin
|
||||||
{self.}StartY := point.Y;
|
{self.}StartY := point.Y;
|
||||||
{self.}Calc();
|
{self.}Calc();
|
||||||
end
|
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;
|
end;
|
||||||
|
|
||||||
function TSPdfCellRange.Do();override;
|
function TSPdfCellRange.Do();override;
|
||||||
|
|
@ -135,13 +142,13 @@ end;
|
||||||
|
|
||||||
function TSPdfCellRange.AlignHeight(height: real);
|
function TSPdfCellRange.AlignHeight(height: real);
|
||||||
begin
|
begin
|
||||||
if {self.}FixedHeight > height then height := {self.}FixedHeight;
|
if {self.}TSTrPr.Height > height then height := {self.}TSTrPr.Height;
|
||||||
region := region_array_[0];
|
region := region_array_[0];
|
||||||
surplus := height - ({self.}StartY - {self.}LowerBound);
|
surplus := height - ({self.}StartY - {self.}LowerBound);
|
||||||
if surplus < 1e-6 then
|
if surplus < 1e-6 then
|
||||||
begin
|
begin
|
||||||
region.RectangleRange.DynamicHeight := height;
|
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;
|
{self.}EndY := {self.}StartY - region.RectangleRange.DynamicHeight;
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
@ -231,7 +238,7 @@ end;
|
||||||
function TSPdfCellRange.IsReComputeByCantSplit(): boolean;
|
function TSPdfCellRange.IsReComputeByCantSplit(): boolean;
|
||||||
begin
|
begin
|
||||||
if {self.}VMerge then return false;
|
if {self.}VMerge then return false;
|
||||||
return tr_pr_.CantSplit and page_ <> {self.}TSPage;
|
return {self.}TSTrPr.TrPr.CantSplit and page_ <> {self.}TSPage;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSPdfCellRange.IfRemoveEmptyRectangle(): boolean;
|
function TSPdfCellRange.IfRemoveEmptyRectangle(): boolean;
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ private
|
||||||
[weakref]page_: TSPage;
|
[weakref]page_: TSPage;
|
||||||
tbl_pr_unit_decorator_: TblPrUnitDecorator;
|
tbl_pr_unit_decorator_: TblPrUnitDecorator;
|
||||||
cell_range_array_: tableArray;
|
cell_range_array_: tableArray;
|
||||||
|
tr_array_: array of TSTrProperty;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSPdfTableRange.Create(docx_to_pdf: TSDocxToPdf; pg: PdfPage; components: Components; table: Tbl);
|
function TSPdfTableRange.Create(docx_to_pdf: TSDocxToPdf; pg: PdfPage; components: Components; table: Tbl);
|
||||||
|
|
@ -36,6 +37,7 @@ begin
|
||||||
docx_components_ware_ := Components;
|
docx_components_ware_ := Components;
|
||||||
table_ := table;
|
table_ := table;
|
||||||
cell_range_array_ := array();
|
cell_range_array_ := array();
|
||||||
|
tr_array_ := array();
|
||||||
{self.}TSPage := page_;
|
{self.}TSPage := page_;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -98,6 +100,9 @@ begin
|
||||||
tc_x := {self.}EndX;
|
tc_x := {self.}EndX;
|
||||||
tcs := tr.Tcs();
|
tcs := tr.Tcs();
|
||||||
pos := 0;
|
pos := 0;
|
||||||
|
trp := new TSTrProperty();
|
||||||
|
trp.TrPr := tr_pr;
|
||||||
|
tr_array_[i] := trp;
|
||||||
for j,tc in tcs do
|
for j,tc in tcs do
|
||||||
begin
|
begin
|
||||||
{self.}SetTcPr(tc.TcPr);
|
{self.}SetTcPr(tc.TcPr);
|
||||||
|
|
@ -126,7 +131,7 @@ begin
|
||||||
cell_range_array_[vmerge_arr[pos][0]][pos].VMerge := vmerge_arr[pos][1];
|
cell_range_array_[vmerge_arr[pos][0]][pos].VMerge := vmerge_arr[pos][1];
|
||||||
vmerge_arr[pos] := nil;
|
vmerge_arr[pos] := nil;
|
||||||
end
|
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.StartX := tc_x;
|
||||||
cell_range.Width := grid_cols[pos].W;
|
cell_range.Width := grid_cols[pos].W;
|
||||||
cell_range.LowerBound := {self.}LowerBound;
|
cell_range.LowerBound := {self.}LowerBound;
|
||||||
|
|
@ -147,6 +152,7 @@ begin
|
||||||
|
|
||||||
// for i,arr in cell_range_array_ do
|
// for i,arr in cell_range_array_ do
|
||||||
// begin
|
// begin
|
||||||
|
// println("i = {}, tr = {}", i, tr_array_[i]);
|
||||||
// println("i = {}, len = {}, arr = {}", i, length(arr), arr);
|
// println("i = {}, len = {}, arr = {}", i, length(arr), arr);
|
||||||
// end
|
// end
|
||||||
return;
|
return;
|
||||||
|
|
@ -206,7 +212,6 @@ begin
|
||||||
end
|
end
|
||||||
if range.VMerge then vmerge_arr[j] := array(i, range.VMerge);
|
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 not range.VMerge and range.DynamicHeight > max_height then max_height := range.DynamicHeight;
|
||||||
if range.FixedHeight > max_height then max_height := tc_h;
|
|
||||||
end
|
end
|
||||||
if recompute_flag then continue;
|
if recompute_flag then continue;
|
||||||
row_height[i] := max_height;
|
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