Tuesday, 05 April 2011 07:21
PDF DrawImage in C#, VB.NET
The sample demonstrates how to draw image in PDF document.
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
Published in
Drawing