Daten aus Datenbank zu PDF in C# hinzufügen

Datenbanken sind fast überall vorhanden, um die Daten zu speichern und zu verwalten. Es ist eine gängige Praxis der Programmierer, die Daten aus den Datenbanken abzurufen und sie in die Anwendungen zu laden. Beim programmgesteuerten Generieren von PDF-Dateien muss das Dokument möglicherweise mit den Daten in der Datenbank gefüllt werden. Um dies in .NET-Anwendungen zu erreichen, zeigt dieser Artikel, wie Sie Daten aus einer Datenbank zu PDF-Dateien in C# hinzufügen.

C# .NET-API zum Hinzufügen von Daten aus der Datenbank zu PDF

Wir werden Aspose.PDF for .NET verwenden, um Daten aus der Datenbank zu PDF-Dateien hinzuzufügen. Es ist eine beliebte PDF-Generierungs- und -Manipulations-API, mit der Sie PDF-Dateien mit einfachen und komplexen Layouts nahtlos erstellen können. Sie können die Binärdateien der API entweder herunterladen oder sie mit NuGet installieren.

PM> Install-Package Aspose.PDF

Daten aus Datenbank zu PDF in C# hinzufügen

In den meisten Fällen werden die Daten aus einer Datenbanktabelle in eine DataTable oder DataView geholt. Daher verwenden wir zur Demonstration eine DataTable, um Daten zu einer PDF-Datei hinzuzufügen. Um die Dinge einfacher zu halten, erstellen und füllen wir die DataTable programmgesteuert, ohne eine Datenbank zu verwenden. Im Folgenden sind die Schritte zum Hinzufügen von Daten zu einer PDF-Datei aus einer Datenbank in C# aufgeführt.

Das folgende Codebeispiel zeigt, wie Daten aus der Datenbank in C# in PDF importiert werden.

// Holen Sie sich Daten aus der Datenbank in 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));

// Fügen Sie dem DataTable-Objekt programmgesteuert zwei Zeilen hinzu
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);

// Dokumentinstanz erstellen
Document doc = new Document();
doc.Pages.Add();

// Initialisiert eine neue Instanz der Tabelle
Aspose.Pdf.Table table = new Aspose.Pdf.Table();

// Legen Sie die Spaltenbreite der Tabelle fest
table.ColumnWidths = "40 100 100 100";

// Stellen Sie die Rahmenfarbe der Tabelle auf LightGray ein
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Legen Sie den Rahmen für Tabellenzellen fest
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Daten importieren
table.ImportDataTable(dt, true, 0, 1, 3, 3);

// Tabellenobjekt zur ersten Seite des Eingabedokuments hinzufügen
doc.Pages[1].Paragraphs.Add(table);

// Aktualisiertes Dokument mit Tabellenobjekt speichern
doc.Save("output.pdf");

Das Folgende ist die Ausgabe des obigen Codebeispiels.

Daten aus Datenbank zu PDF in C# hinzufügen

Hinzufügen von Daten aus der Datenbank zu PDF in Entity Framework

Heutzutage wird Entity Framework (EF) häufig von den Entwicklern verwendet. Daher wäre es praktisch, die Table-Klasse zu erweitern, um PDF-Dokumente mit Listen oder gruppierten Daten in EF zu füllen. Das Folgende ist die Implementierung, wie eine PDF-Tabelle mit einer Liste und gruppierten Daten gefüllt wird. Bei beiden Methoden werden die Tabelle und die Daten als Argumente der Methode übergeben.

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)
        {
            // Zeile zur Tabelle hinzufügen
            var row = table.Rows.Add();
            // Tabellenzellen hinzufügen
            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)
        {
            // Gruppenzeile zur Tabelle hinzufügen
            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)
            {
                // Datenzeile zur Tabelle hinzufügen
                var dataRow = table.Rows.Add();
                // Zellen hinzufügen
                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;
}

Holen Sie sich eine kostenlose Lizenz

Sie können eine kostenlose temporäre Lizenz erhalten, um Aspose.PDF für .NET ohne Evaluierungseinschränkungen zu verwenden.

Fazit

In diesem Artikel haben Sie gelernt, wie Sie in C# Daten aus einer Datenbank in PDF-Dateien einfügen. Sie haben gesehen, wie Sie Daten aus einer DataTable in eine Tabelle in einer PDF-Datei importieren. Darüber hinaus haben wir die Implementierung des Imports von Daten in PDF mit Entity Framework behandelt. Außerdem können Sie mithilfe der Dokumentation mehr über die C#-PDF-API erfahren. Falls Sie Fragen oder Anregungen haben, können Sie uns über unser Forum kontaktieren.

Siehe auch