From 0417669eb242934fb0e67b9ede1659d2ff767357 Mon Sep 17 00:00:00 2001 From: csh Date: Wed, 11 Sep 2024 09:13:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B7=A8=E9=A1=B5=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E5=87=BA=E7=8E=B0=E7=A9=BA=E7=99=BD=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- range/Advanced/TSPdfCellRange.tsf | 10 +++++++++- range/Advanced/TSPdfTableRange.tsf | 20 +++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/range/Advanced/TSPdfCellRange.tsf b/range/Advanced/TSPdfCellRange.tsf index 28ddf55..6e7f6d5 100644 --- a/range/Advanced/TSPdfCellRange.tsf +++ b/range/Advanced/TSPdfCellRange.tsf @@ -10,9 +10,11 @@ public function FirstValidTSPage(): TSPage; function SetVAlign(); function IsReComputeByCantSplit(): boolean; + function IfRemoveEmptyRectangle(): boolean; public VMerge; + RemoveFlag; private [weakref]parent_: TSPdfTableRange; @@ -105,7 +107,7 @@ function TSPdfCellRange.Do();override; begin for _,region in region_array_ do begin - // if length(region.RangeArr) = 0 then continue; + if _ = 0 and {self.}RemoveFlag then continue; region.RectangleRange.Do(); for _,range in region.RangeArr do range.Do(); @@ -218,3 +220,9 @@ begin if {self.}VMerge then return false; return tr_pr_.CantSplit and page_ <> {self.}TSPage; end; + +function TSPdfCellRange.IfRemoveEmptyRectangle(): boolean; +begin + if length(region_array_) < 2 then return false; + return length(region_array_[0].RangeArr) ? false : true; +end; diff --git a/range/Advanced/TSPdfTableRange.tsf b/range/Advanced/TSPdfTableRange.tsf index b258619..467c38a 100644 --- a/range/Advanced/TSPdfTableRange.tsf +++ b/range/Advanced/TSPdfTableRange.tsf @@ -55,8 +55,26 @@ end; function TSPdfTableRange.Do();override; begin for _,row in cell_range_array_ do + begin + flag := nil; for _,range in row do - if ifObj(range) then range.Do(); + begin + if ifnil(flag) and ifObj(range) then flag := range.IfRemoveEmptyRectangle(); + if not ifObj(range) or flag <> range.IfRemoveEmptyRectangle() then + begin + flag := false; + break; + end + end + for _,range in row do + begin + if ifObj(range) then + begin + range.RemoveFlag := flag; + range.Do(); + end + end + end end; function TSPdfTableRange.GetCellMatrix(grid_cols: array of GridColUnitDecorator);