Tuesday, 24 July 2012 05:41

Draw PDF Image in WPF

Drawing PDF image in WPF is not as easy as most of developers imagine. Getting a beautifully  matched PDF text and image requires them to properly set both the image size and image position in the PDF document. Any unsuitably handled in each aspect may lead the text covered by the PDF image. This solution is offered for you to draw PDF image in WPF applications without the worry above.

 

Spire.PDF for WPF is a WPF PDF component which provides great convenience in reading, writing and modifying PDF documents without using Adobe Acrobat or any third party component library. Spire.PDF for WPF contains a namespace “Spire.Pdf.Graphics” in which there are four versions of DrawImage method that can be applied to insert PdfImage in PDF document.

 

Please feel free to Download Spire.PDF for WPF and draw PDF Image in WPF, Below is an effective screenshot of the PDF image.

 

Draw Image in PDF

 

Now this is the key procedure of PDF image in WPF.

 

1, Load PDF and image file from system.
Two files are demanded in this step: a PDF file in which the image will be inserted and an image file.

 

[C#]
doc.LoadFromFile(@"..\Sample.pdf");
System.Drawing.Image image = System.Drawing.Image.FromFile(@"..\MS.jpg");
[VB.NET]
doc.LoadFromFile("..\Sample.pdf")
Dim image As System.Drawing.Image = System.Drawing.Image.FromFile("..\MS.jpg")

 

2,Adjust image size and draw image in PDF file.
In this step, one way to use DrawImage method is demonstrated with two parameters: the source image and its position.

 

[C#]
//adjust image size
int width = image.Width;
int height = image.Height;
float schale = 0.7f;
System.Drawing.Size size = new System.Drawing.Size((int)(width * schale), (int)(height * schale));
Bitmap schaleImage = new Bitmap(image, size);
//draw image into the first PDF page at specific position 
PdfImage pdfImage = PdfImage.FromImage(schaleImage);
PdfPageBase page0 = doc.Pages[0];
PointF position = new PointF((page0.Canvas.ClientSize.Width - schaleImage.Width) / 8, 10);
page0.Canvas.DrawImage(pdfImage, position);

[VB.NET]
'adjust image size
Dim width As Integer = image.Width
Dim height As Integer = image.Height
Dim schale As Single = 0.7F
Dim size As New System.Drawing.Size(CInt(Math.Truncate(width * schale)), CInt(Math.Truncate(height * schale)))
Dim schaleImage As New Bitmap(image, size)
'draw image into the first PDF page at specific position 
Dim pdfImage__1 As PdfImage = PdfImage.FromImage(schaleImage)
Dim page0 As PdfPageBase = doc.Pages(0)
Dim position As New PointF((page0.Canvas.ClientSize.Width - schaleImage.Width) / 8, 10)
page0.Canvas.DrawImage(pdfImage__1, position)

 

It is obvious that Spire.PDF for WPF can realize PDF image task in minutes. Besides, Spire.PDF for WPF also has the functions of PDF protect, PDF conversion, PDF drawing, click to know more about this Professional WPF PDF Components.

 

Published in Program Guide WPF
Wednesday, 04 July 2012 08:29

Merge Multiple PDF Files into One in WPF

Before we start our topic, let us first play a game. At the top of this page, there are nine categories. When we move our mouse on .NET, a dropdown list which shows all e-iceblue .NET products is displayed as the picture below:

Merge PDF Documents

Imagine, if we demonstrate every product on .NET out of the dropdown list on the top, what will this page be? The webpage will be rambling and disordered. As a result, visitors will hardly search what they want and finally have to leave disappointedly.

By the same token, if we do not merge PDF files of similar content to one document, all the information of various classes will mix together. We have no choice but to spend much time on finding the right files. While our work turns more efficient when we use PDF merge function. Furthermore, opening more PDF files at the same time always annoys people in that the windows are mistakenly switched. Finally, merge PDF does not mean gathering tens of PDF files into one. More reasonable choice is to amalgamate PDF files of few pages into single one. Those of numerous pages should be combined with merged PDF files in one folder for the convenience of reading.

Spire.PDF for WPF, as a professional PDF component, is a best hand for users to merge multiple PDF files on WPF application with C#, VB.NET. The whole procedure can be performed by below three simple steps.

Step 1. Create a C#/VB.NET Project

  1. Free download and correctly install Spire.PDF for WPF on system.
  2. Create “PDF merge” project in WPF Application with C#/VB.NET.
  3. Add a button in MainWindow.
  4. Add Spire.Pdf.Wpf.dll and System.Drawing as references.

Step 2 Merge PDF Files into One

1. Load three PDF documents from system.
[C#]
            //pdf document list
            String[] files = new String[]
            {
                @"D:\e-iceblue\Spire.PDF\Demos\Data\DigitalSignature.pdf",
                @"D:\e-iceblue\Spire.PDF\Demos\Data\Sample2.pdf",
                @"D:\e-iceblue\Spire.PDF\Demos\Data\ImageWaterMark.pdf"                            
            };
[VB.NET]
'pdf document list
Dim files As [String]() = New [String]() {"D:\e-iceblue\Spire.PDF\Demos\Data\DigitalSignature.pdf", "D:\e-iceblue\Spire.PDF\Demos\Data\Sample2.pdf", "D:\e-iceblue\Spire.PDF\Demos\Data\ImageWaterMark.pdf"}
          

Step 2. Open the three PDF files in a new document and import all pages into a new one

[C#]
           //open pdf documents            
            PdfDocument[] docs = new PdfDocument[files.Length];
            for (int i = 0; i < files.Length; i++)
            {
                docs[i] = new PdfDocument(files[i]);
            }
            //append document
            docs[0].AppendPage(docs[1]);
            //import pages
            for (int i = 0; i < docs[2].Pages.Count; i = i + 2)
            {
                docs[0].InsertPage(docs[2], i);
            }
[VB.NET]
	'open pdf documents            
	Dim docs As PdfDocument() = New PdfDocument(files.Length - 1) {}
	For i As Integer = 0 To files.Length - 1
		docs(i) = New PdfDocument(files(i))
	Next
	'append document
	docs(0).AppendPage(docs(1))
	'import pages
	Dim i As Integer = 0
	While i < docs(2).Pages.Count
		docs(0).InsertPage(docs(2), i)
		i = i + 2
	End While
          

Step 3. Save and Preview the Merged PDF File

[C#]
            docs[0].SaveToFile("MergeDocuments.pdf");
            foreach (PdfDocument doc in docs)
            {
                doc.Close();
            }
            PDFDocumentViewer("MergeDocuments.pdf");
[VB.NET]
docs(0).SaveToFile("MergeDocuments.pdf")
For Each doc As PdfDocument In docs
	doc.Close()
Next
PDFDocumentViewer("MergeDocuments.pdf")

Effective Screeshot

Merge PDF Documents

Spire.PDF is a PDF document creation component that enables your .NET/Silverlight/WPF applications to read, write and manipulate PDF documents without using Adobe Acrobat.

Published in Program Guide WPF
Wednesday, 27 June 2012 08:01

Create PDF Digital Certificate in WPF

Digital Certificate, known as identity certificate, is an electronic document that uses a digital signature to bind together a public key with an identity. As long as the PDF digital certificate is created, it demonstrates the authority of a digital document. This section will introduce a solution to create PDF digital certificate for WPF via a WPF PDF component.

Spire.PDF for WPF , a WPF library which can fully control your PDF documents, enables you to create PDF digital certificate in a simple way. First, please see the effect of this digital certificate task as below picture:

Create Digital Certificate

Before viewing the code, please Download Spire.PDF for WPF and install it in system.

In this solution, first you need to load your .pfx file from system. Then, create a new instance of Spire.Pdf.Security.PdfCertificate class with two parameters passed, one is the certificate file and the other is the password of the imported .pfx file. After creating a PdfSignature class instance, you can add DocumentPermissions to be AllowComments, AllowFormFill and ForbidChanges.

When you create the PdfSignature class instance, there are four parameters. The parameter "page" enables you to choose which PDF page you decide to sign the digital certificate.

[C#]
String pfxPath = @"..\Data\Demo.pfx";
PdfCertificate cert = new PdfCertificate(pfxPath, "e-iceblue");
PdfSignature signature = new PdfSignature(doc, page, cert, "demo");
signature.ContactInfo = "Harry Hu";
signature.Certificated = true;
signature.DocumentPermissions = PdfCertificationFlags.AllowFormFill;
[VB.NET]
Dim pfxPath As String = "..\Data\Demo.pfx"
Dim cert As New PdfCertificate(pfxPath, "e-iceblue")
Dim signature As New PdfSignature(doc, page, cert, "demo")
signature.ContactInfo = "Harry Hu"
signature.Certificated = True
signature.DocumentPermissions = PdfCertificationFlags.AllowFormFill

Spire.PDF for WPF enables your WPF applications to read, write and manipulate PDF documents without using Adobe Acrobat or any third party component library, click to know more about this WPF PDF component.

Published in Program Guide WPF
Wednesday, 27 June 2012 07:40

Draw PDF Image Watermark in WPF

Image watermark can be used to beautify as well as specify your PDF document. A properly managed PDF document with suitable image watermark can both give a different feeling and show the content or background to its readers. For example, if your PDF document is about environment protection, you can insert an image related to this topic. Spire.PDF for WPF allows you to easily draw a PDF image watermark for WPF.

Before you start, please make sure that Spire.PDF for WPF (or Spire.Office for WPF) is correctly installed on your system. Please follow the below procedure to realize this task.

Step 1: Create a new project

  • Create a new project in WPF Application
  • Add a button in MainWindow and set the button Content property to be "Run".
  • Add Spire.Pdf.Wpf.dll and System.Drawing as references. After adding the namespaces, you can view the below codes.
[C#]
using System.Drawing;
using System.Drawing.Imaging;
using Spire.Pdf;
using Spire.Pdf.Graphics;
namespace WPFPDFwatermark
{
    /// 
    /// Interaction logic for MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {

        }
    }
}
[VB.NET]
Imports System.Drawing
Imports System.Drawing.Imaging
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Namespace WPFPDFwatermark
	''' 
	''' Interaction logic for MainWindow.xaml
	''' 
	Public Partial Class MainWindow
		Inherits Window
		Public Sub New()
			InitializeComponent()
		End Sub

		Private Sub button1_Click(sender As Object, e As RoutedEventArgs)
	          End Sub
	End Class
End Namespace

Step 2: Create a new PDF document and draw image watermark in it

After creating a new PDF document and setting its margin, you need to add a page in it. And then, insert the image watermark in the page you just added.

[C#]
            //Create a pdf document.
            PdfDocument doc = new PdfDocument();

            //margin
            PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
            PdfMargins margin = new PdfMargins();
            margin.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
            margin.Bottom = margin.Top;
            margin.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
            margin.Right = margin.Left;

            // Create one page
            PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, margin);
            System.Drawing.Image img = System.Drawing.Image.FromFile(@"D:\e-iceblue\Spire.PDF\Demos\Data\Backgroundimage.png");
            page.BackgroundImage = img;

[VB.NET]
	'Create a pdf document.
	Dim doc As New PdfDocument()

	'margin
	Dim unitCvtr As New PdfUnitConvertor()
	Dim margin As New PdfMargins()
	margin.Top = unitCvtr.ConvertUnits(2.54F, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point)
	margin.Bottom = margin.Top
	margin.Left = unitCvtr.ConvertUnits(3.17F, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point)
	margin.Right = margin.Left

	' Create one page
	Dim page As PdfPageBase = doc.Pages.Add(PdfPageSize.A4, margin)
	Dim img As System.Drawing.Image = System.Drawing.Image.FromFile("D:\e-iceblue\Spire.PDF\Demos\Data\Backgroundimage.png")
	page.BackgroundImage = img

Step 3: Draw page in PDF document

This step shows you to insert page header, title, icon and content in the page and set their formats. Actually, not all the PDF file must have a header or icon or reference content. So it is better to choose what you need according to your own situation.

[C#]
    private static void DrawPage(PdfPageBase page)
        {
            float pageWidth = page.Canvas.ClientSize.Width;
            float y = 50;

            //page header
            PdfPen pen1 = new PdfPen(System.Drawing.Color.LightGray, 1f);
            PdfBrush brush1 = new PdfSolidBrush(System.Drawing.Color.LightGray);
            PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Arial", 8f, System.Drawing.FontStyle.Italic));
            PdfStringFormat format1 = new PdfStringFormat(PdfTextAlignment.Right);
            String text = "Demo of Spire.Pdf";
            page.Canvas.DrawString(text, font1, brush1, pageWidth, y, format1);
            SizeF size = font1.MeasureString(text, format1);
            y = y + size.Height + 1;
            page.Canvas.DrawLine(pen1, 0, y, pageWidth, y);

            //title
            y = y + 5;
            PdfBrush brush2 = new PdfSolidBrush(System.Drawing.Color.Black);
            PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("Arial", 16f, System.Drawing.FontStyle.Bold));
            PdfStringFormat format2 = new PdfStringFormat(PdfTextAlignment.Center);
            format2.CharacterSpacing = 1f;
            text = "Summary of Science";
            page.Canvas.DrawString(text, font2, brush2, pageWidth / 2, y, format2);
            size = font2.MeasureString(text, format2);
            y = y + size.Height + 6;

            //icon
            PdfImage image = PdfImage.FromFile(@"D:\e-iceblue\Spire.PDF\Demos\Data\leaf.jpg");
            page.Canvas.DrawImage(image, new PointF(pageWidth - image.PhysicalDimension.Width, y));
            float imageLeftSpace = pageWidth - image.PhysicalDimension.Width - 2;
            float imageBottom = image.PhysicalDimension.Height + y;

            //refenrence content
            PdfTrueTypeFont font3 = new PdfTrueTypeFont(new Font("Arial", 9f));
            PdfStringFormat format3 = new PdfStringFormat();
            format3.ParagraphIndent = font3.Size * 2;
            format3.MeasureTrailingSpaces = true;
            format3.LineSpacing = font3.Size * 1.5f;
            String text1 = "(All text and picture from ";
            String text2 = "Wikipedia";
            String text3 = ", the free encyclopedia)";
            page.Canvas.DrawString(text1, font3, brush2, 0, y, format3);

            size = font3.MeasureString(text1, format3);
            float x1 = size.Width;
            format3.ParagraphIndent = 0;
            PdfTrueTypeFont font4 = new PdfTrueTypeFont(new Font("Arial", 9f,System.Drawing. FontStyle.Underline));
            PdfBrush brush3 = PdfBrushes.Blue;
            page.Canvas.DrawString(text2, font4, brush3, x1, y, format3);
            size = font4.MeasureString(text2, format3);
            x1 = x1 + size.Width;

            page.Canvas.DrawString(text3, font3, brush2, x1, y, format3);
            y = y + size.Height;

            //content
            PdfStringFormat format4 = new PdfStringFormat();
            text = System.IO.File.ReadAllText(@"D:\e-iceblue\Spire.PDF\Demos\Data\Summary_of_Science.txt");
            PdfTrueTypeFont font5 = new PdfTrueTypeFont(new Font("Arial", 10f));
            format4.LineSpacing = font5.Size * 1.5f;
            PdfStringLayouter textLayouter = new PdfStringLayouter();
            float imageLeftBlockHeight = imageBottom - y;
            PdfStringLayoutResult result
                = textLayouter.Layout(text, font5, format4, new SizeF(imageLeftSpace, imageLeftBlockHeight));
            if (result.ActualSize.Height < imageBottom - y)
            {
                imageLeftBlockHeight = imageLeftBlockHeight + result.LineHeight;
                result = textLayouter.Layout(text, font5, format4, new SizeF(imageLeftSpace, imageLeftBlockHeight));
            }
            foreach (LineInfo line in result.Lines)
            {
                page.Canvas.DrawString(line.Text, font5, brush2, 0, y, format4);
                y = y + result.LineHeight;
            }
            PdfTextWidget textWidget = new PdfTextWidget(result.Remainder, font5, brush2);
            PdfTextLayout textLayout = new PdfTextLayout();
            textLayout.Break = PdfLayoutBreakType.FitPage;
            textLayout.Layout = PdfLayoutType.Paginate;
            RectangleF bounds = new RectangleF(new PointF(0, y), page.Canvas.ClientSize);
            textWidget.StringFormat = format4;
            textWidget.Draw(page, bounds, textLayout);
        }
[VB.NET]
Private Shared Sub DrawPage(page As PdfPageBase)
	Dim pageWidth As Single = page.Canvas.ClientSize.Width
	Dim y As Single = 50

	'page header
	Dim pen1 As New PdfPen(System.Drawing.Color.LightGray, 1F)
	Dim brush1 As PdfBrush = New PdfSolidBrush(System.Drawing.Color.LightGray)
	Dim font1 As New PdfTrueTypeFont(New Font("Arial", 8F, System.Drawing.FontStyle.Italic))
	Dim format1 As New PdfStringFormat(PdfTextAlignment.Right)
	Dim text As [String] = "Demo of Spire.Pdf"
	page.Canvas.DrawString(text, font1, brush1, pageWidth, y, format1)
	Dim size As SizeF = font1.MeasureString(text, format1)
	y = y + size.Height + 1
	page.Canvas.DrawLine(pen1, 0, y, pageWidth, y)

	'title
	y = y + 5
	Dim brush2 As PdfBrush = New PdfSolidBrush(System.Drawing.Color.Black)
	Dim font2 As New PdfTrueTypeFont(New Font("Arial", 16F, System.Drawing.FontStyle.Bold))
	Dim format2 As New PdfStringFormat(PdfTextAlignment.Center)
	format2.CharacterSpacing = 1F
	text = "Summary of Science"
	page.Canvas.DrawString(text, font2, brush2, pageWidth / 2, y, format2)
	size = font2.MeasureString(text, format2)
	y = y + size.Height + 6

	'icon
	Dim image As PdfImage = PdfImage.FromFile("D:\e-iceblue\Spire.PDF\Demos\Data\leaf.jpg")
	page.Canvas.DrawImage(image, New PointF(pageWidth - image.PhysicalDimension.Width, y))
	Dim imageLeftSpace As Single = pageWidth - image.PhysicalDimension.Width - 2
	Dim imageBottom As Single = image.PhysicalDimension.Height + y

	'refenrence content
	Dim font3 As New PdfTrueTypeFont(New Font("Arial", 9F))
	Dim format3 As New PdfStringFormat()
	format3.ParagraphIndent = font3.Size * 2
	format3.MeasureTrailingSpaces = True
	format3.LineSpacing = font3.Size * 1.5F
	Dim text1 As [String] = "(All text and picture from "
	Dim text2 As [String] = "Wikipedia"
	Dim text3 As [String] = ", the free encyclopedia)"
	page.Canvas.DrawString(text1, font3, brush2, 0, y, format3)

	size = font3.MeasureString(text1, format3)
	Dim x1 As Single = size.Width
	format3.ParagraphIndent = 0
	Dim font4 As New PdfTrueTypeFont(New Font("Arial", 9F, System.Drawing.FontStyle.Underline))
	Dim brush3 As PdfBrush = PdfBrushes.Blue
	page.Canvas.DrawString(text2, font4, brush3, x1, y, format3)
	size = font4.MeasureString(text2, format3)
	x1 = x1 + size.Width

	page.Canvas.DrawString(text3, font3, brush2, x1, y, format3)
	y = y + size.Height

	'content
	Dim format4 As New PdfStringFormat()
	text = System.IO.File.ReadAllText("D:\e-iceblue\Spire.PDF\Demos\Data\Summary_of_Science.txt")
	Dim font5 As New PdfTrueTypeFont(New Font("Arial", 10F))
	format4.LineSpacing = font5.Size * 1.5F
	Dim textLayouter As New PdfStringLayouter()
	Dim imageLeftBlockHeight As Single = imageBottom - y
	Dim result As PdfStringLayoutResult = textLayouter.Layout(text, font5, format4, New SizeF(imageLeftSpace, imageLeftBlockHeight))
	If result.ActualSize.Height < imageBottom - y Then
		imageLeftBlockHeight = imageLeftBlockHeight + result.LineHeight
		result = textLayouter.Layout(text, font5, format4, New SizeF(imageLeftSpace, imageLeftBlockHeight))
	End If
	For Each line As LineInfo In result.Lines
		page.Canvas.DrawString(line.Text, font5, brush2, 0, y, format4)
		y = y + result.LineHeight
	Next
	Dim textWidget As New PdfTextWidget(result.Remainder, font5, brush2)
	Dim textLayout As New PdfTextLayout()
	textLayout.Break = PdfLayoutBreakType.FitPage
	textLayout.Layout = PdfLayoutType.Paginate
	Dim bounds As New RectangleF(New PointF(0, y), page.Canvas.ClientSize)
	textWidget.StringFormat = format4
	textWidget.Draw(page, bounds, textLayout)
End Sub

Step 4: Save and launch the file

[C#]
            //Save pdf file.
            doc.SaveToFile("ImageWaterMark.pdf");
            doc.Close();
            //Launching the Pdf file.
            System.Diagnostics.Process.Start("ImageWaterMark.pdf");
[VB.NET]
	'Save pdf file.
	doc.SaveToFile("ImageWaterMark.pdf")
	doc.Close()
	'Launching the Pdf file.
	System.Diagnostics.Process.Start("ImageWaterMark.pdf")

Effective Screeshot:

Add Image Watermark in PDF

Published in Program Guide WPF
Tuesday, 26 June 2012 02:17

How to Draw Text in PDF Document in WPF

Text enjoys the same popularity whatever it is in PDF documents or in word files. Without it, people can hardly show their real purpose even with the help of images, tables, graphics or hyperlinks. Spire.PDF for WPF not only enables you to easily draw text in PDF document, but also allows you to align, rotate, transform Text and set text font & color in minutes.

Before you start, please make sure that Spire.PDF for WPF (or Spire.Office for WPF) is correctly installed on your system. Please follow the below procedure to realize this task.

Step 1: Create a new project

  • Create a new project in WPF Application
  • Add a button in MainWindow and set the button Content property to be "Run".
  • Add Spire.Pdf.Wpf.dll and System.Drawing as references. After adding the namespaces, you can view the below codes.
[C#]
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;

namespace WPFPDFtext
{
    /// 
    /// Interaction logic for MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {

        }
    }
}
[VB.NET]
Imports System.Drawing
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Namespace WPFPDFtext
	''' 
	''' Interaction logic for MainWindow.xaml
	''' 
	Public Partial Class MainWindow
		Inherits Window
		Public Sub New()
			InitializeComponent()
		End Sub

		Private Sub button1_Click(sender As Object, e As RoutedEventArgs)
	          End Sub
	End Class
End Namespace

Step 2: Draw text of various styles in PDF document

Create a new PDF document and add a page in it

[C#]
            //Create a pdf document.
            PdfDocument doc = new PdfDocument();

            // Create one page
            PdfPageBase page = doc.Pages.Add();
[VB.NET]
	'Create a pdf document.
	Dim doc As New PdfDocument()

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

Draw text in the page

[C#]
        private static void DrawText(PdfPageBase page)
        {
            //save graphics state
            PdfGraphicsState state = page.Canvas.Save();

            //Draw text - brush
            String text = "Text,turn Around! Go! Go! Go!";
            PdfPen pen = PdfPens.DeepSkyBlue;
            PdfSolidBrush brush = new PdfSolidBrush(System.Drawing.Color.Blue);
            PdfStringFormat format = new PdfStringFormat();
            PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 18f, PdfFontStyle.Italic);
            SizeF size = font.MeasureString(text, format);
            RectangleF rctg
                = new RectangleF(page.Canvas.ClientSize.Width / 2 + 10, 180,
                size.Width / 3 * 2, size.Height * 3);
            page.Canvas.DrawString(text, font, pen, brush, rctg, format);

            //restor graphics
            page.Canvas.Restore(state);
        }
[VB.NET]
Private Shared Sub DrawText(page As PdfPageBase)
	'save graphics state
	Dim state As PdfGraphicsState = page.Canvas.Save()

	'Draw text - brush
	Dim text As [String] = "Text,turn Around! Go! Go! Go!"
	Dim pen As PdfPen = PdfPens.DeepSkyBlue
	Dim brush As New PdfSolidBrush(System.Drawing.Color.Blue)
	Dim format As New PdfStringFormat()			
           Dim size As SizeF = font.MeasureString(text, format)
	Dim rctg As New RectangleF(page.Canvas.ClientSize.Width / 2 + 10, 180, size.Width / 3 * 2, size.Height * 3)
	page.Canvas.DrawString(text, font, pen, brush, rctg, format)

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

Align PDF text. This step allows you to align text and align text in rectangle

[C#]
        private static void AlignText(PdfPageBase page)
        {
            //Draw the text - alignment
            PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20f);
            PdfSolidBrush brush = new PdfSolidBrush(System.Drawing.Color.DarkSeaGreen);

            PdfStringFormat leftAlignment = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle);
            page.Canvas.DrawString("Left!", font, brush, 0, 40, leftAlignment);
            page.Canvas.DrawString("Left!", font, brush, 0, 60, leftAlignment);

            PdfStringFormat rightAlignment = new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Middle);
            page.Canvas.DrawString("Right!", font, brush, page.Canvas.ClientSize.Width, 40, rightAlignment);
            page.Canvas.DrawString("Right!", font, brush, page.Canvas.ClientSize.Width, 60, rightAlignment);

            PdfStringFormat centerAlignment
                = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
            page.Canvas.DrawString("Text,turn Around! Go! Go! Go!",
                font, brush, page.Canvas.ClientSize.Width / 2, 40, centerAlignment);
        }
        private static void AlignTextInRectangle(PdfPageBase page)
        {
            //Draw the text - align in rectangle
            PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 10f);
            PdfSolidBrush brush = new PdfSolidBrush(System.Drawing.Color.Blue);
            RectangleF rctg1 = new RectangleF(0, 70, page.Canvas.ClientSize.Width / 2, 100);
            RectangleF rctg2
                = new RectangleF(page.Canvas.ClientSize.Width / 2, 70, page.Canvas.ClientSize.Width / 2, 100);
            page.Canvas.DrawRectangle(new PdfSolidBrush(System.Drawing.Color.LightBlue), rctg1);
            page.Canvas.DrawRectangle(new PdfSolidBrush(System.Drawing.Color.SkyBlue), rctg2);

            PdfStringFormat leftAlignment
                = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Top);
            page.Canvas.DrawString("Left! Left!", font, brush, rctg1, leftAlignment);
            page.Canvas.DrawString("Left! Left!", font, brush, rctg2, leftAlignment);

            PdfStringFormat rightAlignment
                = new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Middle);
            page.Canvas.DrawString("Right! Right!", font, brush, rctg1, rightAlignment);
            page.Canvas.DrawString("Right! Right!", font, brush, rctg2, rightAlignment);

            PdfStringFormat centerAlignment
                = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Bottom);
            page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush, rctg1, centerAlignment);
            page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush, rctg2, centerAlignment);
        }
[VB.NET]
Private Shared Sub AlignText(page As PdfPageBase)
	'Draw the text - alignment
	Dim font As New PdfFont(PdfFontFamily.Helvetica, 20F)
	Dim brush As New PdfSolidBrush(System.Drawing.Color.DarkSeaGreen)

	Dim leftAlignment As New PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle)
	page.Canvas.DrawString("Left!", font, brush, 0, 40, leftAlignment)
	page.Canvas.DrawString("Left!", font, brush, 0, 60, leftAlignment)

	Dim rightAlignment As New PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Middle)
	page.Canvas.DrawString("Right!", font, brush, page.Canvas.ClientSize.Width, 40, rightAlignment)
	page.Canvas.DrawString("Right!", font, brush, page.Canvas.ClientSize.Width, 60, rightAlignment)

	Dim centerAlignment As New PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle)
	page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush, page.Canvas.ClientSize.Width / 2, 40, centerAlignment)
End Sub
Private Shared Sub AlignTextInRectangle(page As PdfPageBase)
	'Draw the text - align in rectangle
	Dim font As New PdfFont(PdfFontFamily.Helvetica, 10F)
	Dim brush As New PdfSolidBrush(System.Drawing.Color.Blue)
	Dim rctg1 As New RectangleF(0, 70, page.Canvas.ClientSize.Width / 2, 100)
	Dim rctg2 As New RectangleF(page.Canvas.ClientSize.Width / 2, 70, page.Canvas.ClientSize.Width / 2, 100)
	page.Canvas.DrawRectangle(New PdfSolidBrush(System.Drawing.Color.LightBlue), rctg1)
	page.Canvas.DrawRectangle(New PdfSolidBrush(System.Drawing.Color.SkyBlue), rctg2)

	Dim leftAlignment As New PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Top)
	page.Canvas.DrawString("Left! Left!", font, brush, rctg1, leftAlignment)
	page.Canvas.DrawString("Left! Left!", font, brush, rctg2, leftAlignment)

	Dim rightAlignment As New PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Middle)
	page.Canvas.DrawString("Right! Right!", font, brush, rctg1, rightAlignment)
	page.Canvas.DrawString("Right! Right!", font, brush, rctg2, rightAlignment)

	Dim centerAlignment As New PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Bottom)
	page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush, rctg1, centerAlignment)
	page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush, rctg2, centerAlignment)
