抽象page为tspage对象,增加索引
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
type TSPdfCellRange = class(TSPdfBasicRange)
|
||||
public
|
||||
function Create(docx_to_pdf: TSDocxToPdf; pg: PdfPage; components: TSDocxComponentsWare; sect_ware: TSSectWare; tc: Tc; tbl_pr: TblPr);
|
||||
function Create(docx_to_pdf: TSDocxToPdf; pg: TSPage; components: TSDocxComponentsWare; sect_ware: TSSectWare; tc: Tc; tbl_pr: TblPr);
|
||||
function Calc();
|
||||
function AlignHeight(height: real; surplus: real);
|
||||
function GetLastPage();
|
||||
@@ -8,7 +8,7 @@ public
|
||||
|
||||
private
|
||||
[weakref]docx_to_pdf_: TSDocxToPdf;
|
||||
page_: PdfPage;
|
||||
[weakref]page_: TSPage;
|
||||
[weakref]docx_components_ware_: TSDocxComponentsWare;
|
||||
[weakref]sect_ware_: TSSectWare;
|
||||
[weakref]tc_: Tc;
|
||||
@@ -27,7 +27,7 @@ type Region = class
|
||||
RangeArr: array of TSPdfAbstractRange;
|
||||
end;
|
||||
|
||||
function TSPdfCellRange.Create(docx_to_pdf: TSDocxToPdf; pg: PdfPage; components: TSDocxComponentsWare; sect_ware: TSSectWare; tc: Tc; tbl_pr: TblPr);
|
||||
function TSPdfCellRange.Create(docx_to_pdf: TSDocxToPdf; pg: TSPage; components: TSDocxComponentsWare; sect_ware: TSSectWare; tc: Tc; tbl_pr: TblPr);
|
||||
begin
|
||||
docx_to_pdf_ := docx_to_pdf;
|
||||
page_ := pg;
|
||||
@@ -36,7 +36,7 @@ begin
|
||||
tc_ := tc;
|
||||
tbl_pr_ := tbl_pr;
|
||||
region_array_ := array();
|
||||
{self.}Page := page_;
|
||||
{self.}TSPage := page_;
|
||||
end;
|
||||
|
||||
function TSPdfCellRange.Calc();
|
||||
@@ -46,7 +46,7 @@ begin
|
||||
region.RectangleRange.EndY := {self.}StartY;
|
||||
region.RectangleRange.Width := {self.}Width;
|
||||
region.RectangleRange.FixedHeight := {self.}FixedHeight;
|
||||
region.RectangleRange.Page := page_;
|
||||
region.RectangleRange.TSPage := page_;
|
||||
region_array_[length(region_array_)] := region;
|
||||
|
||||
{self.}EndX := {self.}StartX;
|
||||
@@ -108,7 +108,7 @@ begin
|
||||
arr := region.RangeArr;
|
||||
region.RangeArr := array();
|
||||
span := sect_ware_.SectPr.PgSz.H - sect_ware_.SectPr.PgMar.Top - sect_ware_.SectPr.PgMar.Bottom;
|
||||
hash := array(region.RectangleRange.Page: region);
|
||||
hash := array(region.RectangleRange.TSPage.Index: region);
|
||||
while surplus > span do
|
||||
begin
|
||||
page_ := docx_to_pdf_.GetNextPage(page_);
|
||||
@@ -117,10 +117,10 @@ begin
|
||||
region.RectangleRange.EndY := {self.}StartY;
|
||||
region.RectangleRange.Width := {self.}Width;
|
||||
region.RectangleRange.DynamicHeight := span;
|
||||
region.RectangleRange.Page := page_;
|
||||
region.RectangleRange.TSPage := page_;
|
||||
region_array_[length(region_array_)] := region;
|
||||
surplus -= span;
|
||||
hash[region.RectangleRange.Page] := region;
|
||||
hash[region.RectangleRange.TSPage.Index] := region;
|
||||
end
|
||||
if surplus > 1e-6 then
|
||||
begin
|
||||
@@ -130,14 +130,14 @@ begin
|
||||
region.RectangleRange.EndY := sect_ware_.SectPr.PgSz.H - sect_ware_.SectPr.PgMar.Top;
|
||||
region.RectangleRange.Width := {self.}Width;
|
||||
region.RectangleRange.DynamicHeight := surplus;
|
||||
region.RectangleRange.Page := page_;
|
||||
region.RectangleRange.TSPage := page_;
|
||||
region_array_[length(region_array_)] := region;
|
||||
hash[region.RectangleRange.Page] := region;
|
||||
hash[region.RectangleRange.TSPage.Index] := region;
|
||||
{self.}EndY := region.RectangleRange.EndY - surplus;
|
||||
end
|
||||
for _,range in arr do
|
||||
begin
|
||||
region := hash[range.Page];
|
||||
region := hash[range.TSPage.Index];
|
||||
region.RangeArr[length(region.RangeArr)] := range;
|
||||
end
|
||||
end;
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
type TSPdfLineRange = class(TSPdfBasicRange)
|
||||
public
|
||||
function Create(pg: PdfPage);
|
||||
function Create(pg: TSPage);
|
||||
function Do();override;
|
||||
function AddRange(range: TSPdfBasicRange);
|
||||
function SetAllRangeProp(pg: PdfPage; sx: real; sy: real; ex: real; ey: real; w: real; fh: real; dh: real);
|
||||
function SetAllRangeProp(pg: TSPage; sx: real; sy: real; ex: real; ey: real; w: real; fh: real; dh: real);
|
||||
function Align(jc: string);
|
||||
|
||||
private
|
||||
range_array_: array of TSPdfBasicRange;
|
||||
end;
|
||||
|
||||
function TSPdfLineRange.Create(pg: PdfPage);
|
||||
function TSPdfLineRange.Create(pg: TSPage);
|
||||
begin
|
||||
{self.}Page := pg;
|
||||
{self.}TSPage := pg;
|
||||
range_array_ := array();
|
||||
end;
|
||||
|
||||
@@ -27,11 +27,11 @@ begin
|
||||
range.Do();
|
||||
end;
|
||||
|
||||
function TSPdfLineRange.SetAllRangeProp(pg: PdfPage; sx: real; sy: real; ex: real; ey: real; w: real; fh: real; dh: real);
|
||||
function TSPdfLineRange.SetAllRangeProp(pg: TSPage; sx: real; sy: real; ex: real; ey: real; w: real; fh: real; dh: real);
|
||||
begin
|
||||
for _,range in range_array_ do
|
||||
begin
|
||||
if not ifnil(pg) then range.Page := pg;
|
||||
if not ifnil(pg) then range.TSPage := pg;
|
||||
if not ifnil(sx) then range.StartX := sx;
|
||||
if not ifnil(sy) then range.StartY := sy;
|
||||
if not ifnil(ex) then range.EndX := ex;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
type TSPdfParagraphRange = class(TSPdfBasicRange)
|
||||
public
|
||||
function Create(docx_to_pdf: TSDocxToPdf; pg: PdfPage; components: TSDocxComponentsWare; sect_ware: TSSectWare; paragraph: P);
|
||||
function Create(docx_to_pdf: TSDocxToPdf; pg: TSPage; components: TSDocxComponentsWare; sect_ware: TSSectWare; paragraph: P);
|
||||
function Calc();
|
||||
function Do();override;
|
||||
function SetExtraStyleId(style_id: string);
|
||||
@@ -28,13 +28,13 @@ private
|
||||
[weakref]docx_components_ware_: TSDocxComponentsWare;
|
||||
[weakref]sect_ware_: TSSectWare;
|
||||
[weakref]paragraph_: P;
|
||||
page_: PdfPage;
|
||||
[weakref]page_: TSPage;
|
||||
extra_style_id_: string;
|
||||
range_array_: array of TSPdfBasicRange;
|
||||
line_range_array_: array of TSPdfLineRange;
|
||||
end;
|
||||
|
||||
function TSPdfParagraphRange.Create(docx_to_pdf: TSDocxToPdf; pg: PdfPage; components: TSDocxComponentsWare; sect_ware: TSSectWare; paragraph: P);
|
||||
function TSPdfParagraphRange.Create(docx_to_pdf: TSDocxToPdf; pg: TSPage; components: TSDocxComponentsWare; sect_ware: TSSectWare; paragraph: P);
|
||||
begin
|
||||
docx_to_pdf_ := docx_to_pdf;
|
||||
page_ := pg;
|
||||
@@ -44,7 +44,7 @@ begin
|
||||
extra_style_id_ := "";
|
||||
range_array_ := array();
|
||||
line_range_array_ := array();
|
||||
{self.}Page := page_;
|
||||
{self.}TSPage := page_;
|
||||
end;
|
||||
|
||||
function TSPdfParagraphRange.Calc(): tableArray;
|
||||
@@ -130,7 +130,7 @@ begin
|
||||
begin
|
||||
offset := line_space > max_y ? (line_space - max_size) / 2 + max_size - max_size / 5 : max_y;
|
||||
max_value := max(line_space, max_y);
|
||||
line_range.Page := page_;
|
||||
line_range.TSPage := page_;
|
||||
line_range.EndY := {self.}EndY - max_value;
|
||||
line_range.DynamicHeight := max_value;
|
||||
line_range.SetAllRangeProp(pg: page_, ey: {self.}EndY - offset);
|
||||
@@ -155,7 +155,7 @@ begin
|
||||
begin
|
||||
offset := line_space > max_y ? (line_space - max_size) / 2 + max_size - max_size / 5 : max_y;
|
||||
max_value := max(line_space, max_y) + ppr.Spacing.After;
|
||||
line_range.Page := page_;
|
||||
line_range.TSPage := page_;
|
||||
line_range.EndY := {self.}EndY - max_value;
|
||||
line_range.DynamicHeight := max_value;
|
||||
line_range.SetAllRangeProp(pg: page_, ey: {self.}EndY - offset);
|
||||
@@ -219,8 +219,9 @@ begin
|
||||
font_name := rpr.RFonts.EastAsia ? rpr.RFonts.EastAsia : rpr.RFonts.Ascii;
|
||||
font_obj := docx_to_pdf_.Font.GetFont(font_name, rpr.B, rpr.I);
|
||||
if not rpr.Sz.Val then rpr.Sz.Val := rpr.SzCs.Val ? rpr.SzCs.Val : docx_to_pdf_.Font.GetDefaultSz();
|
||||
page_.SetFontAndSize(font_obj, rpr.Sz.Val);
|
||||
word_width := page_.TextWidth(word);
|
||||
// println("page_.PdfPage = {}, font_obj = {}, sz = {}", page_.PdfPage, font_obj, rpr.Sz.Val);
|
||||
page_.PdfPage.SetFontAndSize(font_obj, rpr.Sz.Val);
|
||||
word_width := page_.PdfPage.TextWidth(word);
|
||||
text_range := new TSPdfTextRange();
|
||||
text_range.RPr := rpr;
|
||||
text_range.Text := word;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
type TSPdfTableRange = class(TSPdfBasicRange)
|
||||
public
|
||||
function Create(docx_to_pdf: TSDocxToPdf; pg: PdfPage; components: Components; sect_ware: TSSectWare; paragraph: P);
|
||||
function Create(docx_to_pdf: TSDocxToPdf; pg: TSPage; components: Components; sect_ware: TSSectWare; paragraph: P);
|
||||
function Calc();
|
||||
function Do();override;
|
||||
|
||||
@@ -20,7 +20,7 @@ private
|
||||
[weakref]docx_components_ware_: Components;
|
||||
[weakref]sect_ware_: TSSectWare;
|
||||
[weakref]table_: Tbl;
|
||||
page_: PdfPage;
|
||||
[weakref]page_: TSPage;
|
||||
[weakref]range_array_: tableArray;
|
||||
point_: TSPoint;
|
||||
end;
|
||||
@@ -33,7 +33,7 @@ begin
|
||||
sect_ware_ := sect_ware;
|
||||
table_ := table;
|
||||
range_array_ := array();
|
||||
{self.}Page := page_;
|
||||
{self.}TSPage := page_;
|
||||
end;
|
||||
|
||||
function TSPdfTableRange.Calc();
|
||||
|
||||
Reference in New Issue
Block a user