Базы данных почти везде используются для хранения и управления данными. Программисты обычно извлекают данные из баз данных и загружают их в приложения. При программном создании файлов PDF может потребоваться заполнить документ данными из базы данных. Чтобы добиться этого в приложениях .NET, в этой статье показано, как добавлять данные из базы данных в файлы PDF на C#.
- .NET API для добавления данных из базы данных в PDF
- Добавить данные из базы данных в PDF
- Добавить данные из базы данных в PDF в Entity Framework
С# .NET API для добавления данных из базы данных в PDF
Мы будем использовать Aspose.PDF для .NET для добавления данных из базы данных в файлы PDF. Это популярный API для создания и обработки PDF-файлов, который позволяет легко создавать PDF-файлы с простыми и сложными макетами. Вы можете либо скачать бинарные файлы API, либо установить его с помощью NuGet.
PM> Install-Package Aspose.PDF
Добавить данные из базы данных в PDF на С#
В большинстве случаев данные извлекаются из таблицы базы данных в DataTable или DataView. Поэтому для демонстрации мы будем использовать DataTable для добавления данных в файл PDF. Для простоты мы создадим и заполним DataTable программно, без использования базы данных. Ниже приведены шаги для добавления данных в файл PDF из базы данных на C#.
- Загрузите данные в DataTable из базы данных.
- Создайте новый PDF-файл или загрузите существующий, используя класс Document.
- Создайте экземпляр класса Table и задайте его свойства, т.е. ширину столбца, границы и т. д.
- Импортируйте данные из базы данных в таблицу PDF с помощью метода Table.ImportDataTable().
- Добавьте таблицу на страницу методом Document.Pages[index].Paragraphs.Add(Table).
- Сохраните файл PDF, используя метод Document.Save(string).
В следующем примере кода показано, как импортировать данные из базы данных в PDF на C#.
// Получить данные из базы данных в 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));
// Добавить 2 строки в объект DataTable программно
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);
// Создать экземпляр документа
Document doc = new Document();
doc.Pages.Add();
// Инициализирует новый экземпляр таблицы
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
// Установить ширину столбцов таблицы
table.ColumnWidths = "40 100 100 100";
// Установите цвет границы таблицы как LightGray
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Установите границу для ячеек таблицы
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Импорт данных
table.ImportDataTable(dt, true, 0, 1, 3, 3);
// Добавить табличный объект на первую страницу входного документа
doc.Pages[1].Paragraphs.Add(table);
// Сохранить обновленный документ, содержащий табличный объект
doc.Save("output.pdf");
Ниже приведен вывод приведенного выше примера кода.
Добавить данные из базы данных в PDF в Entity Framework
В наши дни Entity Framework (EF) широко используется разработчиками. Поэтому было бы удобно расширить класс Table для заполнения документов PDF списками или сгруппированными данными в EF. Ниже приведена реализация того, как заполнить таблицу PDF с помощью списка и сгруппированных данных. В обоих методах таблица и данные передаются в качестве аргументов метода.
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)
{
// Добавить строку в таблицу
var row = table.Rows.Add();
// Добавить ячейки таблицы
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)
{
// Добавить строку группы в таблицу
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)
{
// Добавить строку данных в таблицу
var dataRow = table.Rows.Add();
// Добавить ячейки
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;
}
Получить бесплатную лицензию
Вы можете получить бесплатную временную лицензию, чтобы использовать Aspose.PDF для .NET без ограничений на пробную версию.
Вывод
В этой статье вы узнали, как добавлять данные из базы данных в файлы PDF на C#. Вы видели, как импортировать данные из DataTable в таблицу в файле PDF. Кроме того, мы рассмотрели реализацию импорта данных в PDF с помощью Entity Framework. Кроме того, вы можете узнать больше о C# PDF API, используя документацию. Если у вас возникнут какие-либо вопросы или вопросы, вы можете связаться с нами через наш форум.