Databaser finns nästan överallt för att lagra och hantera data. Det är en vanlig praxis för programmerare att hämta data från databaserna och ladda in dem i applikationerna. När man genererar PDF-filer programmatiskt kan man behöva fylla i dokumentet med data i databasen. För att åstadkomma det i .NET-applikationer visar den här artikeln hur man lägger till data från databasen till PDF-filer i C#.
- .NET API för att lägga till data från databas till PDF
- Lägg till data från databas till PDF
- Lägg till data från databas till PDF i Entity Framework
C# .NET API för att lägga till data från databas till PDF
Vi kommer att använda Aspose.PDF för .NET för att lägga till data från databasen till PDF-filer. Det är ett populärt PDF-genererings- och manipulations-API som låter dig skapa PDF-filer med enkla och komplexa layouter sömlöst. Du kan antingen ladda ner API:s binärer eller installera den med NuGet.
PM> Install-Package Aspose.PDF
Lägg till data från databas till PDF i C#
I de flesta fall hämtas data från en databastabell till en DataTable eller DataView. Därför, för demonstration, kommer vi att använda en DataTable för att lägga till data till en PDF-fil. För att göra saker enklare kommer vi att skapa och fylla i DataTable programmatiskt utan att använda en databas. Följande är stegen för att lägga till data till en PDF-fil från databasen i C#.
- Ladda data till en DataTable från databasen.
- Skapa en ny PDF eller ladda en befintlig med klassen Dokument.
- Skapa en instans av klassen Table och ställ in dess egenskaper, dvs kolumnbredd, gränser osv.
- Importera data från databas till PDF-tabell med metoden Table.ImportDataTable().
- Lägg till tabellen på sidan med metoden Document.Pages[index].Paragraphs.Add(Table).
- Spara PDF-filen med metoden Document.Save(string).
Följande kodexempel visar hur man importerar data från databas till PDF i C#.
// Hämta data från databas till 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));
// Lägg till 2 rader i DataTable-objektet programmatiskt
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);
// Skapa dokumentinstans
Document doc = new Document();
doc.Pages.Add();
// Initierar en ny instans av tabellen
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
// Ställ in tabellens kolumnbredd
table.ColumnWidths = "40 100 100 100";
// Ställ in bordets kantfärg som ljusgrå
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Ställ in gränsen för tabellceller
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Importera data
table.ImportDataTable(dt, true, 0, 1, 3, 3);
// Lägg till tabellobjekt på första sidan i inmatningsdokumentet
doc.Pages[1].Paragraphs.Add(table);
// Spara uppdaterat dokument som innehåller tabellobjekt
doc.Save("output.pdf");
Följande är resultatet av ovanstående kodexempel.
Lägg till data från databas till PDF i Entity Framework
Dessa dagar används Entity Framework (EF) ofta av utvecklarna. Därför skulle det vara praktiskt att utöka klassen Tabell för att fylla PDF-dokument med listor eller grupperade data i EF. Följande är implementeringen av hur man fyller i en PDF-tabell med hjälp av en lista och grupperade data. I båda metoderna skickas tabellen och data som argument för metoden.
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)
{
// Lägg till rad i tabellen
var row = table.Rows.Add();
// Lägg till tabellceller
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)
{
// Lägg till grupprad i tabellen
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)
{
// Lägg till datarad i tabellen
var dataRow = table.Rows.Add();
// Lägg till celler
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;
}
Skaffa en gratis licens
Du kan få en gratis tillfällig licens för att använda Aspose.PDF för .NET utan utvärderingsbegränsningar.
Slutsats
I den här artikeln har du lärt dig hur du lägger till data från databasen till PDF-filer i C#. Du har sett hur man importerar data från en DataTable till en tabell i PDF-fil. Dessutom har vi täckt implementeringen av import av data till PDF med hjälp av Entity Framework. Dessutom kan du utforska mer om C# PDF API med hjälp av dokumentationen. Om du skulle ha några frågor eller funderingar kan du kontakta oss via vårt forum.