Generate Table in PDF Document and Set Table Style in 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