PDF DrawImage in C#, VB.NET

  • Demo
  • C# source
  • VB.Net source

The sample demonstrates how to draw image in PDF document.

Download DrawImage.pdf

using System;
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;

namespace DrawImage
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a pdf document.
            PdfDocument doc = new PdfDocument();

            // Create one page
            PdfPageBase page = doc.Pages.Add();

            TransformText(page);
            DrawImage(page);
            TransformImage(page);

            //Save pdf file.
            doc.SaveToFile("DrawImage.pdf");
            doc.Close();

            //Launching the Pdf file.
            System.Diagnostics.Process.Start("DrawImage.pdf");
        }

        private static void TransformImage(PdfPageBase page)
        {
            //save graphics state
            PdfGraphicsState state = page.Canvas.Save();

            //Draw the text - transform           
            PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 18f);
            PdfSolidBrush brush1 = new PdfSolidBrush(Color.Blue);
            PdfSolidBrush brush2 = new PdfSolidBrush(Color.CadetBlue);
            PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Center);

            page.Canvas.TranslateTransform(page.Canvas.ClientSize.Width / 2, 20);
            page.Canvas.DrawString("Sales Report Chart", font, brush1, 0, 0, format);

            page.Canvas.ScaleTransform(1f, -0.8f);
            page.Canvas.DrawString("Sales Report Chart", font, brush2, 0, -2 * 18 * 1.2f, format);
            //restor graphics
            page.Canvas.Restore(state);
        }

        private static void DrawImage(PdfPageBase page)
        {
            PdfImage image = PdfImage.FromFile(@"SalesReportChart.png");
            float width = image.Width * 0.75f;
            float height = image.Height * 0.75f;
            float x = (page.Canvas.ClientSize.Width - width) / 2;

            page.Canvas.DrawImage(image, x, 60, width, height);
        }

        private static void TransformText(PdfPageBase page)
        {
            PdfImage image = PdfImage.FromFile(@"SalesReportChart.png");
            int skewX = 20;
            int skewY = 20;
            float scaleX = 0.2f;
            float scaleY = 0.6f;
            int width = (int)((image.Width + image.Height * Math.Tan(Math.PI * skewX / 180)) * scaleX);
            int height = (int)((image.Height + image.Width * Math.Tan(Math.PI * skewY / 180)) * scaleY);
            PdfTemplate template = new PdfTemplate(width, height);
            template.Graphics.ScaleTransform(scaleX, scaleY);
            template.Graphics.SkewTransform(skewX, skewY);
            template.Graphics.DrawImage(image, 0, 0);

            //save graphics state
            PdfGraphicsState state = page.Canvas.Save();
            page.Canvas.TranslateTransform(page.Canvas.ClientSize.Width - 50, 260);
            float offset = (page.Canvas.ClientSize.Width - 100) / 12;
            for (int i = 0; i < 12; i++)
            {
                page.Canvas.TranslateTransform(-offset, 0);
                page.Canvas.SetTransparency(i / 12.0f);
                page.Canvas.DrawTemplate(template, new PointF(0, 0));
            }

            //restor graphics
            page.Canvas.Restore(state);
        }
    }
}

Imports System.Drawing
Imports Spire.Pdf
Imports Spire.Pdf.Graphics

Namespace DrawImage
    Friend Class Program
        Shared Sub Main(ByVal args() As String)
            'Create a pdf document.
            Dim doc As New PdfDocument()

            ' Create one page
            Dim page As PdfPageBase = doc.Pages.Add()

            TransformText(page)
            DrawImage(page)
            TransformImage(page)

            'Save pdf file.
            doc.SaveToFile("DrawImage.pdf")
            doc.Close()

            'Launching the Pdf file.
            Process.Start("DrawImage.pdf")
        End Sub

        Private Shared Sub TransformImage(ByVal page As PdfPageBase)
            'save graphics state
            Dim state As PdfGraphicsState = page.Canvas.Save()

            'Draw the text - transform           
            Dim font As New PdfFont(PdfFontFamily.Helvetica, 18.0F)
            Dim brush1 As New PdfSolidBrush(Color.Blue)
            Dim brush2 As New PdfSolidBrush(Color.CadetBlue)
            Dim format As New PdfStringFormat(PdfTextAlignment.Center)

            page.Canvas.TranslateTransform(page.Canvas.ClientSize.Width \ 2, 20)
            page.Canvas.DrawString("Sales Report Chart", font, brush1, 0, 0, format)

            page.Canvas.ScaleTransform(1.0F, -0.8F)
            page.Canvas.DrawString("Sales Report Chart", font, brush2, 0, -2 * 18 * 1.2F, format)
            'restor graphics
            page.Canvas.Restore(state)
        End Sub

        Private Shared Sub DrawImage(ByVal page As PdfPageBase)
            Dim image As PdfImage = PdfImage.FromFile("SalesReportChart.png")
            Dim width As Single = image.Width * 0.75F
            Dim height As Single = image.Height * 0.75F
            Dim x As Single = (page.Canvas.ClientSize.Width - width) / 2

            page.Canvas.DrawImage(image, x, 60, width, height)
        End Sub

        Private Shared Sub TransformText(ByVal page As PdfPageBase)
            Dim image As PdfImage = PdfImage.FromFile("SalesReportChart.png")
            Dim skewX As Integer = 20
            Dim skewY As Integer = 20
            Dim scaleX As Single = 0.2F
            Dim scaleY As Single = 0.6F
            Dim width As Integer = CInt(Fix((image.Width + image.Height * Math.Tan(Math.PI * skewX \ 180)) * scaleX))
            Dim height As Integer = CInt(Fix((image.Height + image.Width * Math.Tan(Math.PI * skewY \ 180)) * scaleY))
            Dim template As New PdfTemplate(width, height)
            template.Graphics.ScaleTransform(scaleX, scaleY)
            template.Graphics.SkewTransform(skewX, skewY)
            template.Graphics.DrawImage(image, 0, 0)

            'save graphics state
            Dim state As PdfGraphicsState = page.Canvas.Save()
            page.Canvas.TranslateTransform(page.Canvas.ClientSize.Width - 50, 260)
            Dim offset As Single = (page.Canvas.ClientSize.Width - 100) / 12
            For i As Integer = 0 To 11
                page.Canvas.TranslateTransform(-offset, 0)
                page.Canvas.SetTransparency(i / 12.0F)
                page.Canvas.DrawTemplate(template, New PointF(0, 0))
            Next i

            'restor graphics
            page.Canvas.Restore(state)
        End Sub
    End Class
End Namespace