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;