Os bancos de dados estão em quase todos os lugares para armazenar e gerenciar os dados. É uma prática comum dos programadores recuperar os dados dos bancos de dados e carregá-los nos aplicativos. Ao gerar arquivos PDF programaticamente, pode ser necessário preencher o documento com os dados do banco de dados. Para fazer isso em aplicativos .NET, este artigo mostra como adicionar dados do banco de dados a arquivos PDF em C#.
- API .NET para adicionar dados do banco de dados ao PDF
- Adicionar dados do banco de dados ao PDF
- Adicionar dados do banco de dados ao PDF no Entity Framework
API C# .NET para adicionar dados do banco de dados ao PDF
Usaremos Aspose.PDF for .NET para adicionar dados do banco de dados aos arquivos PDF. É uma API popular de geração e manipulação de PDF que permite criar arquivos PDF de layouts simples e complexos sem problemas. Você pode baixar os binários da API ou instalá-la usando NuGet.
PM> Install-Package Aspose.PDF
Adicionar dados do banco de dados ao PDF em C#
Na maioria dos casos, os dados são buscados de uma tabela de banco de dados em um DataTable ou DataView. Portanto, para demonstração, usaremos uma DataTable para adicionar dados a um arquivo PDF. Para manter as coisas mais simples, vamos criar e preencher o DataTable programaticamente sem usar um banco de dados. A seguir estão as etapas para adicionar dados a um arquivo PDF do banco de dados em C#.
- Carregue os dados em uma DataTable do banco de dados.
- Crie um novo PDF ou carregue um existente usando a classe Document.
- Crie uma instância da classe Table e defina suas propriedades, ou seja, largura da coluna, bordas, etc.
- Importe dados do banco de dados para a tabela PDF usando o método Table.ImportDataTable().
- Adicione a tabela à página usando o método Document.Pages[index].Paragraphs.Add(Table).
- Salve o arquivo PDF usando o método Document.Save(string).
O exemplo de código a seguir mostra como importar dados do banco de dados para PDF em C#.
// Obter dados do banco de dados para 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));
// Adicione 2 linhas ao objeto DataTable programaticamente
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);
// Criar instância de documento
Document doc = new Document();
doc.Pages.Add();
// Inicializa uma nova instância da Tabela
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
// Definir larguras de coluna da tabela
table.ColumnWidths = "40 100 100 100";
// Defina a cor da borda da tabela como LightGray
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Definir a borda das células da tabela
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Importar dados
table.ImportDataTable(dt, true, 0, 1, 3, 3);
// Adicionar objeto de tabela à primeira página do documento de entrada
doc.Pages[1].Paragraphs.Add(table);
// Salvar documento atualizado contendo objeto de tabela
doc.Save("output.pdf");
A seguir está a saída do exemplo de código acima.
Adicionar dados do banco de dados ao PDF no Entity Framework
Atualmente, o Entity Framework (EF) está sendo comumente usado pelos desenvolvedores. Portanto, seria útil estender a classe Table para preencher documentos PDF com listas ou dados agrupados no EF. Veja a seguir a implementação de como preencher uma tabela PDF usando uma lista e dados agrupados. Em ambos os métodos, a Tabela e os dados são passados como argumentos do método.
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)
{
// Adicionar linha à tabela
var row = table.Rows.Add();
// Adicionar células de tabela
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)
{
// Adicionar linha de grupo à tabela
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)
{
// Adicionar linha de dados à tabela
var dataRow = table.Rows.Add();
// Adicionar células
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;
}
Obtenha uma licença gratuita
Você pode obter uma licença temporária gratuita para usar o Aspose.PDF para .NET sem limitações de avaliação.
Conclusão
Neste artigo, você aprendeu como adicionar dados do banco de dados em arquivos PDF em C#. Você viu como importar dados de um DataTable para uma tabela em arquivo PDF. Além disso, abordamos a implementação da importação de dados em PDF usando o Entity Framework. Além disso, você pode explorar mais sobre a API C# PDF usando a documentação. Caso você tenha alguma dúvida ou pergunta, você pode entrar em contato conosco através do nosso fórum.