ComponentOne PDF for WPF and Silverlight
Adding Graphics
PDF for WPF and Silverlight Overview > Features: PDF for WPF and Silverlight > Adding Graphics

The C1PdfDocument class exposes several methods that allow you to add graphical elements to your documents, including lines, rectangles, ellipses, pies, arcs, rounded rectangles, polygons, Bezier curves, and so on.

The methods are a subset of those found in the .NET Graphics class, and use the same Brush and Pen classes to control the color and style of the lines and filled areas.

It is important to remember that PDF for WPF uses a coordinate system based on points, with the origin located at the top left of the page. (The default coordinate system for the .NET Graphics class is pixel-based.)

The example below illustrates how similar the graphics methods are between PDF for WPF and the .NET Graphics class. The sample declares a C1PdfDocument class called 'pdf' and calls method to draw pies, Bezier curve, and other graphical elements.

The point of the sample is that if you replaced the C1PdfDocument class with a regular .NET Graphics object, you would be able to compile the code and get the same results.

VB
Copy Code
' set up to draw
Dim rc As New Rect(0, 0, 300, 200)
Dim text As String = "Hello world of .NET Graphics and PDF." & vbCr & vbLf & "Nice to meet you."
Dim font As New Font("Times New Roman", 12, PdfFontStyle.Italic Or PdfFontStyle.Underline)
' draw on pdf document
Dim penWidth As Integer = 0
Dim penRGB As Byte = 0
pdf.FillPie(Colors.Red, rc, 0, 20F)
pdf.FillPie(Colors.Green, rc, 20F, 30F)
pdf.FillPie(Colors.Blue, rc, 60F, 12F)
pdf.FillPie(Colors.Orange, rc, -80F, -20F)
For startAngle As Single = 0 To 359 Step 40
Dim penColor As Color = Color.FromArgb(&Hff, penRGB, penRGB, penRGB)
Dim pen As New C1.WPF.Pdf.Pen(penColor, System.Math.Max(System.Threading.Interlocked.Increment(penWidth),penWidth - 1))
    penRGB = CByte(penRGB + 20)
    pdf.DrawArc(pen, rc, startAngle, 40F)
Next
pdf.DrawRectangle(Colors.Red, rc)
pdf.DrawString(text, font, Colors.Black, rc)
' show a Bezier curve
Dim pts = New Point() {New Point(400, 100), New Point(420, 30), New Point(500, 140), New Point(530, 20)}
' draw Bezier
pdf.DrawBezier(New C1.WPF.Pdf.Pen(Colors.Blue, 4), pts(0), pts(1), pts(2), pts(3))
' show Bezier control points
pdf.DrawLines(Colors.Gray, pts)
For Each pt As Point In pts
    pdf.FillRectangle(Colors.Red, pt.X - 2, pt.Y - 2, 4, 4)
Next
C#
Copy Code
// set up to draw
Rect rc = new Rect(0, 0, 300, 200);
string text = "Hello world of .NET Graphics and PDF.\r\nNice to meet you.";
Font font = new Font("Times New Roman", 12, PdfFontStyle.Italic | PdfFontStyle.Underline);

// draw on pdf document
int penWidth = 0;
byte penRGB = 0;
pdf.FillPie(Colors.Red, rc, 0, 20f);
pdf.FillPie(Colors.Green, rc, 20f, 30f);
pdf.FillPie(Colors.Blue, rc, 60f, 12f);
pdf.FillPie(Colors.Orange, rc, -80f, -20f);
for (float startAngle = 0; startAngle < 360; startAngle += 40)
{
    Color penColor = Color.FromArgb(0xff, penRGB, penRGB, penRGB);
    C1.WPF.Pdf.Pen pen = new C1.WPF.Pdf.Pen(penColor, penWidth++);
    penRGB = (byte)(penRGB + 20);
    pdf.DrawArc(pen, rc, startAngle, 40f);
}
pdf.DrawRectangle(Colors.Red, rc);
pdf.DrawString(text, font, Colors.Black, rc);

// show a Bezier curve
var pts = new Point[]
{
    new Point(400, 100), new Point(420,  30),
    new Point(500, 140), new Point(530,  20),
};

// draw Bezier 
pdf.DrawBezier(new C1.WPF.Pdf.Pen(Colors.Blue, 4), pts[0], pts[1], pts[2], pts[3]);

// show Bezier control points
pdf.DrawLines(Colors.Gray, pts);
foreach (Point pt in pts)
{
    pdf.FillRectangle(Colors.Red, pt.X - 2, pt.Y - 2, 4, 4);
}

Here is the resulting PDF document: