parent
4de1484ec3
commit
eb6e898ed7
|
|
@ -127,7 +127,7 @@ begin
|
|||
// println("_ = {}, xml_file_ = {}", _, xml_file_);
|
||||
if element.LocalName = "p" then {self.}TransformP(text_point_, element, w, lb);
|
||||
else if element.LocalName = "tbl" then {self.}TransformTbl(text_point_, element, w, lb);
|
||||
else if element.LocalName = "sdt" then {self.}TransformSdt(sect_ware, element);
|
||||
else if element.LocalName = "sdt" then {self.}TransformSdt(text_point_, element, w, lb);
|
||||
end
|
||||
end
|
||||
{self.}ProcessNumpages();
|
||||
|
|
@ -215,6 +215,8 @@ begin
|
|||
|
||||
"": "●",
|
||||
"": "■",
|
||||
"": "●",
|
||||
|
||||
);
|
||||
end;
|
||||
|
||||
|
|
@ -369,7 +371,6 @@ begin
|
|||
{self.}TransformP(point, p, w, lb);
|
||||
end;
|
||||
|
||||
|
||||
function TSDocxToPdf.ProcessNumpages();
|
||||
begin
|
||||
nums := page_array_[length(page_array_)-1].Number;
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ begin
|
|||
end
|
||||
{self.}EndY := cell_y - tbl_pr_.TblCellMar.Bottom.W;
|
||||
{self.}DynamicHeight += tbl_pr_.TblCellMar.Top.W + tbl_pr_.TblCellMar.Bottom.W;
|
||||
if {self.}EndY < {self.}LowerBound then
|
||||
if {self.}EndY < {self.}LowerBound and not range.Empty() then
|
||||
begin
|
||||
page_ := docx_to_pdf_.GetNextPage(page_);
|
||||
if ifnil(page_) then page_ := docx_to_pdf_.AddTSPage();
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ public
|
|||
function SetAllRangeProp(pg: TSPage; sx: real; sy: real; ex: real; ey: real; w: real; fh: real; dh: real);
|
||||
function Align(jc: string);
|
||||
function AdjustRangeOffset(page: TSPage; x_offset: real; y_offset: real);
|
||||
function AlignRightBound(right_bound: real);
|
||||
|
||||
private
|
||||
range_array_: array of TSPdfBasicRange;
|
||||
|
|
@ -68,3 +69,15 @@ begin
|
|||
if not ifnil(y_offset) then range.EndY += y_offset;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TSPdfLineRange.AlignRightBound(right_bound: real);
|
||||
begin
|
||||
last := range_array_[length(range_array_)-1];
|
||||
diff := right_bound - (last.EndX + last.Width);
|
||||
if diff > 1e-6 then
|
||||
begin
|
||||
avg := diff / (length(range_array_) - 1);
|
||||
for i:=1 to length(range_array_)-1 do
|
||||
range_array_[i].EndX += avg * i;
|
||||
end
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ public
|
|||
function GetLastPage(): TSPage;
|
||||
function AdjustRangeOffset(page: TSPage; x_offset: real; y_offset: real);
|
||||
function GetLineRangeArr(): array of TSPdfLineRange;
|
||||
function Empty(): boolean;
|
||||
|
||||
private
|
||||
function SetPPr(var ppr: PPr);
|
||||
|
|
@ -37,6 +38,7 @@ private
|
|||
function HyperlinkToToc();
|
||||
function HyperlinkToTextRange(hyperlink: Hyperlink; ppr: PPrUnitDecorator);
|
||||
function GetXYCordinates(): array of real;
|
||||
function AlignRightBound();
|
||||
|
||||
private
|
||||
[weakref]docx_to_pdf_: TSDocxToPdf;
|
||||
|
|
@ -51,6 +53,8 @@ private
|
|||
placeholder_array_: tableArray;
|
||||
table_style_id_: string;
|
||||
table_style_type_: string;
|
||||
empty_: boolean;
|
||||
right_bound_: real;
|
||||
end;
|
||||
|
||||
type FldStruct = class
|
||||
|
|
@ -117,12 +121,14 @@ begin
|
|||
line_range_array_ := array();
|
||||
hyperlink_array_ := array();
|
||||
bookmark_array_ := array();
|
||||
empty_ := false;
|
||||
{self.}TSPage := page_;
|
||||
end;
|
||||
|
||||
function TSPdfParagraphRange.Calc(): tableArray;
|
||||
begin
|
||||
// ppr.rpr是无效的,应该以ppr.pStyle为准
|
||||
right_bound_ := {self.}StartX + {self.}Width;
|
||||
if ifnil(paragraph_.XmlChildPPr) then paragraph_.XmlChildPPr := new PPr();
|
||||
{self.}SetPPr(paragraph_.PPr);
|
||||
ppr_unit_decorator_ := new PPrUnitDecorator(paragraph_.PPr);
|
||||
|
|
@ -200,6 +206,7 @@ begin
|
|||
line_space := {self.}GetParagraphLineSpace(ppr_unit_decorator_.RPr.Sz.Val, ppr_unit_decorator_.Spacing.Line);
|
||||
{self.}DynamicHeight += line_space;
|
||||
{self.}EndY -= {self.}DynamicHeight;
|
||||
empty_ := true;
|
||||
end
|
||||
if placeholder_array_ then return false;
|
||||
{self.}RangesToLines();
|
||||
|
|
@ -424,6 +431,7 @@ begin
|
|||
end
|
||||
end
|
||||
{self.}SetLinesAlignment();
|
||||
{self.}AlignRightBound();
|
||||
end;
|
||||
|
||||
function TSPdfParagraphRange.SetLinesAlignment();
|
||||
|
|
@ -432,6 +440,14 @@ begin
|
|||
line_range.Align(ppr_unit_decorator_.Jc.Val);
|
||||
end;
|
||||
|
||||
function TSPdfParagraphRange.AlignRightBound();
|
||||
begin
|
||||
len := length(line_range_array_);
|
||||
if len = 1 then return;
|
||||
for i:=0 to len-2 do
|
||||
line_range_array_[i].AlignRightBound(right_bound_);
|
||||
end;
|
||||
|
||||
function TSPdfParagraphRange.CheckAndAddPage(y: real; offset: real): boolean;
|
||||
begin
|
||||
if y - offset < {self.}LowerBound then
|
||||
|
|
@ -855,3 +871,8 @@ function TSPdfParagraphRange.GetLineRangeArr(): array of TSPdfLineRange;
|
|||
begin
|
||||
return line_range_array_;
|
||||
end;
|
||||
|
||||
function TSPdfParagraphRange.Empty(): boolean;
|
||||
begin
|
||||
return empty_;
|
||||
end;
|
||||
|
|
|
|||
Loading…
Reference in New Issue