Read the complete article on how to add data from database to PDF in C#: https://blog.aspose.com/2022/05/20/add-data-from-database-to-pdf-in-csharp-net/
Last active
May 20, 2022 15:48
-
-
Save aspose-com-gists/3468179e05f17f74100ebd6c80955836 to your computer and use it in GitHub Desktop.
Add Data from Database to PDF in C# .NET
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class PdfHelper | |
{ | |
public static void ImportEntityList<TSource>(this Pdf.Table table, IList<TSource> data) | |
{ | |
var headRow = table.Rows.Add(); | |
var props = typeof(TSource).GetProperties(BindingFlags.Public | BindingFlags.Instance); | |
foreach (var prop in props) | |
{ | |
headRow.Cells.Add(prop.GetCustomAttribute(typeof(DisplayAttribute)) is DisplayAttribute dd ? dd.Name : prop.Name); | |
} | |
foreach (var item in data) | |
{ | |
// Add row to table | |
var row = table.Rows.Add(); | |
// Add table cells | |
foreach (var t in props) | |
{ | |
var dataItem = t.GetValue(item, null); | |
if (t.GetCustomAttribute(typeof(DataTypeAttribute)) is DataTypeAttribute dataType) | |
switch (dataType.DataType) | |
{ | |
case DataType.Currency: | |
row.Cells.Add(string.Format("{0:C}", dataItem)); | |
break; | |
case DataType.Date: | |
var dateTime = (DateTime)dataItem; | |
if (t.GetCustomAttribute(typeof(DisplayFormatAttribute)) is DisplayFormatAttribute df) | |
{ | |
row.Cells.Add(string.IsNullOrEmpty(df.DataFormatString) | |
? dateTime.ToShortDateString() | |
: string.Format(df.DataFormatString, dateTime)); | |
} | |
break; | |
default: | |
row.Cells.Add(dataItem.ToString()); | |
break; | |
} | |
else | |
{ | |
row.Cells.Add(dataItem.ToString()); | |
} | |
} | |
} | |
} | |
public static void ImportGroupedData<TKey,TValue>(this Pdf.Table table, IEnumerable<Models.GroupViewModel<TKey, TValue>> groupedData) | |
{ | |
var headRow = table.Rows.Add(); | |
var props = typeof(TValue).GetProperties(BindingFlags.Public | BindingFlags.Instance); | |
foreach (var prop in props) | |
{ | |
headRow.Cells.Add(prop.GetCustomAttribute(typeof(DisplayAttribute)) is DisplayAttribute dd ? dd.Name : prop.Name); | |
} | |
foreach (var group in groupedData) | |
{ | |
// Add group row to table | |
var row = table.Rows.Add(); | |
var cell = row.Cells.Add(group.Key.ToString()); | |
cell.ColSpan = props.Length; | |
cell.BackgroundColor = Pdf.Color.DarkGray; | |
cell.DefaultCellTextState.ForegroundColor = Pdf.Color.White; | |
foreach (var item in group.Values) | |
{ | |
// Add data row to table | |
var dataRow = table.Rows.Add(); | |
// Add cells | |
foreach (var t in props) | |
{ | |
var dataItem = t.GetValue(item, null); | |
if (t.GetCustomAttribute(typeof(DataTypeAttribute)) is DataTypeAttribute dataType) | |
switch (dataType.DataType) | |
{ | |
case DataType.Currency: | |
dataRow.Cells.Add(string.Format("{0:C}", dataItem)); | |
break; | |
case DataType.Date: | |
var dateTime = (DateTime)dataItem; | |
if (t.GetCustomAttribute(typeof(DisplayFormatAttribute)) is DisplayFormatAttribute df) | |
{ | |
dataRow.Cells.Add(string.IsNullOrEmpty(df.DataFormatString) | |
? dateTime.ToShortDateString() | |
: string.Format(df.DataFormatString, dateTime)); | |
} | |
break; | |
default: | |
dataRow.Cells.Add(dataItem.ToString()); | |
break; | |
} | |
else | |
{ | |
dataRow.Cells.Add(dataItem.ToString()); | |
} | |
} | |
} | |
} | |
} | |
} | |
public class GroupViewModel<K,T> | |
{ | |
public K Key; | |
public IEnumerable<T> Values; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Get data from database to DataTable | |
DataTable dt = new DataTable("Employee"); | |
dt.Columns.Add("Employee_ID", typeof(Int32)); | |
dt.Columns.Add("Employee_Name", typeof(string)); | |
dt.Columns.Add("Gender", typeof(string)); | |
// Add 2 rows into the DataTable object programmatically | |
DataRow dr = dt.NewRow(); | |
dr[0] = 1; | |
dr[1] = "John Smith"; | |
dr[2] = "Male"; | |
dt.Rows.Add(dr); | |
dr = dt.NewRow(); | |
dr[0] = 2; | |
dr[1] = "Mary Miller"; | |
dr[2] = "Female"; | |
dt.Rows.Add(dr); | |
// Create Document instance | |
Document doc = new Document(); | |
doc.Pages.Add(); | |
// Initializes a new instance of the Table | |
Aspose.Pdf.Table table = new Aspose.Pdf.Table(); | |
// Set column widths of the table | |
table.ColumnWidths = "40 100 100 100"; | |
// Set the table border color as LightGray | |
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray)); | |
// Set the border for table cells | |
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray)); | |
// Import data | |
table.ImportDataTable(dt, true, 0, 1, 3, 3); | |
// Add table object to first page of input document | |
doc.Pages[1].Paragraphs.Add(table); | |
// Save updated document containing table object | |
doc.Save("output.pdf"); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment