Додавання даних із бази даних до PDF на C#

Бази даних є майже скрізь для зберігання та керування даними. Зазвичай програмісти отримують дані з баз даних і завантажують їх у програми. Під час програмного створення файлів PDF може знадобитися заповнити документ даними в базі даних. Щоб досягти цього в програмах .NET, у цій статті показано, як додати дані з бази даних до PDF-файлів у C#.

C# .NET API для додавання даних із бази даних у PDF

Ми будемо використовувати Aspose.PDF for .NET, щоб додати дані з бази даних до файлів PDF. Це популярний API для створення PDF-файлів і роботи з ними, який дозволяє легко створювати PDF-файли з простими та складними макетами. Ви можете завантажити двійкові файли API або встановити його за допомогою NuGet.

PM> Install-Package Aspose.PDF

Додавання даних із бази даних до PDF на C#

У більшості випадків дані витягуються з таблиці бази даних у 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 на C#

Додайте дані з бази даних до 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 for .NET без оціночних обмежень.

Висновок

У цій статті ви дізналися, як додавати дані з бази даних у PDF-файли на C#. Ви бачили, як імпортувати дані з DataTable у таблицю у файлі PDF. Крім того, ми розглянули впровадження імпорту даних у PDF за допомогою Entity Framework. Крім того, ви можете дізнатися більше про C# PDF API за допомогою документації. Якщо у вас виникнуть запитання чи запити, ви можете зв’язатися з нами через наш форум.

Дивись також