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#.
- .NET API do dodawania danych z bazy danych do pliku PDF
- Dodaj dane z bazy danych do pliku PDF
- Dodaj dane z bazy danych do pliku PDF w Entity Framework
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#.
- Załaduj dane do DataTable z bazy danych.
- Utwórz nowy plik PDF lub załaduj istniejący, używając klasy Document.
- Utwórz instancję klasy Table i ustaw jej właściwości, tj. szerokość kolumn, obramowania itp.
- Zaimportuj dane z bazy danych do tabeli PDF za pomocą metody Table.ImportDataTable().
- Dodaj tabelę do strony metodą Document.Pages[index].Paragraphs.Add(Table).
- Zapisz plik PDF za pomocą metody Document.Save(string).
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 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.