The sample demonstrates how to export data and pictures from database into a table in PDF document and set table format.
using System; using System.Data; using System.Data.OleDb; using System.Drawing; using System.IO; using Spire.Pdf; using Spire.Pdf.Graphics; using Spire.Pdf.Tables; namespace ImageTable { class Program { static void Main(string[] args) { //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); float y = 10; //title PdfBrush brush1 = PdfBrushes.Black; PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Arial", 16f, FontStyle.Bold)); PdfStringFormat format1 = new PdfStringFormat(PdfTextAlignment.Center); page.Canvas.DrawString("Country List", font1, brush1, page.Canvas.ClientSize.Width / 2, y, format1); y = y + font1.MeasureString("Country List", format1).Height; y = y + 5; //create data table PdfTable table = new PdfTable(); table.Style.CellPadding = 2; table.Style.BorderPen = new PdfPen(brush1, 0.75f); table.Style.DefaultStyle.BackgroundBrush = PdfBrushes.SkyBlue; table.Style.DefaultStyle.Font = new PdfTrueTypeFont(new Font("Arial", 10f)); table.Style.AlternateStyle = new PdfCellStyle(); table.Style.AlternateStyle.BackgroundBrush = PdfBrushes.LightYellow; table.Style.AlternateStyle.Font = new PdfTrueTypeFont(new Font("Arial", 10f)); table.Style.HeaderSource = PdfHeaderSource.ColumnCaptions; table.Style.HeaderStyle.BackgroundBrush = PdfBrushes.CadetBlue; table.Style.HeaderStyle.Font = new PdfTrueTypeFont(new Font("Arial", 11f, FontStyle.Bold)); table.Style.HeaderStyle.StringFormat = new PdfStringFormat(PdfTextAlignment.Center); table.Style.ShowHeader = true; using (OleDbConnection conn = new OleDbConnection()) { conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=demo.mdb"; OleDbCommand command = new OleDbCommand(); command.CommandText = " select Name, '' as Flag, Capital, Continent, Area, Population, Flag as FlagData from country "; command.Connection = conn; using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(command)) { DataTable dataTable = new DataTable(); dataAdapter.Fill(dataTable); dataTable.Columns.Add(new DataColumn("FlagImage", typeof(PdfImage))); table.DataSourceType = PdfTableDataSourceType.TableDirect; table.DataSource = dataTable; } } float width = page.Canvas.ClientSize.Width - (table.Columns.Count + 1) * table.Style.BorderPen.Width; table.Columns[0].Width = width * 0.21f; table.Columns[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle); table.Columns[1].Width = width * 0.10f; table.Columns[1].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle); table.Columns[2].Width = width * 0.19f; table.Columns[2].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle); table.Columns[3].Width = width * 0.21f; table.Columns[3].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle); table.Columns[4].Width = width * 0.12f; table.Columns[4].StringFormat = new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Middle); table.Columns[5].Width = width * 0.17f; table.Columns[5].StringFormat = new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Middle); table.BeginRowLayout += new BeginRowLayoutEventHandler(table_BeginRowLayout); table.EndCellLayout += new EndCellLayoutEventHandler(table_EndCellLayout); PdfTableLayoutFormat tableLayout = new PdfTableLayoutFormat(); tableLayout.Break = PdfLayoutBreakType.FitElement; tableLayout.Layout = PdfLayoutType.Paginate; tableLayout.EndColumnIndex = table.Columns.Count - 2 - 1; PdfLayoutResult result = table.Draw(page, new PointF(0, y), tableLayout); y = y + result.Bounds.Height + 5; PdfBrush brush2 = PdfBrushes.Gray; PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("Arial", 9f)); page.Canvas.DrawString(String.Format("* {0} countries in the list.", table.Rows.Count), font2, brush2, 5, y); //Save pdf file. doc.SaveToFile("ImageTable.pdf"); doc.Close(); //Launching the Pdf file. System.Diagnostics.Process.Start("ImageTable.pdf"); } static void table_EndCellLayout(object sender, EndCellLayoutEventArgs args) { if (args.RowIndex < 0) { //header return; } if (args.CellIndex == 1) { DataTable dataTable = (sender as PdfTable).DataSource as DataTable; PdfImage image = dataTable.Rows[args.RowIndex][7] as PdfImage; float x = (args.Bounds.Width - image.PhysicalDimension.Width) / 2 + args.Bounds.X; float y = (args.Bounds.Height - image.PhysicalDimension.Height) / 2 + args.Bounds.Y; args.Graphics.DrawImage(image, x, y); } } static void table_BeginRowLayout(object sender, BeginRowLayoutEventArgs args) { if (args.RowIndex < 0) { //header return; } DataTable dataTable = (sender as PdfTable).DataSource as DataTable; byte[] imageData = dataTable.Rows[args.RowIndex][6] as byte[]; using (MemoryStream stream = new MemoryStream(imageData)) { PdfImage image = PdfImage.FromStream(stream); args.MinimalHeight = 4 + image.PhysicalDimension.Height; dataTable.Rows[args.RowIndex][7] = image; } } } }
Imports System.Data Imports System.Data.OleDb Imports System.Drawing Imports System.IO Imports Spire.Pdf Imports Spire.Pdf.Graphics Imports Spire.Pdf.Tables Namespace ImageTable Friend Class Program Shared Sub Main(ByVal args() As String) '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 y As Single = 10 'title Dim brush1 As PdfBrush = PdfBrushes.Black Dim font1 As New PdfTrueTypeFont(New Font("Arial", 16.0F, FontStyle.Bold)) Dim format1 As New PdfStringFormat(PdfTextAlignment.Center) page.Canvas.DrawString("Country List", font1, brush1, page.Canvas.ClientSize.Width \ 2, y, format1) y = y + font1.MeasureString("Country List", format1).Height y = y + 5 'create data table Dim table As New PdfTable() table.Style.CellPadding = 2 table.Style.BorderPen = New PdfPen(brush1, 0.75F) table.Style.DefaultStyle.BackgroundBrush = PdfBrushes.SkyBlue table.Style.DefaultStyle.Font = New PdfTrueTypeFont(New Font("Arial", 10.0F)) table.Style.AlternateStyle = New PdfCellStyle() table.Style.AlternateStyle.BackgroundBrush = PdfBrushes.LightYellow table.Style.AlternateStyle.Font = New PdfTrueTypeFont(New Font("Arial", 10.0F)) table.Style.HeaderSource = PdfHeaderSource.ColumnCaptions table.Style.HeaderStyle.BackgroundBrush = PdfBrushes.CadetBlue table.Style.HeaderStyle.Font = New PdfTrueTypeFont(New Font("Arial", 11.0F, FontStyle.Bold)) table.Style.HeaderStyle.StringFormat = New PdfStringFormat(PdfTextAlignment.Center) table.Style.ShowHeader = True Using conn As New OleDbConnection() conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=demo.mdb" Dim command As New OleDbCommand() command.CommandText _ = " select Name, '' as Flag, Capital, Continent, Area, Population, Flag as FlagData from country " command.Connection = conn Using dataAdapter As New OleDbDataAdapter(command) Dim dataTable As New DataTable() dataAdapter.Fill(dataTable) dataTable.Columns.Add(New DataColumn("FlagImage", GetType(PdfImage))) table.DataSourceType = PdfTableDataSourceType.TableDirect table.DataSource = dataTable End Using End Using Dim width As Single = page.Canvas.ClientSize.Width - (table.Columns.Count + 1) * table.Style.BorderPen.Width table.Columns(0).Width = width * 0.21F table.Columns(0).StringFormat = New PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle) table.Columns(1).Width = width * 0.1F table.Columns(1).StringFormat = New PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle) table.Columns(2).Width = width * 0.19F table.Columns(2).StringFormat = New PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle) table.Columns(3).Width = width * 0.21F table.Columns(3).StringFormat = New PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle) table.Columns(4).Width = width * 0.12F table.Columns(4).StringFormat = New PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Middle) table.Columns(5).Width = width * 0.17F table.Columns(5).StringFormat = New PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Middle) AddHandler table.BeginRowLayout, AddressOf table_BeginRowLayout AddHandler table.EndCellLayout, AddressOf table_EndCellLayout Dim tableLayout As New PdfTableLayoutFormat() tableLayout.Break = PdfLayoutBreakType.FitElement tableLayout.Layout = PdfLayoutType.Paginate tableLayout.EndColumnIndex = table.Columns.Count - 2 - 1 Dim result As PdfLayoutResult = table.Draw(page, New PointF(0, y), tableLayout) y = y + result.Bounds.Height + 5 Dim brush2 As PdfBrush = PdfBrushes.Gray Dim font2 As New PdfTrueTypeFont(New Font("Arial", 9.0F)) page.Canvas.DrawString(String.Format("* {0} countries in the list.", table.Rows.Count), font2, brush2, 5, y) 'Save pdf file. doc.SaveToFile("ImageTable.pdf") doc.Close() 'Launching the Pdf file. Process.Start("ImageTable.pdf") End Sub Private Shared Sub table_EndCellLayout(ByVal sender As Object, ByVal args As EndCellLayoutEventArgs) If args.RowIndex < 0 Then 'header Return End If If args.CellIndex = 1 Then Dim dataTable As DataTable = TryCast((TryCast(sender, PdfTable)).DataSource, DataTable) Dim image As PdfImage = TryCast(dataTable.Rows(args.RowIndex)(7), PdfImage) Dim x As Single = (args.Bounds.Width - image.PhysicalDimension.Width) / 2 + args.Bounds.X Dim y As Single = (args.Bounds.Height - image.PhysicalDimension.Height) / 2 + args.Bounds.Y args.Graphics.DrawImage(image, x, y) End If End Sub Private Shared Sub table_BeginRowLayout(ByVal sender As Object, ByVal args As BeginRowLayoutEventArgs) If args.RowIndex < 0 Then 'header Return End If Dim dataTable As DataTable = TryCast((TryCast(sender, PdfTable)).DataSource, DataTable) Dim imageData() As Byte = TryCast(dataTable.Rows(args.RowIndex)(6), Byte()) Using stream As New MemoryStream(imageData) Dim image As PdfImage = PdfImage.FromStream(stream) args.MinimalHeight = 4 + image.PhysicalDimension.Height dataTable.Rows(args.RowIndex)(7) = image End Using End Sub End Class End Namespace