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.
- .NET-API zum Hinzufügen von Daten aus der Datenbank zu PDF
- Daten aus Datenbank zu PDF hinzufügen
- Hinzufügen von Daten aus der Datenbank zu PDF in Entity Framework
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.
- Laden Sie die Daten in eine DataTable aus der Datenbank.
- Erstellen Sie ein neues PDF oder laden Sie ein vorhandenes mit der Klasse Document.
- Erstellen Sie eine Instanz der Klasse Table und legen Sie ihre Eigenschaften fest, dh Spaltenbreite, Rahmen usw.
- Importieren Sie Daten aus der Datenbank in eine PDF-Tabelle mit der Methode Table.ImportDataTable().
- Fügen Sie die Tabelle mithilfe der Methode Document.Pages[index].Paragraphs.Add(Table) zur Seite hinzu.
- Speichern Sie die PDF-Datei mit der Methode Document.Save(string).
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.
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.