Dodaj dane z bazy danych do PDF w C#

Bazy danych są prawie wszędzie do przechowywania danych i zarządzania nimi. Powszechną praktyką programistów jest pobieranie danych z baz danych i ładowanie ich do aplikacji. Podczas generowania plików PDF programowo może zaistnieć potrzeba wypełnienia dokumentu danymi z bazy danych. Aby to osiągnąć w aplikacjach .NET, w tym artykule pokazano, jak dodawać dane z bazy danych do plików PDF w języku C#.

C# .NET API do dodawania danych z bazy danych do pliku PDF

Wykorzystamy Aspose.PDF for .NET do dodania danych z bazy danych do plików PDF. Jest to popularny interfejs API do generowania i manipulowania plikami PDF, który umożliwia bezproblemowe tworzenie plików PDF o prostych i złożonych układach. Możesz pobrać pliki binarne API lub zainstalować je za pomocą NuGet.

PM> Install-Package Aspose.PDF

Dodaj dane z bazy danych do PDF w C#

W większości przypadków dane są pobierane z tabeli bazy danych do DataTable lub DataView. Dlatego do demonstracji użyjemy DataTable, aby dodać dane do pliku PDF. Aby uprościć sprawę, utworzymy i wypełnimy DataTable programowo bez użycia bazy danych. Poniżej przedstawiono kroki dodawania danych do pliku PDF z bazy danych w języku C#.

Poniższy przykładowy kod pokazuje, jak zaimportować dane z bazy danych do pliku PDF w języku C#.

// Pobierz dane z bazy danych 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));

// Dodaj programowo 2 wiersze do obiektu 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);

// Utwórz instancję dokumentu
Document doc = new Document();
doc.Pages.Add();

// Inicjuje nowe wystąpienie Table
Aspose.Pdf.Table table = new Aspose.Pdf.Table();

// Ustaw szerokości kolumn tabeli
table.ColumnWidths = "40 100 100 100";

// Ustaw kolor obramowania tabeli na LightGray
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Ustaw obramowanie komórek tabeli
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Zaimportować dane
table.ImportDataTable(dt, true, 0, 1, 3, 3);

// Dodaj obiekt tabeli do pierwszej strony dokumentu wejściowego
doc.Pages[1].Paragraphs.Add(table);

// Zapisz zaktualizowany dokument zawierający obiekt tabeli
doc.Save("output.pdf");

Poniżej przedstawiono dane wyjściowe powyższego przykładowego kodu.

Dodaj dane z bazy danych do PDF w C#

Dodaj dane z bazy danych do pliku PDF w Entity Framework

Obecnie programiści powszechnie używają Entity Framework (EF). Dlatego przydatne byłoby rozszerzenie klasy Table w celu wypełnienia dokumentów PDF listami lub zgrupowanymi danymi w EF. Poniżej przedstawiono implementację wypełniania tabeli PDF przy użyciu listy i zgrupowanych danych. W obu metodach Tabela i dane są przekazywane 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)
        {
            // Dodaj wiersz do tabeli
            var row = table.Rows.Add();
            // Dodaj komórki tabeli
            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)
        {
            // Dodaj wiersz grupy do tabeli
            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)
            {
                // Dodaj wiersz danych do tabeli
                var dataRow = table.Rows.Add();
                // Dodaj komórki
                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;
}

Uzyskaj bezpłatną licencję

Możesz uzyskać bezpłatną tymczasową licencję, aby używać Aspose.PDF for .NET bez ograniczeń ewaluacyjnych.

Wniosek

W tym artykule nauczyłeś się dodawać dane z bazy danych do plików PDF w języku C#. Widziałeś, jak importować dane z DataTable do tabeli w pliku PDF. Dodatkowo omówiliśmy implementację importu danych do PDF z wykorzystaniem Entity Framework. Poza tym możesz dowiedzieć się więcej o C# PDF API, korzystając z dokumentacji. W przypadku jakichkolwiek pytań lub wątpliwości możesz skontaktować się z nami za pośrednictwem naszego forum.

Zobacz też