C#에서 데이터베이스의 데이터를 PDF로 추가

데이터베이스는 데이터를 저장하고 관리하기 위해 거의 모든 곳에 있습니다. 데이터베이스에서 데이터를 검색하고 응용 프로그램에 로드하는 것은 프로그래머의 일반적인 관행입니다. 프로그래밍 방식으로 PDF 파일을 생성할 때 데이터베이스의 데이터로 문서를 채워야 할 수도 있습니다. .NET 응용 프로그램에서 이를 수행하기 위해 이 문서에서는 데이터베이스의 데이터를 C#의 PDF 파일에 추가하는 방법을 보여줍니다.

데이터베이스에서 PDF로 데이터를 추가하는 C# .NET API

Aspose.PDF for .NET를 사용하여 데이터베이스에서 PDF 파일로 데이터를 추가합니다. 간단하고 복잡한 레이아웃의 PDF 파일을 원활하게 생성할 수 있는 인기 있는 PDF 생성 및 조작 API입니다. API의 바이너리를 다운로드하거나 NuGet을 사용하여 설치할 수 있습니다.

PM> Install-Package Aspose.PDF

C#에서 데이터베이스의 데이터를 PDF로 추가

대부분의 경우 데이터는 데이터베이스 테이블에서 DataTable 또는 DataView로 가져옵니다. 따라서 데모를 위해 DataTable을 사용하여 PDF 파일에 데이터를 추가합니다. 일을 더 단순하게 유지하기 위해 데이터베이스를 사용하지 않고 프로그래밍 방식으로 DataTable을 만들고 채웁니다. 다음은 C#의 데이터베이스에서 PDF 파일에 데이터를 추가하는 단계입니다.

  • 데이터베이스에서 DataTable로 데이터를 로드합니다.
  • Document 클래스를 사용하여 새 PDF를 만들거나 기존 PDF를 로드합니다.
  • Table 클래스의 인스턴스를 만들고 해당 속성(예: 열 너비, 테두리 등)을 설정합니다.
  • Table.ImportDataTable() 메서드를 사용하여 데이터베이스에서 PDF 테이블로 데이터를 가져옵니다.
  • Document.Pages[index].Paragraphs.Add(Table) 메서드를 사용하여 페이지에 테이블을 추가합니다.
  • Document.Save(string) 메서드를 사용하여 PDF 파일을 저장합니다.

다음 코드 샘플은 C#의 데이터베이스에서 PDF로 데이터를 가져오는 방법을 보여줍니다.

// 데이터베이스에서 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 개체에 2개의 행 추가
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");

다음은 위 코드 샘플의 출력입니다.

C#에서 데이터베이스의 데이터를 PDF로 추가

Entity Framework에서 데이터베이스의 데이터를 PDF로 추가

요즘 개발자들은 Entity Framework(EF)를 많이 사용하고 있습니다. 따라서 Table 클래스를 확장하여 EF의 목록 또는 그룹화된 데이터로 PDF 문서를 채우는 것이 편리할 것입니다. 다음은 목록 및 그룹화된 데이터를 사용하여 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을 사용하려면 무료 임시 라이센스를 얻으십시오.

결론

이 기사에서는 데이터베이스의 데이터를 C#의 PDF 파일에 추가하는 방법을 배웠습니다. DataTable에서 PDF 파일의 테이블로 데이터를 가져오는 방법을 살펴보았습니다. 또한 Entity Framework를 사용하여 데이터를 PDF로 가져오는 구현을 다루었습니다. 또한 문서를 사용하여 C# PDF API에 대해 자세히 알아볼 수 있습니다. 질문이나 질문이 있는 경우 포럼을 통해 문의할 수 있습니다.

또한보십시오