C# ile Veritabanından PDF'e Veri Ekleme

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 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.

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.

C# ile Veritabanından PDF'e Veri Ekleme

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.

Ayrıca bakınız