Aggiungi dati dal database al PDF in C#

I database sono quasi ovunque per archiviare e gestire i dati. È pratica comune dei programmatori recuperare i dati dai database e caricarli nelle applicazioni. Quando si generano file PDF a livello di codice, potrebbe essere necessario popolare il documento con i dati nel database. Per ottenere ciò nelle applicazioni .NET, questo articolo mostra come aggiungere dati dal database ai file PDF in C#.

API C# .NET per aggiungere dati dal database al PDF

Useremo Aspose.PDF for .NET per aggiungere dati dal database ai file PDF. È una popolare API di generazione e manipolazione di PDF che consente di creare file PDF di layout semplici e complessi senza problemi. Puoi scaricare i binari dell’API o installarlo utilizzando NuGet.

PM> Install-Package Aspose.PDF

Aggiungi dati dal database al PDF in C#

Nella maggior parte dei casi, i dati vengono recuperati da una tabella di database in un DataTable o DataView. Pertanto, a scopo dimostrativo, utilizzeremo una DataTable per aggiungere dati a un file PDF. Per semplificare le cose, creeremo e popoleremo DataTable a livello di codice senza utilizzare un database. Di seguito sono riportati i passaggi per aggiungere dati a un file PDF dal database in C#.

L’esempio di codice seguente mostra come importare dati dal database in PDF in C#.

// Ottieni dati dal database a 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));

// Aggiungere 2 righe nell'oggetto DataTable a livello di codice
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);

// Crea istanza del documento
Document doc = new Document();
doc.Pages.Add();

// Inizializza una nuova istanza della tabella
Aspose.Pdf.Table table = new Aspose.Pdf.Table();

// Imposta la larghezza delle colonne della tabella
table.ColumnWidths = "40 100 100 100";

// Imposta il colore del bordo della tabella come LightGray
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Imposta il bordo per le celle della tabella
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));

// Importa dati
table.ImportDataTable(dt, true, 0, 1, 3, 3);

// Aggiungi l'oggetto tabella alla prima pagina del documento di input
doc.Pages[1].Paragraphs.Add(table);

// Salva il documento aggiornato contenente l'oggetto tabella
doc.Save("output.pdf");

Di seguito è riportato l’output dell’esempio di codice precedente.

Aggiungi dati dal database al PDF in C#

Aggiungi dati dal database al PDF in Entity Framework

In questi giorni, Entity Framework (EF) viene comunemente utilizzato dagli sviluppatori. Pertanto, sarebbe utile estendere la classe Table per popolare documenti PDF con elenchi o dati raggruppati in EF. Di seguito è illustrata l’implementazione di come popolare una tabella PDF utilizzando un elenco e dati raggruppati. In entrambi i metodi, la tabella ei dati vengono passati come argomenti del metodo.

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)
        {
            // Aggiungi riga alla tabella
            var row = table.Rows.Add();
            // Aggiungi celle di tabella
            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)
        {
            // Aggiungi riga di gruppo alla tabella
            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)
            {
                // Aggiungi riga di dati alla tabella
                var dataRow = table.Rows.Add();
                // Aggiungi celle
                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;
}

Ottieni una licenza gratuita

Puoi ottenere una licenza temporanea gratuita per utilizzare Aspose.PDF per .NET senza limitazioni di valutazione.

Conclusione

In questo articolo, hai imparato come aggiungere dati dal database in file PDF in C#. Hai visto come importare dati da un DataTable in una tabella in un file PDF. Inoltre, abbiamo trattato l’implementazione dell’importazione di dati in PDF utilizzando Entity Framework. Inoltre, puoi esplorare di più sull’API C# PDF utilizzando la documentazione. In caso di domande o domande, puoi contattarci tramite il nostro forum.

Guarda anche