Tambahkan Data dari Database ke PDF di C#

Database hampir di mana-mana untuk menyimpan dan mengelola data. Ini adalah praktik umum programmer untuk mengambil data dari database dan memuatnya ke dalam aplikasi. Saat membuat file PDF secara terprogram, seseorang mungkin perlu mengisi dokumen dengan data dalam database. Untuk melakukannya di aplikasi .NET, artikel ini menunjukkan cara menambahkan data dari database ke file PDF di C#.

C# .NET API untuk Menambahkan Data dari Database ke PDF

Kami akan menggunakan Aspose.PDF for .NET untuk menambahkan data dari database ke file PDF. Ini adalah API pembuatan dan manipulasi PDF populer yang memungkinkan Anda membuat file PDF dengan tata letak sederhana dan kompleks dengan mulus. Anda dapat mengunduh binari API atau menginstalnya menggunakan NuGet.

PM> Install-Package Aspose.PDF

Tambahkan Data dari Database ke PDF di C#

Dalam sebagian besar kasus, data diambil dari tabel database ke DataTable atau DataView. Oleh karena itu, untuk demonstrasi, kami akan menggunakan DataTable untuk menambahkan data ke file PDF. Agar semuanya lebih sederhana, kami akan membuat dan mengisi DataTable secara terprogram tanpa menggunakan database. Berikut langkah-langkah menambahkan data ke file PDF dari database di C#.

Contoh kode berikut menunjukkan cara mengimpor data dari database ke PDF di C#.

// Dapatkan data dari database ke 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));

// Tambahkan 2 baris ke objek DataTable secara terprogram
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);

// Buat contoh Dokumen
Document doc = new Document();
doc.Pages.Add();

// Menginisialisasi instance baru dari Tabel
Aspose.Pdf.Table table = new Aspose.Pdf.Table();

// Tetapkan lebar kolom tabel
table.ColumnWidths = "40 100 100 100";

// Atur warna batas tabel sebagai LightGray
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Atur batas untuk sel tabel
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Impor data
table.ImportDataTable(dt, true, 0, 1, 3, 3);

// Tambahkan objek tabel ke halaman pertama dokumen input
doc.Pages[1].Paragraphs.Add(table);

// Simpan dokumen yang diperbarui yang berisi objek tabel
doc.Save("output.pdf");

Berikut ini adalah output dari contoh kode di atas.

Tambahkan Data dari Database ke PDF di C#

Tambahkan Data dari Database ke PDF di Entity Framework

Hari-hari ini, Entity Framework (EF) sedang umum digunakan oleh para pengembang. Oleh karena itu, akan berguna untuk memperluas kelas Tabel untuk mengisi dokumen PDF dengan daftar atau data yang dikelompokkan di EF. Berikut implementasi cara mengisi tabel PDF menggunakan daftar dan data yang dikelompokkan. Dalam kedua metode, Tabel dan data dilewatkan sebagai argumen dari metode tersebut.

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)
        {
            // Tambahkan baris ke tabel
            var row = table.Rows.Add();
            // Tambahkan sel tabel
            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)
        {
            // Tambahkan baris grup ke tabel
            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)
            {
                // Tambahkan baris data ke tabel
                var dataRow = table.Rows.Add();
                // Tambahkan sel
                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;
}

Dapatkan Lisensi Gratis

Anda bisa mendapatkan lisensi sementara gratis untuk menggunakan Aspose.PDF for .NET tanpa batasan evaluasi.

Kesimpulan

Pada artikel ini, Anda telah mempelajari cara menambahkan data dari database ke file PDF di C#. Anda telah melihat cara mengimpor data dari DataTable ke dalam tabel dalam file PDF. Selain itu, kami telah membahas implementasi pengimporan data ke PDF menggunakan Entity Framework. Selain itu, Anda dapat mempelajari lebih lanjut tentang C# PDF API menggunakan dokumentasi. Jika Anda memiliki pertanyaan atau pertanyaan, Anda dapat menghubungi kami melalui forum kami.

Lihat juga