对range进行重构

This commit is contained in:
csh
2024-07-04 11:20:10 +08:00
parent 999a7ef2d0
commit 51dc8596be
13 changed files with 562 additions and 422 deletions
+27
View File
@@ -0,0 +1,27 @@
type TSPdfBasicRange = class
public
function Create();
function Do();virtual;
public
StartX: real;
StartY: real; // range的起始坐标(x,y)
EndX: real;
EndY: real; // range的结束坐标(x,y)
Width: real;
FixedHeight: real;
DynamicHeight: real;
Page: PdfPage;
end;
function TSPdfBasicRange.Create();
begin
self.StartX := 0;
self.StartY := 0;
self.EndX := 0;
self.EndY := 0;
self.Width := 0;
self.FixedHeight := 0;
self.DynamicHeight := 0;
self.Page := nil;
end;
+28
View File
@@ -0,0 +1,28 @@
type TSPdfImageRange = class(TSPdfBasicRange)
public
function Create();
function Do();override;
public
Image: PdfImage;
end;
function TSPdfImageRange.Create();
begin
class(TSPdfBasicRange).Create();
self.Image := nil;
end;
function TSPdfImageRange.Do();
begin
// println("image = {}, x = {}, y = {}, w = {}, h = {}", self.image, self.endx, self.endy, self.width, self.DynamicHeight);
self.Page.DrawImage(self.Image, self.EndX, self.EndY, self.Width, self.DynamicHeight);
if sysparams["_PDF_IMAGE_DEBUG_"] then
begin
self.Page.SetLineWidth(0.1);
self.Page.SetRGBStroke(0.8, 0.8, 0);
self.Page.Rectangle(self.EndX, self.EndY, self.Width, self.DynamicHeight);
self.Page.Stroke();
end
end;
+22
View File
@@ -0,0 +1,22 @@
type TSPdfRectangleRange = class(TSPdfBasicRange)
public
function Create();
function Do();override;
end;
function TSPdfRectangleRange.Create();
begin
class(TSPdfBasicRange).Create();
end;
function TSPdfRectangleRange.Do();override;
begin
// self.Page.SetRGBStroke(1.0, 0.0, 0.0);
// println("page = {}, endx = {}, endy = {}, DynamicHeight = {}, Width = {}", self.Page, self.EndX, self.EndY, self.DynamicHeight, self.Width);
self.Page.SetGrayStroke(0.5);
self.Page.SetLineWidth(0.5);
self.Page.Rectangle(self.EndX, self.EndY - self.DynamicHeight, self.Width, self.DynamicHeight);
self.Page.Stroke();
self.Page.SetGrayStroke(0);
end;
+43
View File
@@ -0,0 +1,43 @@
type TSPdfTextRange = class(TSPdfBasicRange)
uses TSColorToolKit;
public
function Create();
function Do();override;
public
RPr: RPr;
Text: string;
Font: PdfFont;
end;
function TSPdfTextRange.Create();
begin
class(TSPdfBasicRange).Create();
self.RPr := nil;
self.Text := "";
self.Font := nil;
end;
function TSPdfTextRange.Do();
begin
// println("text = {}, endx = {}, endy = {}, width = {}, page = {}", ansiToUtf8(text), endx, endy, width, page);
[r, g, b] := array(0, 0, 0);
if self.RPr.Color.Val then [r, g, b] := TSColorToolKit.HexToRGB(self.RPr.Color.Val);
self.Page.SetRGBFill(r / 255, g / 255, b / 255);
self.Page.SetFontAndSize(self.Font, self.RPr.Sz.Val);
self.Page.BeginText();
self.Page.TextOut(self.EndX, self.EndY, self.Text);
self.Page.EndText();
self.Page.SetRGBFill(0, 0, 0);
if sysparams["_PDF_TEXT_DEBUG_"] then
begin
self.Page.SetLineWidth(0.1);
self.Page.SetRGBStroke(1.0, 0.5, 0.0);
self.Page.MoveTo(0, self.EndY);
self.Page.LineTo(600, self.EndY);
self.Page.Stroke();
end
end;