Отображение таблицы из источника данных

Aspose.PDF позволяет создавать таблицу с DataSource из DataSet, DataTable, массивов и объектов IEnumerable с использованием класса PdfLightTable

Класс Table используется для обработки таблиц. Этот класс дает нам возможность создавать таблицы и размещать их в документе, используя Rows и Cells. Таким образом, для создания таблицы необходимо добавить нужное количество строк и заполнить их соответствующим количеством ячеек.

Следующий пример создает таблицу размером 4x10.

var table = new Table
    {
        // Установить автоматическую ширину столбцов таблицы
        ColumnWidths = "25% 25% 25% 25%",
        // Установить отступы в ячейках
        DefaultCellPadding = new MarginInfo(10, 5, 10, 5), // Left Bottom Right Top
        // Установить цвет рамки таблицы как Зеленый
        Border = new BorderInfo(BorderSide.All, .5f, Color.Green),
        // Установить рамку для ячеек таблицы как Черный
        DefaultCellBorder = new BorderInfo(BorderSide.All, .2f, Color.Green),
    };
    for (var rowCount = 0; rowCount < 10; rowCount++)
    {
        // Добавить строку в таблицу
        var row = table.Rows.Add();
        // Добавить ячейки в таблицу
        for (int i = 0; i < 4; i++)
        {
            row.Cells.Add($"Cell ({i+1}, {rowCount +1})");
        }
    }
    // Добавить объект таблицы на первую страницу входного документа
    document.Pages[1].Paragraphs.Add(table);

При инициализации объекта Table были использованы минимальные настройки оформления:

  • ColumnWidths - ширина столбцов (по умолчанию);
  • DefaultCellPadding - стандартные поля для ячейки таблицы;
  • Border - атрибуты рамки таблицы (стиль, толщина, цвет);
  • DefaultCellBorder - атрибуты рамки ячейки (стиль, толщина, цвет).

Экспорт данных из массива объектов

Класс Table предоставляет методы для взаимодействия с источниками данных ADO.NET - ImportDataTable и ImportDataView.

Учитывая, что эти объекты не очень удобны для работы в шаблоне MVC, мы ограничимся кратким примером. В этом примере (строка 50) вызывается метод ImportDataTable, который получает в качестве параметров экземпляр DataTable и дополнительные настройки, такие как флаг заголовка и начальная позиция (строки/столбцы) для вывода данных.

// Создать новый PDF документ
var document = new Document
{
    PageInfo = new PageInfo { Margin = new MarginInfo(28, 28, 28, 42) }
};

var pdfPage = document.Pages.Add();

// Инициализирует новый экземпляр TextFragment для заголовка отчета
var textFragment = new TextFragment(reportTitle1);
Table table = new Table
{
    // Установить ширину столбцов таблицы
    ColumnWidths = "25% 25% 25% 25%",
    // Установить отступы в ячейках
    DefaultCellPadding = new MarginInfo(10, 5, 10, 5), // Левый Нижний Правый Верхний
    // Установить цвет границы таблицы в зеленый
    Border = new BorderInfo(BorderSide.All, .5f, Color.Green),
    // Установить границы для ячеек таблицы в черный
    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("Нет строки подключения в 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);

// Добавить объект таблицы на первую страницу входного документа
document.Pages[1].Paragraphs.Add(table);
using (var streamOut = new MemoryStream())
{
    document.Save(streamOut);
    return new FileContentResult(streamOut.ToArray(), "application/pdf")
    {
        FileDownloadName = "demotable2.pdf"
    };
}