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にデータを追加する

EntityFrameworkでデータベースからPDFにデータを追加する

最近、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を使用するには、無料の一時ライセンスを取得できます。

結論

この記事では、データベースからC#でPDFファイルにデータを追加する方法を学習しました。 DataTableからPDFファイルのテーブルにデータをインポートする方法を見てきました。さらに、EntityFrameworkを使用してPDFにデータをインポートする実装についても説明しました。さらに、ドキュメントを使用して、C#PDFAPIの詳細を調べることができます。ご不明な点やご質問がございましたら、フォーラムからお問い合わせください。

関連項目