Přidat data z databáze do PDF v C#

Databáze jsou téměř všude k ukládání a správě dat. Běžnou praxí programátorů je získávat data z databází a načítat je do aplikací. Při programovém generování souborů PDF může být nutné naplnit dokument daty v databázi. Chcete-li toho dosáhnout v aplikacích .NET, tento článek ukazuje, jak přidat data z databáze do souborů PDF v C#.

C# .NET API pro přidávání dat z databáze do PDF

K přidání dat z databáze do souborů PDF použijeme Aspose.PDF for .NET. Je to populární rozhraní API pro generování a manipulaci s PDF, které vám umožňuje bezproblémově vytvářet soubory PDF s jednoduchými i složitými rozvrženími. Můžete si buď stáhnout binární soubory API, nebo je nainstalovat pomocí NuGet.

PM> Install-Package Aspose.PDF

Přidat data z databáze do PDF v C#

Ve většině případů jsou data načtena z databázové tabulky do DataTable nebo DataView. Proto pro demonstraci použijeme DataTable pro přidání dat do souboru PDF. Aby to bylo jednodušší, vytvoříme a naplníme DataTable programově bez použití databáze. Následují kroky k přidání dat do souboru PDF z databáze v C#.

Následující ukázka kódu ukazuje, jak importovat data z databáze do PDF v C#.

// Získejte data z databáze do 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));

// Přidejte 2 řádky do objektu DataTable programově
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);

// Vytvořit instanci dokumentu
Document doc = new Document();
doc.Pages.Add();

// Inicializuje novou instanci tabulky
Aspose.Pdf.Table table = new Aspose.Pdf.Table();

// Nastavte šířku sloupců tabulky
table.ColumnWidths = "40 100 100 100";

// Nastavte barvu okraje tabulky jako LightGray
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Nastavte ohraničení buněk tabulky
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Importujte data
table.ImportDataTable(dt, true, 0, 1, 3, 3);

// Přidejte objekt tabulky na první stránku vstupního dokumentu
doc.Pages[1].Paragraphs.Add(table);

// Uložte aktualizovaný dokument obsahující objekt tabulky
doc.Save("output.pdf");

Následuje výstup výše uvedené ukázky kódu.

Přidat data z databáze do PDF v C#

Přidejte data z databáze do PDF v Entity Framework

V současné době vývojáři běžně používají Entity Framework (EF). Proto by bylo užitečné rozšířit třídu Table o naplnění dokumentů PDF seznamy nebo seskupenými daty v EF. Následuje implementace toho, jak naplnit tabulku PDF pomocí seznamu a seskupených dat. V obou metodách je tabulka a data předávána jako argumenty metody.

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)
        {
            // Přidat řádek do tabulky
            var row = table.Rows.Add();
            // Přidejte buňky tabulky
            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)
        {
            // Přidat řádek skupiny do tabulky
            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)
            {
                // Přidejte řádek dat do tabulky
                var dataRow = table.Rows.Add();
                // Přidejte buňky
                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;
}

Získejte bezplatnou licenci

Můžete získat bezplatnou dočasnou licenci, abyste mohli používat Aspose.PDF pro .NET bez omezení hodnocení.

Závěr

V tomto článku jste se naučili, jak přidat data z databáze do souborů PDF v C#. Viděli jste, jak importovat data z DataTable do tabulky v souboru PDF. Kromě toho jsme se zabývali implementací importu dat do PDF pomocí Entity Framework. Kromě toho můžete prozkoumat více o C# PDF API pomocí dokumentace. V případě jakýchkoli dotazů nebo dotazů nás můžete kontaktovat prostřednictvím našeho fóra.

Viz také