เพิ่มข้อมูลจากฐานข้อมูลเป็น PDF ใน C#

ฐานข้อมูลมีอยู่เกือบทุกที่ในการจัดเก็บและจัดการข้อมูล เป็นเรื่องปกติของโปรแกรมเมอร์ในการดึงข้อมูลจากฐานข้อมูลและโหลดลงในแอปพลิเคชัน เมื่อสร้างไฟล์ PDF โดยทางโปรแกรม เราอาจจำเป็นต้องเติมเอกสารด้วยข้อมูลในฐานข้อมูล เพื่อให้สำเร็จในแอปพลิเคชัน .NET บทความนี้แสดงวิธีเพิ่มข้อมูลจากฐานข้อมูลไปยังไฟล์ PDF ใน C#

C# .NET API เพื่อเพิ่มข้อมูลจากฐานข้อมูลเป็น PDF

เราจะใช้ Aspose.PDF for .NET เพื่อเพิ่มข้อมูลจากฐานข้อมูลไปยังไฟล์ PDF เป็น API การสร้างและการจัดการ PDF ที่ได้รับความนิยมซึ่งช่วยให้คุณสร้างไฟล์ PDF ที่มีเลย์เอาต์ที่เรียบง่ายและซับซ้อนได้อย่างราบรื่น คุณสามารถ ดาวน์โหลด ไบนารีของ API หรือติดตั้งโดยใช้ NuGet

PM> Install-Package Aspose.PDF

เพิ่มข้อมูลจากฐานข้อมูลเป็น PDF ใน C#

ในกรณีส่วนใหญ่ ข้อมูลจะถูกดึงจากตารางฐานข้อมูลไปยัง DataTable หรือ DataView ดังนั้น สำหรับการสาธิต เราจะใช้ DataTable เพื่อเพิ่มข้อมูลลงในไฟล์ PDF เพื่อให้ทุกอย่างง่ายขึ้น เราจะสร้างและเติมข้อมูลใน DataTable โดยทางโปรแกรมโดยไม่ต้องใช้ฐานข้อมูล ต่อไปนี้เป็นขั้นตอนในการเพิ่มข้อมูลไปยังไฟล์ PDF จากฐานข้อมูลใน C#

  • โหลดข้อมูลลงใน DataTable จากฐานข้อมูล
  • สร้าง PDF ใหม่หรือโหลดไฟล์ที่มีอยู่โดยใช้คลาส Document
  • สร้างอินสแตนซ์ของคลาส 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));

// เพิ่ม 2 แถวลงในวัตถุ 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) เป็นที่นิยมใช้โดยนักพัฒนา ดังนั้นจึงเป็นการสะดวกที่จะขยายคลาส Table เพื่อเติมเอกสาร 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 for .NET โดยไม่มีข้อจำกัดในการประเมิน

บทสรุป

ในบทความนี้ คุณได้เรียนรู้วิธีเพิ่มข้อมูลจากฐานข้อมูลลงในไฟล์ PDF ใน C# คุณได้เห็นวิธีการนำเข้าข้อมูลจาก DataTable ไปยังตารางในไฟล์ PDF นอกจากนี้ เรายังกล่าวถึงการดำเนินการนำเข้าข้อมูลไปยัง PDF โดยใช้ Entity Framework นอกจากนี้ คุณสามารถสำรวจเพิ่มเติมเกี่ยวกับ C# PDF API โดยใช้ เอกสารประกอบ ในกรณีที่คุณมีคำถามหรือข้อสงสัย คุณสามารถติดต่อเราผ่านทาง ฟอรัม

ดูสิ่งนี้ด้วย