End Sub

Rotate PDF text

[C#]
  private static void RotateText(PdfPageBase page)
        {
            //save graphics state
            PdfGraphicsState state = page.Canvas.Save();

            //Draw the text - transform           
            PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 10f);
            PdfSolidBrush brush = new PdfSolidBrush(System.Drawing.Color.DarkOrchid);

            PdfStringFormat centerAlignment
                = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle);
            float x = page.Canvas.ClientSize.Width / 2;
            float y = 380;

            page.Canvas.TranslateTransform(x, y);
            for (int i = 0; i < 12; i++)
            {
                page.Canvas.RotateTransform(30);
                page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush, 20, 0, centerAlignment);
            }

            //restor graphics
            page.Canvas.Restore(state);
        }
[VB.NET]
Private Shared Sub RotateText(page As PdfPageBase)
	'save graphics state
	Dim state As PdfGraphicsState = page.Canvas.Save()

	'Draw the text - transform           
	Dim font As New PdfFont(PdfFontFamily.Helvetica, 10F)
	Dim brush As New PdfSolidBrush(System.Drawing.Color.DarkOrchid)

	Dim centerAlignment As New PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle)
	Dim x As Single = page.Canvas.ClientSize.Width / 2
	Dim y As Single = 380

	page.Canvas.TranslateTransform(x, y)
	For i As Integer = 0 To 11
		page.Canvas.RotateTransform(30)
		page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush, 20, 0, centerAlignment)
	Next

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

