Ajouter des données de la base de données au PDF en C#

Les bases de données sont presque partout pour stocker et gérer les données. C’est une pratique courante des programmeurs de récupérer les données des bases de données et de les charger dans les applications. Lors de la génération de fichiers PDF par programmation, il peut être nécessaire de remplir le document avec les données de la base de données. Pour ce faire dans les applications .NET, cet article montre comment ajouter des données de la base de données aux fichiers PDF en C#.

API C# .NET pour ajouter des données de la base de données au PDF

Nous utiliserons Aspose.PDF for .NET pour ajouter des données de la base de données aux fichiers PDF. Il s’agit d’une API de génération et de manipulation de PDF populaire qui vous permet de créer des fichiers PDF de mises en page simples et complexes de manière transparente. Vous pouvez soit télécharger les binaires de l’API, soit l’installer à l’aide de NuGet.

PM> Install-Package Aspose.PDF

Ajouter des données de la base de données au PDF en C#

Dans la plupart des cas, les données sont extraites d’une table de base de données dans un DataTable ou un DataView. Par conséquent, pour la démonstration, nous utiliserons un DataTable pour ajouter des données à un fichier PDF. Pour simplifier les choses, nous allons créer et remplir le DataTable par programmation sans utiliser de base de données. Voici les étapes pour ajouter des données à un fichier PDF à partir d’une base de données en C#.

  • Chargez les données dans un DataTable à partir de la base de données.
  • Créez un nouveau PDF ou chargez-en un existant à l’aide de la classe Document.
  • Créez une instance de la classe Table et définissez ses propriétés, c’est-à-dire la largeur de la colonne, les bordures, etc.
  • Importez des données de la base de données vers un tableau PDF à l’aide de la méthode Table.ImportDataTable().
  • Ajoutez le tableau à la page à l’aide de la méthode Document.Pages[index].Paragraphs.Add(Table).
  • Enregistrez le fichier PDF en utilisant la méthode Document.Save(string).

L’exemple de code suivant montre comment importer des données d’une base de données au format PDF en C#.

// Obtenir des données de la base de données vers 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));

// Ajouter 2 lignes dans l'objet DataTable par programmation
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);

// Créer une instance de document
Document doc = new Document();
doc.Pages.Add();

// Initialise une nouvelle instance de la Table
Aspose.Pdf.Table table = new Aspose.Pdf.Table();

// Définir la largeur des colonnes du tableau
table.ColumnWidths = "40 100 100 100";

// Définissez la couleur de la bordure du tableau sur LightGray
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Définir la bordure des cellules du tableau
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Importer des données
table.ImportDataTable(dt, true, 0, 1, 3, 3);

// Ajouter un objet tableau à la première page du document d'entrée
doc.Pages[1].Paragraphs.Add(table);

// Enregistrer le document mis à jour contenant l'objet tableau
doc.Save("output.pdf");

Voici la sortie de l’exemple de code ci-dessus.

Ajouter des données de la base de données au PDF en C#

Ajouter des données de la base de données au PDF dans Entity Framework

De nos jours, Entity Framework (EF) est couramment utilisé par les développeurs. Par conséquent, il serait pratique d’étendre la classe Table pour remplir des documents PDF avec des listes ou des données groupées dans EF. Ce qui suit est la mise en œuvre de la manière de remplir un tableau PDF à l’aide d’une liste et de données groupées. Dans les deux méthodes, la table et les données sont transmises en tant qu’arguments de la méthode.

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)
        {
            // Ajouter une ligne au tableau
            var row = table.Rows.Add();
            // Ajouter des cellules de tableau
            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)
        {
            // Ajouter une ligne de groupe au tableau
            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)
            {
                // Ajouter une ligne de données au tableau
                var dataRow = table.Rows.Add();
                // Ajouter des cellules
                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;
}

Obtenez une licence gratuite

Vous pouvez obtenir une licence temporaire gratuite afin d’utiliser Aspose.PDF for .NET sans limitation d’évaluation.

Conclusion

Dans cet article, vous avez appris à ajouter des données d’une base de données dans des fichiers PDF en C#. Vous avez vu comment importer des données d’un DataTable dans un tableau dans un fichier PDF. De plus, nous avons couvert la mise en œuvre de l’importation de données au format PDF à l’aide d’Entity Framework. En outre, vous pouvez en savoir plus sur l’API C# PDF à l’aide de la documentation. Si vous avez des questions ou des questions, vous pouvez nous contacter via notre forum.

Voir également