对range进行重构
This commit is contained in:
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user