Transform PDF text

[C#]
private static void TransformText(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(System.Drawing.Color.LightSeaGreen);
            PdfSolidBrush brush2 = new PdfSolidBrush(System.Drawing.Color.CadetBlue);

            page.Canvas.TranslateTransform(20, 200);
            page.Canvas.ScaleTransform(1f, 0.6f);
            page.Canvas.SkewTransform(-10, 0);
            page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush1, 0, 0);

            page.Canvas.SkewTransform(10, 0);
            page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush2, 0, 0);

            page.Canvas.ScaleTransform(1f, -1f);
            page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush2, 0, -2 * 18);
            //restor graphics
            page.Canvas.Restore(state);
        }
[VB.NET]
Private Shared Sub TransformText(page As PdfPageBase)
	'save graphics state
	Dim state As PdfGraphicsState = page.Canvas.Save()

	'Draw the text - transform           
	Dim font As New PdfFont(PdfFontFamily.Helvetica, 18F)
	Dim brush1 As New PdfSolidBrush(System.Drawing.Color.LightSeaGreen)
	Dim brush2 As New PdfSolidBrush(System.Drawing.Color.CadetBlue)

	page.Canvas.TranslateTransform(20, 200)
	page.Canvas.ScaleTransform(1F, 0.6F)
	page.Canvas.SkewTransform(-10, 0)
	page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush1, 0, 0)

	page.Canvas.SkewTransform(10, 0)
	page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush2, 0, 0)

	page.Canvas.ScaleTransform(1F, -1F)
	page.Canvas.DrawString("Text,turn Around! Go! Go! Go!", font, brush2, 0, -2 * 18)
	'restor graphics
	page.Canvas.Restore(state)
