Renderizar tabela a partir da fonte de dados

Aspose.PDF permite criar uma tabela com DataSource de DataSet, DataTable, arrays e objetos IEnumerable usando a classe PdfLightTable

A classe Table é usada para processar tabelas. Esta classe nos dá a capacidade de criar tabelas e colocá-las no documento, usando Rows e Cells. Portanto, para criar a tabela, você precisa adicionar o número necessário de linhas e preenchê-las com o número apropriado de células.

O exemplo a seguir cria uma tabela 4x10.

var table = new Table
    {
        // Definir larguras automáticas da coluna da tabela
        ColumnWidths = "25% 25% 25% 25%",
        // Definir o preenchimento da célula
        DefaultCellPadding = new MarginInfo(10, 5, 10, 5), // Esquerda Inferior Direita Superior
        // Definir a cor da borda da tabela como Verde
        Border = new BorderInfo(BorderSide.All, .5f, Color.Green),
        // Definir a borda para as células da tabela como Verde
        DefaultCellBorder = new BorderInfo(BorderSide.All, .2f, Color.Green),
    };
    for (var rowCount = 0; rowCount < 10; rowCount++)
    {
        // Adicionar linha à tabela
        var row = table.Rows.Add();
        // Adicionar células à tabela
        for (int i = 0; i < 4; i++)
        {
            row.Cells.Add($"Cell ({i+1}, {rowCount +1})");
        }
    }
    // Adicionar objeto de tabela à primeira página do documento de entrada
    document.Pages[1].Paragraphs.Add(table);

Ao inicializar o objeto Table, foram usadas as configurações mínimas de aparência:

Exportando dados de um array de objetos

A classe Table fornece métodos para interagir com fontes de dados ADO.NET - ImportDataTable e ImportDataView.

Considerando que esses objetos não são muito convenientes para trabalhar no modelo MVC, limitar-nos-emos a um breve exemplo. Neste exemplo (linha 50), o método ImportDataTable é chamado e recebe como parâmetros uma instância de DataTable e configurações adicionais como a bandeira de cabeçalho e a posição inicial (linhas/colunas) para a saída de dados.

// Cria um novo documento PDF
var document = new Document
{
    PageInfo = new PageInfo { Margin = new MarginInfo(28, 28, 28, 42) }
};

var pdfPage = document.Pages.Add();

// Inicializa uma nova instância do TextFragment para o título do relatório
var textFragment = new TextFragment(reportTitle1);
Table table = new Table
{
    // Define as larguras das colunas da tabela
    ColumnWidths = "25% 25% 25% 25%",
    // Define o preenchimento das células
    DefaultCellPadding = new MarginInfo(10, 5, 10, 5), // Esquerda Inferior Direita Superior
    // Define a cor da borda da tabela como Verde
    Border = new BorderInfo(BorderSide.All, .5f, Color.Green),
    // Define a borda para as células da tabela como Preto
    DefaultCellBorder = new BorderInfo(BorderSide.All, .2f, Color.Green),
};

var configuration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("config.json", false)
    .Build();

var connectionString = configuration.GetSection("connectionString").Value;

if (string.IsNullOrEmpty(connectionString))
    throw new ArgumentException("Sem string de conexão em config.json");

var resultTable = new DataTable();

using (var conn = new SqlConnection(connectionString))
{
    const string sql = "SELECT * FROM Tennats";
    using (var cmd = new SqlCommand(sql, conn))
    {
        using (var adapter = new SqlDataAdapter(cmd))
        {
            adapter.Fill(resultTable);
        }
    }
}

table.ImportDataTable(resultTable, true, 1, 1);

// Adiciona o objeto tabela à primeira página do documento de entrada
document.Pages[1].Paragraphs.Add(table);
using (var streamOut = new MemoryStream())
{
    document.Save(streamOut);
    return new FileContentResult(streamOut.ToArray(), "application/pdf")
    {
        FileDownloadName = "demotable2.pdf"
    };
}