291 lines
6.0 KiB
Plaintext
291 lines
6.0 KiB
Plaintext
Uses TSPdfEnumerations;
|
|
{$IFDEF LINUX}
|
|
separator := "/";
|
|
{$ELSE}
|
|
separator := "\\";
|
|
{$ENDIF}
|
|
|
|
alias := "";
|
|
path := "";
|
|
InitCmdParams(alias, path);
|
|
|
|
output_file := "line_demo.pdf";
|
|
output_file := path + separator + output_file;
|
|
|
|
page_title := "Line Demo";
|
|
pdf := new PdfFile();
|
|
|
|
// 默认字体
|
|
font := pdf.GetFont("Helvetica", "");
|
|
|
|
// 添加页面
|
|
page := pdf.AddPage();
|
|
|
|
// print the lines of the page
|
|
page.SetLineWidth(1);
|
|
width := page.GetWidth();
|
|
height := page.GetHeight();
|
|
page.Rectangle(50, 50, width - 100, height - 110);
|
|
page.Stroke();
|
|
|
|
// print the title of the page (with positioning center)
|
|
page.SetFontAndSize(font, 24);
|
|
tw := page.TextWidth(page_title);
|
|
page.BeginText();
|
|
page.MoveTextPos((width - tw) / 2, height - 50);
|
|
page.ShowText(page_title);
|
|
page.EndText();
|
|
|
|
page.SetFontAndSize(font, 10);
|
|
|
|
// Draw verious widths of lines
|
|
page.SetLineWidth(0);
|
|
DrawLine(page, 60, 770, "line width = 0");
|
|
|
|
page.SetLineWidth(1.0);
|
|
DrawLine(page, 60, 740, "line width = 1.0");
|
|
|
|
page.SetLineWidth(2.0);
|
|
DrawLine(page, 60, 710, "line width = 2.0");
|
|
|
|
// Line dash pattern
|
|
DASH_MODE1 := array(3);
|
|
DASH_MODE2 := array(3, 7);
|
|
DASH_MODE3 := array(8, 7, 2, 7);
|
|
page.SetLineWidth(1.0);
|
|
page.SetDash(DASH_MODE1, 1, 1);
|
|
DrawLine(page, 60, 680, "dash_ptn=[3, phase=1 -- 2 on, 3 off, 3 on..");
|
|
|
|
page.SetDash(DASH_MODE2, 2, 2);
|
|
DrawLine(page, 60, 650, "dash_ptn=[7, 3, phase=2 -- 5 on, 3 off, 7 on..");
|
|
|
|
page.SetDash(DASH_MODE3, 4, 0);
|
|
DrawLine(page, 60, 620, "dash_ptn=[8, 7, 2, 7, phase=0");
|
|
|
|
page.SetDash(array(), 0, 0);
|
|
page.SetLineWidth(30);
|
|
page.SetRGBStroke(0.0, 0.6, 0.0);
|
|
|
|
// Line Cap Style
|
|
page.SetLineCap(TSPdfEnumerations.BUTT_END);
|
|
DrawLine2(page, 60, 570, "PDF_BUTT_END");
|
|
|
|
page.SetLineCap(TSPdfEnumerations.ROUND_END);
|
|
DrawLine2(page, 60, 505, "PDF_ROUND_END");
|
|
|
|
page.SetLineCap(TSPdfEnumerations.PROJECTING_SQUARE_END);
|
|
DrawLine2(page, 60, 440, "PDF_PROJECTING_SQUARE_END");
|
|
|
|
// Line Join Style
|
|
page.SetLineWidth(30);
|
|
page.SetRGBStroke(0.0, 0.0, 0.5);
|
|
|
|
page.SetLineJoin(TSPdfEnumerations.MITER_JOIN);
|
|
page.MoveTo(120, 300);
|
|
page.LineTo(150, 340);
|
|
page.LineTo(200, 300);
|
|
page.Stroke();
|
|
page.BeginText();
|
|
page.MoveTextPos(60, 360);
|
|
page.ShowText("PDF_MITER_JOIN");
|
|
page.EndText();
|
|
|
|
page.SetLineJoin(TSPdfEnumerations.ROUND_JOIN);
|
|
page.MoveTo(120, 195);
|
|
page.LineTo(160, 235);
|
|
page.LineTo(200, 195);
|
|
page.Stroke();
|
|
page.BeginText();
|
|
page.MoveTextPos(60, 255);
|
|
page.ShowText("PDF_ROUND_JOIN");
|
|
page.EndText();
|
|
|
|
page.SetLineJoin(TSPdfEnumerations.BEVEL_JOIN);
|
|
page.MoveTo(120, 90);
|
|
page.LineTo(160, 130);
|
|
page.LineTo(200, 90);
|
|
page.Stroke();
|
|
page.BeginText();
|
|
page.MoveTextPos(60, 150);
|
|
page.ShowText("PDF_BEVEL_JOIN");
|
|
page.EndText();
|
|
|
|
// Draw Rectangle
|
|
page.SetLineWidth(2);
|
|
page.SetRGBStroke(0, 0, 0);
|
|
page.SetRGBFill(0.75, 0, 0);
|
|
|
|
DrawRect(page, 300, 770, "Stroke");
|
|
page.Stroke();
|
|
DrawRect(page, 300, 720, "Fill");
|
|
page.Fill();
|
|
DrawRect(page, 300, 670, "Fill then Stroke");
|
|
page.FillStroke();
|
|
|
|
// Clip Rect
|
|
page.GSave();
|
|
DrawRect(page, 300, 620, "Clip Rectangle");
|
|
page.Clip();
|
|
page.Stroke();
|
|
page.SetFontAndSize(font, 13);
|
|
|
|
page.BeginText();
|
|
page.MoveTextPos(290, 600);
|
|
page.SetTextLeading(12);
|
|
page.ShowText("Clip Clip Clip Clip Clip Clip Clip Clip Clip Clip");
|
|
page.ShowTextNextLine("Clip Clip Clip Clip Clip Clip Clip Clip Clip Clip");
|
|
page.ShowTextNextLine("Clip Clip Clip Clip Clip Clip Clip Clip Clip Clip");
|
|
page.EndText();
|
|
page.GRestore();
|
|
|
|
// Curve Example(CurveTo2)
|
|
x := 330;
|
|
y := 440;
|
|
x1 := 430;
|
|
y1 := 530;
|
|
x2 := 480;
|
|
y2 := 470;
|
|
x3 := 480;
|
|
y3 := 90;
|
|
|
|
page.SetRGBFill(0, 0, 0);
|
|
|
|
page.BeginText();
|
|
page.MoveTextPos(300, 540);
|
|
page.ShowText("CurveTo2(x1, y1, x2. y2)");
|
|
page.EndText();
|
|
|
|
page.BeginText();
|
|
page.MoveTextPos(x + 5, y - 5);
|
|
page.ShowText("Current point");
|
|
page.MoveTextPos(x1 - x, y1 - y);
|
|
page.ShowText("(x1, y1)");
|
|
page.MoveTextPos(x2 - x1, y2 - y1);
|
|
page.ShowText("(x2, y2)");
|
|
page.EndText();
|
|
|
|
page.SetDash(DASH_MODE1, 1, 0);
|
|
|
|
page.SetLineWidth(0.5);
|
|
page.MoveTo(x1, y1);
|
|
page.LineTo(x2, y2);
|
|
page.Stroke();
|
|
|
|
page.SetDash(array(), 0, 0);
|
|
|
|
page.SetLineWidth(1.5);
|
|
|
|
page.MoveTo(x, y);
|
|
page.CurveTo2(x1, y1, x2, y2);
|
|
page.Stroke();
|
|
|
|
// Curve Example(CurveTo3)
|
|
y -= 150;
|
|
y1 -= 150;
|
|
y2 -= 150;
|
|
|
|
page.BeginText();
|
|
page.MoveTextPos(300, 390);
|
|
page.ShowText("CurveTo3(x1, y1, x2. y2)");
|
|
page.EndText();
|
|
|
|
page.BeginText();
|
|
page.MoveTextPos(x + 5, y - 5);
|
|
page.ShowText("Current point");
|
|
page.MoveTextPos(x1 - x, y1 - y);
|
|
page.ShowText("(x1, y1)");
|
|
page.MoveTextPos(x2 - x1, y2 - y1);
|
|
page.ShowText("(x2, y2)");
|
|
page.EndText();
|
|
|
|
page.SetDash(DASH_MODE1, 1, 0);
|
|
|
|
page.SetLineWidth(0.5);
|
|
page.MoveTo(x, y);
|
|
page.LineTo(x1, y1);
|
|
page.Stroke();
|
|
|
|
page.SetDash(array(), 0, 0);
|
|
|
|
page.SetLineWidth(1.5);
|
|
page.MoveTo(x, y);
|
|
page.CurveTo3(x1, y1, x2, y2);
|
|
page.Stroke();
|
|
|
|
// Curve Example(CurveTo)
|
|
y -= 150;
|
|
y1 -= 160;
|
|
y2 -= 130;
|
|
x2 += 10;
|
|
|
|
page.BeginText();
|
|
page.MoveTextPos(300, 240);
|
|
page.ShowText("CurveTo(x1, y1, x2. y2, x3, y3)");
|
|
page.EndText();
|
|
|
|
page.BeginText();
|
|
page.MoveTextPos(x + 5, y - 5);
|
|
page.ShowText("Current point");
|
|
page.MoveTextPos(x1 - x, y1 - y);
|
|
page.ShowText("(x1, y1)");
|
|
page.MoveTextPos(x2 - x1, y2 - y1);
|
|
page.ShowText("(x2, y2)");
|
|
page.MoveTextPos(x3 - x2, y3 - y2);
|
|
page.ShowText("(x3, y3)");
|
|
page.EndText();
|
|
|
|
page.SetDash(DASH_MODE1, 1, 0);
|
|
|
|
page.SetLineWidth(0.5);
|
|
page.MoveTo(x, y);
|
|
page.LineTo(x1, y1);
|
|
page.Stroke();
|
|
page.MoveTo(x2, y2);
|
|
page.LineTo(x3, y3);
|
|
page.Stroke();
|
|
|
|
page.SetDash(array(), 0, 0);
|
|
|
|
page.SetLineWidth(1.5);
|
|
page.MoveTo(x, y);
|
|
page.CurveTo(x1, y1, x2, y2, x3, y3);
|
|
page.Stroke();
|
|
|
|
err := pdf.SaveToFile(alias, output_file);
|
|
echo "SaveToFile::\t", "err := ", format("%x", err), "\toutput_file := ", output_file, "\n";
|
|
return;
|
|
|
|
Function DrawLine(page, x, y, text);
|
|
Begin
|
|
page.BeginText();
|
|
page.MoveTextPos(x, y - 10);
|
|
page.ShowText(text);
|
|
page.EndText();
|
|
|
|
page.MoveTo(x, y - 15);
|
|
page.LineTo(x + 200, y - 15);
|
|
page.Stroke();
|
|
End;
|
|
|
|
Function DrawLine2(page, x, y, text);
|
|
Begin
|
|
page.BeginText();
|
|
page.MoveTextPos(x, y);
|
|
page.ShowText(text);
|
|
page.EndText();
|
|
|
|
page.MoveTo(x + 30, y - 25);
|
|
page.LineTo(x + 160, y - 25);
|
|
page.Stroke();
|
|
End;
|
|
|
|
Function DrawRect(page, x, y, text);
|
|
Begin
|
|
page.BeginText();
|
|
page.MoveTextPos(x, y - 10);
|
|
page.ShowText(text);
|
|
page.EndText();
|
|
|
|
page.Rectangle(x, y - 40, 220, 25);
|
|
End;
|