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#.
- .NET API pro přidávání dat z databáze do PDF
- Přidejte data z databáze do PDF
- Přidejte data z databáze do PDF v Entity Framework
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#.
- Načtěte data do DataTable z databáze.
- Vytvořte nový PDF nebo načtěte existující pomocí třídy Document.
- Vytvořte instanci třídy Table a nastavte její vlastnosti, tj. šířku sloupce, okraje atd.
- Importujte data z databáze do tabulky PDF pomocí metody Table.ImportDataTable().
- Přidejte tabulku na stránku pomocí metody Document.Pages[index].Paragraphs.Add(Table).
- Uložte soubor PDF pomocí metody Document.Save(string).
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ř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.