End Sub

Step 3: Save and launch the file

[C#]
            //Save doc file.
            doc.SaveToFile("DrawText.pdf");
            doc.Close();

            //Launching the Pdf file.
            System.Diagnostics.Process.Start("DrawText.pdf");
[VB.NET]
	'Save doc file.
	doc.SaveToFile("DrawText.pdf")
	doc.Close()

	'Launching the Pdf file.
	System.Diagnostics.Process.Start("DrawText.pdf")

Effective Screeshot:

Draw Text in PDF

Published in Program Guide WPF
Thursday, 21 June 2012 09:00

Draw PDF Barcode for WPF

PDF barcode is mainly used in commodity transaction which, to a large extent, increases efficiency and escapes human errors. The most frequently case we use barcode is that when we go shopping in the supermarket, the operator only needs to scan the barcodes, the price of the goods will automatically show. Obviously, all the information has been input in the customer data table system. Through barcode, people can easily find the details of a good in a short time. Since barcode is so wonderful, let me share a solution to draw barcode in PDF document.

Spire.PDF for WPF enables users to easily draw barcode in PDF document with C#, VB.NET for WPF. Before you start, please freely Download Spire.PDF (Spire.Office) and install it with .NET Framework 2.0 (or above) together on your system. The detail procedure can be shown below.

Step 1: Create a new project

  • Create a new project in WPF Application
  • Add a button in MainWindow and set the button Content property to be "Run".
  • Add Spire.Pdf.Wpf.dll and System.Drawing as references. After adding the namespaces, you can view the below codes.
[C#]
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Barcode;

namespace PDFWPFbarcode
{
    /// 
    /// Interaction logic for MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {

        }
    }
}
[VB.NET]
Imports System.Drawing
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports Spire.Pdf.Barcode

