إضافة البيانات من قاعدة البيانات إلى PDF في C#

قواعد البيانات موجودة في كل مكان تقريبًا لتخزين البيانات وإدارتها. من الممارسات الشائعة للمبرمجين استرداد البيانات من قواعد البيانات وتحميلها في التطبيقات. عند إنشاء ملفات PDF برمجيًا ، قد يحتاج المرء إلى ملء المستند بالبيانات الموجودة في قاعدة البيانات. لتحقيق ذلك في تطبيقات .NET ، توضح هذه المقالة كيفية إضافة بيانات من قاعدة البيانات إلى ملفات PDF في C#.

C# .NET API لإضافة البيانات من قاعدة البيانات إلى PDF

سنستخدم Aspose.PDF for .NET لإضافة البيانات من قاعدة البيانات إلى ملفات PDF. إنها واجهة برمجة تطبيقات لتوليد ومعالجة ملفات PDF شائعة تتيح لك إنشاء ملفات PDF ذات تخطيطات بسيطة ومعقدة بسلاسة. يمكنك إما تنزيل ثنائيات API أو تثبيتها باستخدام NuGet.

PM> Install-Package Aspose.PDF

إضافة البيانات من قاعدة البيانات إلى PDF في C#

في معظم الحالات ، يتم جلب البيانات من جدول قاعدة البيانات إلى DataTable أو DataView. لذلك ، للتوضيح ، سوف نستخدم DataTable لإضافة البيانات إلى ملف PDF. لإبقاء الأمور أبسط ، سنقوم بإنشاء DataTable ونشرها برمجيًا دون استخدام قاعدة بيانات. فيما يلي خطوات إضافة البيانات إلى ملف PDF من قاعدة البيانات في C#.

  • قم بتحميل البيانات في DataTable من قاعدة البيانات.
  • قم بإنشاء ملف PDF جديد أو قم بتحميل واحد موجود باستخدام فئة المستند.
  • قم بإنشاء مثيل لفئة Table وقم بتعيين خصائصها ، مثل عرض العمود والحدود وما إلى ذلك.
  • استيراد البيانات من قاعدة البيانات إلى جدول PDF باستخدام طريقة Table.ImportDataTable().
  • أضف الجدول إلى الصفحة باستخدام طريقة Document.Pages[index] .Paragraphs.Add (Table).
  • احفظ ملف PDF باستخدام طريقة Document.Save(string).

يوضح نموذج التعليمات البرمجية التالي كيفية استيراد البيانات من قاعدة البيانات إلى PDF في C#.

// الحصول على البيانات من قاعدة البيانات إلى 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));

// أضف صفين إلى كائن 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);

// إنشاء مثيل المستند
Document doc = new Document();
doc.Pages.Add();

// يقوم بتهيئة مثيل جديد للجدول
Aspose.Pdf.Table table = new Aspose.Pdf.Table();

// تعيين عرض أعمدة الجدول
table.ColumnWidths = "40 100 100 100";

// اضبط لون حدود الجدول على LightGray
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// عيّن الحدود لخلايا الجدول
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// بيانات الاستيراد
table.ImportDataTable(dt, true, 0, 1, 3, 3);

// أضف كائن جدول إلى الصفحة الأولى من مستند الإدخال
doc.Pages[1].Paragraphs.Add(table);

// احفظ المستند المحدث الذي يحتوي على كائن جدول
doc.Save("output.pdf");

التالي هو إخراج نموذج التعليمات البرمجية أعلاه.

إضافة البيانات من قاعدة البيانات إلى PDF في C#

أضف بيانات من قاعدة البيانات إلى PDF في Entity Framework

في هذه الأيام ، يتم استخدام Entity Framework (EF) بشكل شائع من قبل المطورين. لذلك ، سيكون من السهل توسيع فئة الجدول لتعبئة مستندات PDF بقوائم أو بيانات مجمعة في EF. ما يلي هو تنفيذ كيفية ملء جدول PDF باستخدام قائمة وبيانات مجمعة. في كلتا الطريقتين ، يتم تمرير الجدول والبيانات كوسيطات للطريقة.

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)
        {
            // أضف صفًا إلى الجدول
            var row = table.Rows.Add();
            // أضف خلايا الجدول
            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)
        {
            // أضف صف المجموعة إلى الجدول
            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)
            {
                // أضف صف البيانات إلى الجدول
                var dataRow = table.Rows.Add();
                // أضف خلايا
                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;
}

احصل على رخصة مجانية

يمكنك الحصول على ترخيص مؤقت مجاني من أجل استخدام Aspose.PDF لـ .NET بدون قيود تقييم.

استنتاج

في هذه المقالة ، تعلمت كيفية إضافة البيانات من قاعدة البيانات إلى ملفات PDF في C#. لقد رأيت كيفية استيراد البيانات من DataTable إلى جدول في ملف PDF. بالإضافة إلى ذلك ، قمنا بتغطية تنفيذ استيراد البيانات إلى PDF باستخدام Entity Framework. بالإضافة إلى ذلك ، يمكنك استكشاف المزيد حول C# PDF API باستخدام التوثيق. في حال كان لديك أي أسئلة أو استفسارات ، يمكنك الاتصال بنا عبر المنتدى.

أنظر أيضا