Veritabanları, verileri depolamak ve yönetmek için neredeyse her yerdedir. Veritabanlarından veri almak ve uygulamalara yüklemek programcıların yaygın bir uygulamasıdır. PDF dosyalarını programlı olarak oluştururken, belgeyi veritabanındaki verilerle doldurmak gerekebilir. .NET uygulamalarında bunu başarmak için bu makale, C# dilinde veritabanından PDF dosyalarına nasıl veri ekleneceğini gösterir.
- Veritabanından PDF’e Veri Eklemek için .NET API
- Veritabanından PDF’e Veri Ekleme
- Entity Framework’te Veritabanından PDF’ye Veri Ekleme
Veritabanından PDF’e Veri Eklemek için C# .NET API
Veritabanından PDF dosyalarına veri eklemek için Aspose.PDF for .NET kullanacağız. Basit ve karmaşık düzenlerden oluşan PDF dosyalarını sorunsuz bir şekilde oluşturmanıza olanak tanıyan popüler bir PDF oluşturma ve işleme API’sidir. API ikili dosyalarını indirebilir veya NuGet kullanarak yükleyebilirsiniz.
PM> Install-Package Aspose.PDF
C# ile Veritabanından PDF’e Veri Ekleme
Çoğu durumda, veriler bir veritabanı tablosundan bir DataTable veya DataView’a getirilir. Bu nedenle, gösterim amacıyla, bir PDF dosyasına veri eklemek için bir DataTable kullanacağız. İşleri daha basit tutmak için DataTable’ı bir veritabanı kullanmadan programlı olarak oluşturacağız ve dolduracağız. C# veritabanından bir PDF dosyasına veri ekleme adımları aşağıdadır.
- Verileri veritabanından DataTable içine yükleyin.
- Belge sınıfını kullanarak yeni bir PDF oluşturun veya mevcut olanı yükleyin.
- Table sınıfının bir örneğini oluşturun ve sütun genişliği, kenarlıklar vb. gibi özelliklerini ayarlayın.
- Table.ImportDataTable() yöntemini kullanarak veri tabanından PDF tablosuna veri aktarın.
- Document.Pages[index].Paragraphs.Add(Table) yöntemini kullanarak tabloyu sayfaya ekleyin.
- Document.Save(string) yöntemini kullanarak PDF dosyasını kaydedin.
Aşağıdaki kod örneği, verilerin veritabanından C# dilinde PDF’ye nasıl aktarılacağını gösterir.
// Veritabanından DataTable'a veri alma
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));
// DataTable nesnesine programlı olarak 2 satır ekleyin
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);
// Belge örneği oluştur
Document doc = new Document();
doc.Pages.Add();
// Tablonun yeni bir örneğini başlatır
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
// Tablonun sütun genişliklerini ayarlama
table.ColumnWidths = "40 100 100 100";
// Tablo kenarlık rengini LightGray olarak ayarlayın
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Tablo hücreleri için kenarlığı ayarlama
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Verileri içe aktar
table.ImportDataTable(dt, true, 0, 1, 3, 3);
// Giriş belgesinin ilk sayfasına tablo nesnesi ekleyin
doc.Pages[1].Paragraphs.Add(table);
// Tablo nesnesini içeren güncellenmiş belgeyi kaydet
doc.Save("output.pdf");
Yukarıdaki kod örneğinin çıktısı aşağıdadır.
Entity Framework’te Veritabanından PDF’ye Veri Ekleme
Bu günlerde Entity Framework (EF), geliştiriciler tarafından yaygın olarak kullanılıyor. Bu nedenle, PDF belgelerini EF’de listeler veya gruplandırılmış verilerle doldurmak için Table sınıfını genişletmek kullanışlı olacaktır. Aşağıda, bir liste ve gruplandırılmış veriler kullanılarak bir PDF tablosunun nasıl doldurulacağı gösterilmektedir. Her iki yöntemde de Tablo ve veriler, yöntemin argümanları olarak iletilir.
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)
{
// Tabloya satır ekle
var row = table.Rows.Add();
// Tablo hücreleri ekle
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)
{
// Tabloya grup satırı ekle
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)
{
// Tabloya veri satırı ekle
var dataRow = table.Rows.Add();
// Hücre ekle
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;
}
Ücretsiz Lisans Alın
Aspose.PDF for .NET’i değerlendirme sınırlamaları olmaksızın kullanmak için ücretsiz bir geçici lisans alabilirsiniz.
Çözüm
Bu makalede, C# dilinde veritabanından PDF dosyalarına nasıl veri ekleneceğini öğrendiniz. Verileri bir DataTable’dan PDF dosyasındaki bir tabloya nasıl aktaracağınızı gördünüz. Ek olarak, Entity Framework kullanarak verileri PDF’ye içe aktarma uygulamasını ele aldık. Ayrıca, belgeleri kullanarak C# PDF API hakkında daha fazlasını keşfedebilirsiniz. Herhangi bir sorunuz veya sorunuz olması durumunda forumumuz aracılığıyla bizimle iletişime geçebilirsiniz.