Namespace PDFWPFbarcode
	''' 
	''' Interaction logic for MainWindow.xaml
	''' 
	Public Partial Class MainWindow
		Inherits Window
		Public Sub New()
			InitializeComponent()
		End Sub

		Private Sub button1_Click(sender As Object, e As RoutedEventArgs)
	          End Sub
	End Class
End Namespace

Step 2: Draw barcodes in PDF document

Create a PDF document, set its margin and add one page in it

[C#]
            //Create a pdf document.
            PdfDocument doc = new PdfDocument();

            //margin
            PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
            PdfMargins margin = new PdfMargins();
            margin.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
            margin.Bottom = margin.Top;
            margin.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
            margin.Right = margin.Left;

            PdfSection section = doc.Sections.Add();
            section.PageSettings.Margins = margin;
            section.PageSettings.Size = PdfPageSize.A4;

            // Create one page
            PdfPageBase page = section.Pages.Add();
            float y = 10;
            PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Arial", 12f, System.Drawing.FontStyle.Bold), true);
[VB.NET]
        'Create a pdf document.
	Dim doc As New PdfDocument()

	'margin
	Dim unitCvtr As New PdfUnitConvertor()
	Dim margin As New PdfMargins()
	margin.Top = unitCvtr.ConvertUnits(2.54F, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point)
	margin.Bottom = margin.Top
	margin.Left = unitCvtr.ConvertUnits(3.17F, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point)
	margin.Right = margin.Left

	Dim section As PdfSection = doc.Sections.Add()
	section.PageSettings.Margins = margin
	section.PageSettings.Size = PdfPageSize.A4

	' Create one page
	Dim page As PdfPageBase = section.Pages.Add()
	Dim y As Single = 40
        Dim font1 As New PdfTrueTypeFont(New Font("Arial", 12F, System.Drawing.FontStyle.Bold), True)

Draw barcodes in PDF document

[C#]
            //draw Codebar
            PdfTextWidget text = new PdfTextWidget();
            text.Font = font1;
            text.Text = "Codebar:";
            PdfLayoutResult result = text.Draw(page, 0, y);
            page = result.Page;
            y = result.Bounds.Bottom + 2;

            PdfCodabarBarcode barcode1 = new PdfCodabarBarcode("00:12-3456/7890");
            barcode1.BarcodeToTextGapHeight = 1f;
            barcode1.EnableCheckDigit = true;
            barcode1.ShowCheckDigit = true;
            barcode1.TextDisplayLocation = TextLocation.Bottom;
            barcode1.TextColor = System.Drawing.Color.Blue;
            barcode1.Draw(page, new PointF(0, y));
            y = barcode1.Bounds.Bottom + 5;
            //draw Code11Barcode
            text.Text = "Code11:";
            result = text.Draw(page, 0, y);
            page = result.Page;
            y = result.Bounds.Bottom + 2;

            PdfCode11Barcode barcode2 = new PdfCode11Barcode("123-4567890");
            barcode2.BarcodeToTextGapHeight = 1f;
            barcode2.TextDisplayLocation = TextLocation.Bottom;
            barcode2.TextColor = System.Drawing.Color.Blue;
            barcode2.Draw(page, new PointF(0, y));
            y = barcode2.Bounds.Bottom + 5;
            //draw Code128-A
            text.Text = "Code128-A:";
            result = text.Draw(page, 0, y);
            page = result.Page;
            y = result.Bounds.Bottom + 2;

            PdfCode128ABarcode barcode3 = new PdfCode128ABarcode("HELLO 00-123");
            barcode3.BarcodeToTextGapHeight = 1f;
            barcode3.TextDisplayLocation = TextLocation.Bottom;
            barcode3.TextColor = System.Drawing.Color.Blue;
            barcode3.Draw(page, new PointF(0, y));
            y = barcode3.Bounds.Bottom + 5;
            //draw Code128-B
            text.Text = "Code128-B:";
            result = text.Draw(page, 0, y);
            page = result.Page;
            y = result.Bounds.Bottom + 2;

            PdfCode128BBarcode barcode4 = new PdfCode128BBarcode("Hello 00-123");
            barcode4.BarcodeToTextGapHeight = 1f;
            barcode4.TextDisplayLocation = TextLocation.Bottom;
            barcode4.TextColor = System.Drawing.Color.Blue;
            barcode4.Draw(page, new PointF(0, y));
            y = barcode4.Bounds.Bottom + 5;
            //draw Code32
            text.Text = "Code32:";
            result = text.Draw(page, 0, y);
            page = result.Page;
            y = result.Bounds.Bottom + 2;

            PdfCode32Barcode barcode5 = new PdfCode32Barcode("16273849");
            barcode5.BarcodeToTextGapHeight = 1f;
            barcode5.TextDisplayLocation = TextLocation.Bottom;
            barcode5.TextColor = System.Drawing.Color.Blue;
            barcode5.Draw(page, new PointF(0, y));
            y = barcode5.Bounds.Bottom + 5;

            page = section.Pages.Add();
            y = 10;
            //draw Code39
            text.Text = "Code39:";
            result = text.Draw(page, 0, y);
            page = result.Page;
            y = result.Bounds.Bottom + 2;

            PdfCode39Barcode barcode6 = new PdfCode39Barcode("16-273849");
            barcode6.BarcodeToTextGapHeight = 1f;
            barcode6.TextDisplayLocation = TextLocation.Bottom;
            barcode6.TextColor = System.Drawing.Color.Blue;
            barcode6.Draw(page, new PointF(0, y));
            y = barcode6.Bounds.Bottom + 5;
            //draw Code39-E
            text.Text = "Code39-E:";
            result = text.Draw(page, 0, y);
            page = result.Page;
            y = result.Bounds.Bottom + 2;

            PdfCode39ExtendedBarcode barcode7 = new PdfCode39ExtendedBarcode("16-273849");
            barcode7.BarcodeToTextGapHeight = 1f;
            barcode7.TextDisplayLocation = TextLocation.Bottom;
            barcode7.TextColor = System.Drawing.Color.Blue;
            barcode7.Draw(page, new PointF(0, y));
            y = barcode7.Bounds.Bottom + 5;
            //draw Code93
            text.Text = "Code93:";
            result = text.Draw(page, 0, y);
            page = result.Page;
            y = result.Bounds.Bottom + 2;

            PdfCode93Barcode barcode8 = new PdfCode93Barcode("16-273849");
            barcode8.BarcodeToTextGapHeight = 1f;
            barcode8.TextDisplayLocation = TextLocation.Bottom;
            barcode8.TextColor = System.Drawing.Color.Blue;
            barcode8.QuietZone.Bottom = 5;
            barcode8.Draw(page, new PointF(0, y));
            y = barcode8.Bounds.Bottom + 5;
            //draw Code93-E
            text.Text = "Code93-E:";
            result = text.Draw(page, 0, y);
            page = result.Page;
            y = result.Bounds.Bottom + 2;

            PdfCode93ExtendedBarcode barcode9 = new PdfCode93ExtendedBarcode("16-273849");
            barcode9.BarcodeToTextGapHeight = 1f;
            barcode9.TextDisplayLocation = TextLocation.Bottom;
            barcode9.TextColor = System.Drawing.Color.Blue;
            barcode9.Draw(page, new PointF(0, y));
            y = barcode9.Bounds.Bottom + 5;
[VB.NET]
	'draw Codebar
	Dim text As New PdfTextWidget()
	text.Font = font1
	text.Text = "Codebar:"
	Dim result As PdfLayoutResult = text.Draw(page, 0, y)
	page = result.Page
	y = result.Bounds.Bottom + 2

	Dim barcode1 As New PdfCodabarBarcode("00:12-3456/7890")
	barcode1.BarcodeToTextGapHeight = 1F
	barcode1.EnableCheckDigit = True
	barcode1.ShowCheckDigit = True
	barcode1.TextDisplayLocation = TextLocation.Bottom
	barcode1.TextColor = System.Drawing.Color.Blue
	barcode1.Draw(page, New PointF(0, y))
	y = barcode1.Bounds.Bottom + 5


	'draw Code11Barcode
	text.Text = "Code11:"
	result = text.Draw(page, 0, y)
	page = result.Page
	y = result.Bounds.Bottom + 2

	Dim barcode2 As New PdfCode11Barcode("123-4567890")
	barcode2.BarcodeToTextGapHeight = 1F
	barcode2.TextDisplayLocation = TextLocation.Bottom
	barcode2.TextColor = System.Drawing.Color.Blue
	barcode2.Draw(page, New PointF(0, y))
	y = barcode2.Bounds.Bottom + 5


	'draw Code128-A
	text.Text = "Code128-A:"
	result = text.Draw(page, 0, y)
	page = result.Page
	y = result.Bounds.Bottom + 2

	Dim barcode3 As New PdfCode128ABarcode("HELLO 00-123")
	barcode3.BarcodeToTextGapHeight = 1F
	barcode3.TextDisplayLocation = TextLocation.Bottom
	barcode3.TextColor = System.Drawing.Color.Blue
	barcode3.Draw(page, New PointF(0, y))
	y = barcode3.Bounds.Bottom + 5


	'draw Code128-B
	text.Text = "Code128-B:"
	result = text.Draw(page, 0, y)
	page = result.Page
	y = result.Bounds.Bottom + 2

	Dim barcode4 As New PdfCode128BBarcode("Hello 00-123")
	barcode4.BarcodeToTextGapHeight = 1F
	barcode4.TextDisplayLocation = TextLocation.Bottom
	barcode4.TextColor = System.Drawing.Color.Blue
	barcode4.Draw(page, New PointF(0, y))
	y = barcode4.Bounds.Bottom + 5


	'draw Code32
	text.Text = "Code32:"
	result = text.Draw(page, 0, y)
	page = result.Page
	y = result.Bounds.Bottom + 2

	Dim barcode5 As New PdfCode32Barcode("16273849")
	barcode5.BarcodeToTextGapHeight = 1F
	barcode5.TextDisplayLocation = TextLocation.Bottom
	barcode5.TextColor = System.Drawing.Color.Blue
	barcode5.Draw(page, New PointF(0, y))
	y = barcode5.Bounds.Bottom + 5

	page = section.Pages.Add()
	y = 10


	'draw Code39
	text.Text = "Code39:"
	result = text.Draw(page, 0, y)
	page = result.Page
	y = result.Bounds.Bottom + 2

	Dim barcode6 As New PdfCode39Barcode("16-273849")
	barcode6.BarcodeToTextGapHeight = 1F
	barcode6.TextDisplayLocation = TextLocation.Bottom
	barcode6.TextColor = System.Drawing.Color.Blue
	barcode6.Draw(page, New PointF(0, y))
	y = barcode6.Bounds.Bottom + 5


	'draw Code39-E
	text.Text = "Code39-E:"
	result = text.Draw(page, 0, y)
	page = result.Page
	y = result.Bounds.Bottom + 2

	Dim barcode7 As New PdfCode39ExtendedBarcode("16-273849")
	barcode7.BarcodeToTextGapHeight = 1F
	barcode7.TextDisplayLocation = TextLocation.Bottom
	barcode7.TextColor = System.Drawing.Color.Blue
	barcode7.Draw(page, New PointF(0, y))
	y = barcode7.Bounds.Bottom + 5


	'draw Code93
	text.Text = "Code93:"
	result = text.Draw(page, 0, y)
	page = result.Page
	y = result.Bounds.Bottom + 2

	Dim barcode8 As New PdfCode93Barcode("16-273849")
	barcode8.BarcodeToTextGapHeight = 1F
	barcode8.TextDisplayLocation = TextLocation.Bottom
	barcode8.TextColor = System.Drawing.Color.Blue
	barcode8.QuietZone.Bottom = 5
	barcode8.Draw(page, New PointF(0, y))
	y = barcode8.Bounds.Bottom + 5


	'draw Code93-E
	text.Text = "Code93-E:"
	result = text.Draw(page, 0, y)
	page = result.Page
	y = result.Bounds.Bottom + 2

	Dim barcode9 As New PdfCode93ExtendedBarcode("16-273849")
	barcode9.BarcodeToTextGapHeight = 1F
	barcode9.TextDisplayLocation = TextLocation.Bottom
	barcode9.TextColor = System.Drawing.Color.Blue
	barcode9.Draw(page, New PointF(0, y))
	y = barcode9.Bounds.Bottom + 5

Step 3: Save and Launch

[C#]
            //Save pdf file.
            doc.SaveToFile("Barcode.pdf");
            doc.Close();

            //Launching the Pdf file.
            System.Diagnostics.Process.Start("Barcode.pdf");
[VB.NET]
	'Save pdf file.
	doc.SaveToFile("Barcode.pdf")
	doc.Close()

	'Launching the Pdf file.
	System.Diagnostics.Process.Start("Barcode.pdf")

Effective Screeshot:

Draw Barcode in PDF

Published in Program Guide WPF

There can be no doubt that image and text are the most basic elements for a PDF document. In most cases, people need to insert images and text in a PDF file. While actually, things are not as easy as that. For example, you want to insert an image to your PDF document, but this image is in another PDF file, you can neither find a same picture from internet nor paste it directly to your own PDF. In such a situation, you have to extract the PDF image first and then, insert the images you want to your PDF.

This article is designed to share a method to extract images and text from PDF document for WPF via Spire.PDF for WPF. Using Spire.PDF for WPF, you can easily and quickly extract the PDF images and text, then, add any images you want to another PDF. Please follow the below steps.

Download Spire.PDF (Spire.Office) and with .NET Framework 2.0 (or above) together. Install and follow the guide below.

Step 1: Create a new project

  • Create a new project in WPF Application
  • Add a button in MainWindow and set the button Content property to be "Run".
  • Add Spire.Pdf.Wpf.dll and System.Drawing as references. After adding the namespaces, you can view the below codes.
[C#]
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.IO;
using System.Drawing.Imaging;

namespace pdfextractwpf
{
    /// 
    /// Interaction logic for MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {

        }
    }
}
[VB.NET]
Imports System.Drawing
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.IO
Imports System.Drawing.Imaging

Namespace pdfextractwpf
	''' 
	''' Interaction logic for MainWindow.xaml
	''' 
	Public Partial Class MainWindow
		Inherits Window
		Public Sub New()
			InitializeComponent()
		End Sub

		Private Sub button1_Click(sender As Object, e As RoutedEventArgs)
	          End Sub
	End Class
