Многие нуждаются в решении, которое будет генерировать отчеты под Linux системами, а также будет поддерживать работу с SQL подобными базами данных и не только. И у нас есть такое решение в виде FastReport.Core. Данная библиотека позволяет создавать отчеты под разными дистрибутивами Linux и имеет возможность подключаться к различным базам данных. В этой статье мы рассмотрим как это реализовать на дистрибутиве Debian 10 c использованием PostgreSQL.
Для начала устанавливаем PostgreSQL на Debian 10. Подробная установка описана по следующей ссылке. Проверим работоспособность Postgres перейдя в терминал. Переключаемся на учетную запись postgres с помощью следующей команды:
$ sudo -i -u postgres
После этого для получения доступа к оболочке postgres пишем следующее:
$ psql
Теперь у нас есть доступ к командной строке postgres, и дополнительно мы убедились в её работоспособности.
Добавляем пароль для юзера postgres вместо ‘password123’:
ALTER USER postgres WITH PASSWORD ‘password123’
Создаём тестовую таблицу:
CREATE TABLE test (city varchar(80), temp_lo int, temp_hi int);
И заполняем её данными:
INSERT INTO test VALUES ('Chicago',30,40);
Готово, теперь проверим таблицу на наличие данных с помощью следующей команды. Результат отражен на рисунке ниже.
SELECT * FROM test;
Для создания приложения на .NET 5.0 нам понадобиться установить сам DotNet. Переходим на страницу с подробной установкой и внимательно изучаем все необходимые моменты. Для более удобной работы можно загрузить VS code по этой ссылке. Затем скачиваем deb пакет и устанавливаем его на свой компьютер.
В самом VS code скачиваем плагины С# и Nuget Gallery. Последний нужен для удобного поиска и правильной установки nuget пакетов.
Создаем проект в VS code, для этого нажимаем CTRL + J чтобы открылась консоль внутри VS code. После вводим эту команду:
dotnet new console
Следующим шагом после создание проекта, нам нужно скачать и установить нужные библиотеки. По завершению прошлых действий открываем Nuget Gallery в тестовом проекте.
Ищем FastReport.Core и устанавливаем его. Обязательно проверьте галочку напротив Prerelease, так как данный пакет является демонстрационной версией, иначе пакет не будет отображаться.
Коннектор не является демонстрационной версией, так что не обязательно ставить галочку напротив Prerelease. Достаточно найти в строке поиска FastReport.Data.Postgres и установить его точно так же, как и прошлый пакет.
После установки всех необходимых компонентов открываем Program.cs в нашем проекте и вставляем следующий код в метод main:
using System; using FastReport; using FastReport.Data; using FastReport.Utils; using FastReport.Export.Pdf; static void Main(string[] args) { //Создание подключения к PostgreSQL RegisteredObjects.AddConnection(typeof(PostgresDataConnection)); PostgresDataConnection connection = new PostgresDataConnection(); connection.ConnectionString = "Host=localhost;Username=postgres;Password=1234;Database=postgres"; connection.CreateAllTables(); //Создание отчета и подключение базы и таблицы к отчету Report report = new Report(); report.Dictionary.Connections.Add(connection); connection.Enabled = true; foreach(TableDataSource table in connection.Tables) { if(table.Name == "public_test") { table.Enabled = true; } } ReportPage page = new ReportPage(); report.Pages.Add(page); page.CreateUniqueName(); DataBand dataBand = new DataBand(); page.Bands.Add(dataBand); dataBand.CreateUniqueName(); //Присваиваем DataBend нашу таблицу dataBand.DataSource = report.GetDataSource("public_test"); dataBand.Height = Units.Centimeters * 0.5f; TextObject City = new TextObject(); City.CreateUniqueName(); City.Bounds = new System.Drawing.RectangleF(0,0,100,100); City.Parent = dataBand; //Присваиваем значения текстовому объекту из поля DB City.Text = "[public_test.city]"; TextObject temp_lo = new TextObject(); temp_lo.CreateUniqueName(); temp_lo.Bounds = new System.Drawing.RectangleF(150,0,100,100); temp_lo.Parent = dataBand; temp_lo.Text = "[public_test.temp_lo]"; TextObject temp_hi = new TextObject(); temp_hi.CreateUniqueName(); temp_hi.Bounds = new System.Drawing.RectangleF(300,0,100,100); temp_hi.Parent = dataBand; temp_hi.Text = "[public_test.temp_hi]"; report.Prepare(); PDFExport pDF = new PDFExport(); pDF.Export(report,"test.pdf"); }
Компилируем и запускаем наш проект. Он создаст вот такой PDF файл отчета:
Вывод будет очень простым. Подключать базу данных к собственному приложению совершенно не сложно, как раз сегодня мы создали отчет с использованием данных из базы PostgreSQL в дистрибутиве Debian 10.