End Namespace

Step 2: Extract images and text from PDF document

Load a PDF file from system

[C#]
            //Create a pdf document.
            PdfDocument doc = new PdfDocument();                
            doc.LoadFromFile(@"D:\e-iceblue\Spire.PDF\Demos\Data\Sample2.pdf");
[VB.NET]
	'Create a pdf document.
	Dim doc As New PdfDocument()		
        doc.LoadFromFile("D:\e-iceblue\Spire.PDF\Demos\Data\Sample2.pdf")

Extract images and text from PDF document

[C#]
            StringBuilder buffer = new StringBuilder();
            IList images = new List();

            foreach (PdfPageBase page in doc.Pages)
            {
                buffer.Append(page.ExtractText());
                foreach (System.Drawing.Image image in page.ExtractImages())
                {
                    images.Add(image);
                }
            }

            doc.Close();
[VB.NET]
	Dim buffer As New StringBuilder()
	Dim images As IList(Of System.Drawing.Image) = New List(Of System.Drawing.Image)()

	For Each page As PdfPageBase In doc.Pages
		buffer.Append(page.ExtractText())
		For Each image As System.Drawing.Image In page.ExtractImages()
			images.Add(image)
		Next
	Next

	doc.Close()

Save the extracted images and text.

[C#]
            //save text
            String fileName = "TextInPdf.txt";
            File.WriteAllText(fileName, buffer.ToString());

            //save image
            int index = 0;
            foreach (System.Drawing.Image image in images)
            {
                String imageFileName
                    = String.Format("Image-{0}.png", index++);
                image.Save(imageFileName, ImageFormat.Png);
            }
[VB.NET]
	'save text
	Dim fileName As [String] = "TextInPdf.txt"
	File.WriteAllText(fileName, buffer.ToString())

	'save image
	Dim index As Integer = 0
	For Each image As System.Drawing.Image In images
		Dim imageFileName As [String] = [String].Format("Image-{0}.png", System.Math.Max(System.Threading.Interlocked.Increment(index),index - 1))
		image.Save(imageFileName, ImageFormat.Png)
	Next

Step 3: Insert the extracted image to a newly built PDF file

Create a new PDF document and add a page in it

[C#]
            PdfDocument newDoc = new PdfDocument();
            PdfPageBase newPage = newDoc.Pages.Add();
[VB.NET]
	Dim newDoc As New PdfDocument()
        Dim newPage As PdfPageBase = newDoc.Pages.Add()

Draw the PDF text. And insert the extracted the third image in the newly built PDF document.

[C#]
            newPage.Canvas.DrawString("Extract PDF images & text and insert an extracted image to a newly built PDF",
                                   new PdfFont(PdfFontFamily.Helvetica, 14.5f),
                                   new PdfSolidBrush(new PdfRGBColor(0,100,200)),
                                   10, 40);
            PdfImage img = PdfImage.FromImage(images[2]);
            float width = img.Width * 0.75f;
            float height = img.Height * 0.75f;
            float x = (newPage.Canvas.ClientSize.Width - width) / 2;

            newPage.Canvas.DrawImage(img, x, 100, width, height);
[VB.NET]
	newPage.Canvas.DrawString("Extract PDF images & text and insert an extracted image to a newly built PDF", 
                                    New PdfFont(PdfFontFamily.Helvetica, 14.5F), 
                                    New PdfSolidBrush(New PdfRGBColor(0, 100, 200)), 10, 40)
	Dim img As PdfImage = PdfImage.FromImage(images(2))
	Dim width As Single = img.Width * 0.75F
	Dim height As Single = img.Height * 0.75F
	Dim x As Single = (newPage.Canvas.ClientSize.Width - width) / 2
          newPage.Canvas.DrawImage(img, x, 100, width, height)

Save and launch the PDF file

[C#]
            newDoc.SaveToFile("Image.pdf");
            newDoc.Close();
            System.Diagnostics.Process.Start("Image.pdf");
[VB.NET]
	newDoc.SaveToFile("Image.pdf")
	newDoc.Close()
	System.Diagnostics.Process.Start("Image.pdf")

Effecive Screenshot:

>Read PDF Text and Images

Spire.PDF for WPF allows its users not only to extract images and text from PDF document, but also can save the images to the most popular formats such as .PNG, JPG, BMP, GIF and so on. Click to know more

Published in Program Guide WPF

PDF Table plays a significant role of clearly displaying data information in PDF document, which cannot be replaced by words. It provides great convenience for its users. For example, a product list can be more easily recognized and checked than numerous words. Thus, it is very necessary to learn how to generate table in PDF document.

In this article, I will not only introduce users how to generate table in PDF document, but also tell you how to set table style such as font, background color and data size by using Spire.PDF for WPF.

Spire.PDF for WPF enables you to quickly realize the task of drawing a PDF table by the below steps.

Step 1: Create a new project

  • Create a new project in WPF Application
  • Add a button in MainWindow, and set the button Content to be "Run"

Step 2: Add references and namespaces

  • Add System.Drawing and Spire.Pdf.Wpf.dll as references
  • Add below namespaces at the top of the method
[C#]
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Graphics.Fonts;
using Spire.Pdf.Tables;
[VB.NET]
Imports System.Drawing
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports Spire.Pdf.Graphics.Fonts
Imports Spire.Pdf.Tables

Step 3: Draw table in PDF document and set the table style

Create a new PDF document and set its margin

[C#]
             //create a new PDF document
            PdfDocument doc = new PdfDocument();

            PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
            PdfMargins margin = new PdfMargins();
            margin.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
            margin.Bottom = margin.Top;
            margin.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
            margin.Right = margin.Left;

            PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, margin);
            float y = 20;
[VB.NET]
           'create a new PDF document
	 Dim doc As New PdfDocument()

	 Dim unitCvtr As New PdfUnitConvertor()
	 Dim margin As New PdfMargins()
	  margin.Top = unitCvtr.ConvertUnits(2.54F, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point)
	  margin.Bottom = margin.Top
	  margin.Left = unitCvtr.ConvertUnits(3.17F, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point)
	  margin.Right = margin.Left

	  Dim page As PdfPageBase = doc.Pages.Add(PdfPageSize.A4, margin)
	  Dim y As Single = 20

Set table title and then, add data information in PDF document

[C#]
           //add PDF title
            PdfBrush brush1 = PdfBrushes.Black;
            PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Verdana", 14f, System.Drawing.FontStyle.Bold));
            PdfStringFormat format1 = new PdfStringFormat(PdfTextAlignment.Center);
            page.Canvas.DrawString("Part Sales Information", font1, brush1, page.Canvas.ClientSize.Width / 2, y, format1);
            y = y + font1.MeasureString("Part Sales Information", format1).Height;
            y = y + 10;

            //add data information
            String[] data
         = {
        "PartNo;Description;OnHand;OnOrder;Cost;ListPrice",
        "900;Dive kayak;24;16;1356.75;3999.95",
        "912;Underwater Diver Vehicle;5;3;504;1680",
        "1313;Regulator System;165;216;117.5;250",
        "1314;Second Stage Regulator;98;88;124.1;365",
        "1316;Regulator System;75;70;119.35;341",
        "1320;Second Stage Regulator;37;35;73.53;171",
        "1328;Regulator System;166;100;154.8;430",
        "1330;Alternate Inflation Regulator;47;43;85.8;260",
        "1364;Second Stage Regulator;128;135;99.9;270",
        "1390;First Stage Regulator;146;140;64.6;170",
        "1946;Second Stage Regulator;13;10;95.79;309",
        "1986;Depth/Pressure Gauge Console;25;24;73.32;188",
        "2314;Electronic Console;13;12;120.9;390",
        "2341;Depth/Pressure Gauge;226;225;48.3;105",
        "2343;Personal Dive Sonar;46;45;72.85;235",
        "2350;Compass Console Mount;211;300;10.15;29"
            }; 

            String[][] dataSource
                = new String[data.Length][];
            for (int i = 0; i < data.Length; i++)
            {
                dataSource[i] = data[i].Split(';');
            }
[VB.NET]
	'add PDF title
	Dim brush1 As PdfBrush = PdfBrushes.Black
	Dim font1 As New PdfTrueTypeFont(New Font("Verdana", 14F, System.Drawing.FontStyle.Bold))
	Dim format1 As New PdfStringFormat(PdfTextAlignment.Center)
	page.Canvas.DrawString("Part Sales Information", font1, brush1, page.Canvas.ClientSize.Width / 2, y, format1)
	y = y + font1.MeasureString("Part Sales Information", format1).Height
	y = y + 10

	'add data information
	Dim data As [String]() = {"PartNo;Description;OnHand;OnOrder;Cost;ListPrice", 
"900;Dive kayak;24;16;1356.75;3999.95", 
"912;Underwater Diver Vehicle;5;3;504;1680",
       "1313;Regulator System;165;216;117.5;250", 
       "1314;Second Stage Regulator;98;88;124.1;365", 
       "1316;Regulator System;75;70;119.35;341",
       "1320;Second Stage Regulator;37;35;73.53;171",
       "1328;Regulator System;166;100;154.8;430", 
       "1330;Alternate Inflation Regulator;47;43;85.8;260",
       "1364;Second Stage Regulator;128;135;99.9;270",
       "1390;First Stage Regulator;146;140;64.6;170", 
       "1946;Second Stage Regulator;13;10;95.79;309",
       "1986;Depth/Pressure Gauge Console;25;24;73.32;188", 
       "2314;Electronic Console;13;12;120.9;390",
       "2341;Depth/Pressure Gauge;226;225;48.3;105", 
       "2343;Personal Dive Sonar;46;45;72.85;235", 
       "2350;Compass Console Mount;211;300;10.15;29"}

	Dim dataSource As [String]()() = New [String](data.Length - 1)() {}
	For i As Integer = 0 To data.Length - 1
		dataSource(i) = data(i).Split(";"C)
	Next

Set PDF table style and data format

[C#]
            //Set table header
            PdfTable table = new PdfTable();
            table.Style.CellPadding = 3;
            table.Style.HeaderSource = PdfHeaderSource.Rows;
            table.Style.HeaderRowCount = 1;
            table.DataSource = dataSource;
            table.Style.ShowHeader = true;

            table.Style.HeaderStyle.BackgroundBrush = PdfBrushes.LightSeaGreen;
            table.Style.HeaderStyle.Font = new PdfTrueTypeFont(new Font("Verdana", 9f, System.Drawing.FontStyle.Bold));
            table.Style.HeaderStyle.StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
            table.Style.HeaderStyle.TextBrush = PdfBrushes.White;

            //Set table style and data format
            table.Style.BorderPen = new PdfPen(PdfBrushes.LightBlue, 0.5f);
            table.Style.DefaultStyle.BackgroundBrush = PdfBrushes.LightYellow;
            table.Style.DefaultStyle.Font = new PdfTrueTypeFont(new Font("Verdana", 8.5f));
            table.Style.AlternateStyle = new PdfCellStyle();
            table.Style.AlternateStyle.BackgroundBrush = PdfBrushes.AliceBlue;
            table.Style.AlternateStyle.Font = new PdfTrueTypeFont(new Font("Verdana", 8.5f));

            float width
                = page.Canvas.ClientSize.Width
                - (table.Columns.Count + 1) * table.Style.BorderPen.Width;
            table.Columns[0].Width = width * 0.1f * width;
            table.Columns[0].StringFormat
                = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
         
            table.Columns[1].Width = width * 0.28f * width;
            table.Columns[1].StringFormat
                = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
            table.Columns[2].Width = width * 0.1f * width;
            table.Columns[2].StringFormat
                = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
            table.Columns[3].Width = width * 0.1f * width;
            table.Columns[3].StringFormat
                = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
            table.Columns[4].Width = width * 0.12f * width;
            table.Columns[4].StringFormat
                = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
            table.Columns[5].Width = width * 0.12f * width;
            table.Columns[5].StringFormat
                = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);

            PdfLayoutResult result = table.Draw(page, new PointF(0, y));
[VB.NET]
	'Set table header
	Dim table As New PdfTable()
	table.Style.CellPadding = 3
	table.Style.HeaderSource = PdfHeaderSource.Rows
	table.Style.HeaderRowCount = 1
	table.DataSource = dataSource
	table.Style.ShowHeader = True

	table.Style.HeaderStyle.BackgroundBrush = PdfBrushes.LightSeaGreen
	table.Style.HeaderStyle.Font = New PdfTrueTypeFont(New Font("Verdana", 9F, System.Drawing.FontStyle.Bold))
	table.Style.HeaderStyle.StringFormat = New PdfStringFormat(PdfTextAlignment.Center)
	table.Style.HeaderStyle.TextBrush = PdfBrushes.White

	'Set table style and data format
	table.Style.BorderPen = New PdfPen(PdfBrushes.LightBlue, 0.5F)
	table.Style.DefaultStyle.BackgroundBrush = PdfBrushes.LightYellow
	table.Style.DefaultStyle.Font = New PdfTrueTypeFont(New Font("Verdana", 8.5F))
	table.Style.AlternateStyle = New PdfCellStyle()
	table.Style.AlternateStyle.BackgroundBrush = PdfBrushes.AliceBlue
	table.Style.AlternateStyle.Font = New PdfTrueTypeFont(New Font("Verdana", 8.5F))

	Dim width As Single = page.Canvas.ClientSize.Width - (table.Columns.Count + 1) * table.Style.BorderPen.Width
	table.Columns(0).Width = width * 0.1F * width
	table.Columns(0).StringFormat = New PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle)

	table.Columns(1).Width = width * 0.28F * width
	table.Columns(1).StringFormat = New PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle)
	table.Columns(2).Width = width * 0.1F * width
	table.Columns(2).StringFormat = New PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle)
	table.Columns(3).Width = width * 0.1F * width
	table.Columns(3).StringFormat = New PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle)
	table.Columns(4).Width = width * 0.12F * width
	table.Columns(4).StringFormat = New PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle)
	table.Columns(5).Width = width * 0.12F * width
	table.Columns(5).StringFormat = New PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle)

	Dim result As PdfLayoutResult = table.Draw(page, New PointF(0, y))

Step 4: Save and Launch

[C#]
            // save and launch the file
            doc.SaveToFile("SimpleTable.pdf");
            doc.Close();
            System.Diagnostics.Process.Start("SimpleTable.pdf");
[VB.NET]
	' save and launch the file
	doc.SaveToFile("SimpleTable.pdf")
	doc.Close()
	System.Diagnostics.Process.Start("SimpleTable.pdf")

Effective Screeshot:

Generate PDF Table

Published in Program Guide WPF
Page 3 of 3