Оглавление:

Проблема ухода DX и потери инструмента для создания отчетов

Всем привет! Меня зовут Леонид, я разработчик компании DD Planet.

Как мы все прекрасно понимаем, ни один бизнес-проект немыслим без разного рода отчетов. Быстрота и удобство их создания зачастую критично важны.

В нашей компании мы долгое время использовали инструмент DevExpress Reports. Однако после ухода DX с отечественного рынка остро встал вопрос о пересмотре архитектуры формирования отчетов - особенно тех, что создавались с помощью визуального дизайнера форм.

Раньше, при использовании компонентов DevExpress, такие отчеты можно было создать в несколько кликов и практически без знания кода - за счет мощного и удобного дизайнера:

Как же быть теперь? Перед тем как делать обзор альтернатив, сразу признаем, что визуальный дизайнер заменить будет сложно - это все равно что строить коттедж с нуля. Ни один здравомыслящий бизнес в это вкладываться не будет, если вам нужен результат здесь и сейчас. Поэтому данную опцию заместить, скорее всего, будет проблематично. Но паниковать не нужно - есть варианты, которые и в отсутствие дизайнера позволяют удобно и быстро создавать отчеты. Давайте их разберем, чтобы понять, как жить дальше. 

Прежде всего отметим, что наиболее востребованных типов отчетов существует два: Excel и PDF. Далее рассмотрим существующие решения по каждому из них.

Краткий обзор лицензионных альтернатив для создания отчетов

Сначала кратко перечислим возможные платные альтернативы для создания отчетов:

  • FastReports — мощный инструмент для генерации отчетов, поддерживает разные платформы (Web, WinForms, WPF и др.) — Официальный сайт

  • StimulSoft — генератор отчетов под ASP.NET,.NET Core, JS, Angular, Blazor, PhP и др. — Официальный сайт

  • Telerik UI for.NET (Community Edition) — содержит некоторые компоненты для экспорта, в том числе PDF. Официальный сайт

  • Microsoft RDLC Report Designer — дизайнер отчетов от Microsoft, является бесплатным, но для полноценного использования все равно потребуется лицензионная версия VisualStudio — Microsoft marketplace

Тем не менее очевидно, что в современных реалиях, когда в любой момент могут возникнуть сложности с оплатой любого сервиса, предпочтительными являются опенсорсные решения. На них остановимся более подробно ниже.

Альтернативы для создания отчетов Excel

Существует несколько бесплатных библиотек, которые позволяют работать с Excel в .NET - импортировать и экспортировать данные, менять их и т.п.:

  • NPOI - отличная альтернатива для работы с XLSX/XLS без установки Office. Плюсы:

    • Хорошо справляется с объемами данных в сотни тысяч строк;

    • Имеет понятный API, с помощью которого можно, например, получить информацию об иерархичности документа, стилях ячеек и т. д;

    • Поддержка старых версий Excel.

Недостаток - инструментарий по кастомизации документа ограничен  - например, NPOI не умеет перетаскивать диапазоны ячеек, что может быть актуально в тех или иных задачах (если есть какой-то шаблонный файл и необходимо его видоизменить в соответствии с настройками пользователя).

Однако с созданием простых задач библиотека справляется хорошо. Я использовал ее на одном из проектов для экспорта данных и создания типовых отчетов.  GitHub репозиторий

  • DocumentFormat.OpenXml - низкоуровневая, но мощная библиотека от Microsoft. По характеристикам близка к NPOI, хорошо работает с сопоставимыми объемами данных, но могут быть проблемы при импорте из файлов старых версий Excel - GitHub репозиторий

  • ClosedXml - простая и удобная обертка над OpenXml SDK - GitHub репозиторий. Эту библиотеку мы использовали на одном из проектов, где нужно было обработать файлы разной структуры.

  • LibreOffice - мощный офисный пакет, полностью совместимый с 32/64-битными системами. Переведен более чем на 30 языков мира. Основной плюс - кроссплатформенность: поддерживает большинство популярных операционных систем, включая GNU/Linux, Microsoft Windows и Mac OS X.

Все эти примеры - то, чем можно пользоваться бесплатно. Есть и более мощные инструменты, например, Aspose, который позволяет создавать отчеты практически любой сложности, но он требует коммерческую лицензию, а в настоящее время на территории РФ нет возможности оплачивать иностранное ПО.

Сравнительные характеристики, основные плюсы и минусы этих библиотек для наглядности приведем в виде таблицы, с нашей субъективной оценкой каждого показателя по шкале от 0 до 5 и с признаком OpenSource (да/нет):

Название библиотеки

Работа с большими объемами данных

Простое и понятное API

Поддержка старых версий Excel

Возможности по кастомизации шаблона документа

OpenSource

NPOI

5

5

5

3

да

OpenXml

5

5

3

3

да

ClosedXml

5

5

3

3

да

LibreOffice

5

4

5

3

да

Aspose

5

5

5

5

нет

Альтернативы для создания отчетов PDF

Здесь также есть выбор бесплатных библиотек, которые закрывают основные потребности в создании отчетов:

  • iText7 - мощная библиотека с широкими возможностями, однако требует внимания к лицензированию (есть AGPL). GitHub репозиторий

  • QuestPDF - современная и простая в использовании библиотека с открытым исходным кодом. GitHub репозиторий

  • DinkToPdf - обертка над wkhtmltopdf, позволяет генерировать PDF из HTML. GitHub репозиторий

  • PuppeteerSharp - бесплатная библиотека, предоставляющая API для контроля браузера. Может быть использована для преобразования HTML-текста в PDF.  GitHub репозиторий

Пример создания PDF-отчета

Остановимся подробнее на PuppeteerSharp и рассмотрим, как на практике можно создать PDF-отчет с его помощью. Задача по сути разбивается на 2 этапа - сначала нам необходимо сгенерировать HTML-документ, а затем конвертировать его в PDF-файл.

Для решения первой задачи хорошо подходит технология SSR (Server-Side Rendering). Она позволяет генерировать HTML-код страницы на сервере при запросе пользователя. Реализация SSR с React и Node.js включает создание серверного кода на Express, который использует ReactDOMServer.renderToString() для преобразования React-компонента в HTML-строку, а затем вставляет ее в шаблон страницы:

// server.js
const express = require('express');
const ReactDOMServer = require('react-dom/server');
const App = require('./src/App'); // Ваш React-компонент

const app = express();

app.get('/', (req, res) => {
  const appString = ReactDOMServer.renderToString(<App />); // Рендер в строку

  res.send(`
    <!DOCTYPE html>
    <html>
    <head>
      <title>Мое SSR приложение</title>
    </head>
    <body>
      <div id="root">${appString}</div>
    </body>
    </html>
  `);
});

app.listen(3000, () => console.log('Сервер запущен на порту 3000'));

Далее необходимо конвертировать ее в PDF-формат, т.е. создать сам отчет. Здесь нам поможет PuppeteerSharp. Вот простейший пример преобразования html to pdf:

using System;
using System.Threading.Tasks;
using PuppeteerSharp;

public class HtmlToPdfConverter
{
   public async Task ConvertHtmlToPdf(string htmlContent, string outputPdfPath)
   {
       // Скачивает браузер Chromium, если он еще не скачан
        await new BrowserFetcher().DownloadAsync();

       using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions
       {
         Headless = true // Запуск в "безголовом" режиме (без видимого окна браузера)
        }))
        {
            using (var page = await browser.NewPageAsync())
           {
               // Устанавливает HTML-контент на страницу
               await page.SetContentAsync(htmlContent);

                // Генерирует PDF из текущей страницы
              await page.PdfAsync(outputPdfPath, new PdfOptions
              {
                    Format = PaperFormat.A4, // Формат бумаги A4
                 PrintBackground = true // Печатать фоновые цвета и изображения
               });
           }
        }

        Console.WriteLine($"PDF файл успешно создан: {outputPdfPath}");
    }

    public static async Task Main(string[] args)
    {
        var converter = new HtmlToPdfConverter();
       string htmlToConvert = "<h1>Привет, мир!</h1><p>Это пример конвертации HTML в PDF с помощью PuppeteerSharp.</p>";
      string outputFilePath = "output.pdf";

     await converter.ConvertHtmlToPdf(htmlToConvert, outputFilePath);
   }
}

Заключение

Как видно из обзора, есть достаточное количество инструментов, которые позволяют воспроизвести основные функции DevExpress по экспорту отчетов, сохраняя при этом полный контроль над процессом. Единственная безальтернативная по сути вещь - визуальный дизайнер. Но его потеря это не повод рвать на себе волосы, как уже было сказано в начале - мы адаптировались к новым реалиям через новые процессы, подходы и решения. Отчеты по-прежнему создаются качественно, масштабируемо и с контролем версий, пусть и с иной степенью вовлечения разработчиков. Во многом теперь требуется более глубокое погружение в код, чуть больше трудозатрат - опять-таки ввиду отсутствия дизайнера. С другой стороны, потребность в квалифицированных разработчиках была и раньше: при работе с дизайнером тоже порой приходилось долго разбираться, как устроен компонент и какие опции он предоставляет. Сейчас потребность в разработчике остается актуальной, так что в этом плане мало что поменялось.

Комментарии (11)


  1. Geminix
    03.11.2025 16:21

    На чем в итоге остановились? Какие библиотеки умеют работать с шаблонами как ClosedXml и с большим объёмом данных > 1000 строчек?


  1. artptr86
    03.11.2025 16:21

    А почему не рассмотрели JasperReports? У него даже мощный визуальный редактор есть.


  1. FMA
    03.11.2025 16:21

    А какая проблема с FastReport ? Они Российские и проблем с оплатой нет. Да, поменяли систему лицензирования, конечно. Но все же, почему не они?


    1. posledam
      03.11.2025 16:21

      Тот же вопрос. При чём FR на мой взгляд изначально проще и гибче, чем DE.


      1. Taritsyn
        03.11.2025 16:21

        Просто «Планета CMS» сотрудничала с DevExpress с момента своего основания.


  1. Count_s
    03.11.2025 16:21

    Про фатальный недостаток забыли)


  1. Toshax
    03.11.2025 16:21

    Думал увидеть выбор смены отчетной системы. Мы в текущий момент используем CrystalReport (уходим), MSSQL Report Server (в основном матрицы, есть свои грабли), DevExpress (основные отчеты), ClosedXML (много данных с группировками и подсчетом итогов + формулы). Сейчас в поиске оптимального решения.


  1. kemsky
    03.11.2025 16:21

    У DevExpress весьма сомнительные решения были (вроде загрузки всех данных в память), не знаю как сейчас. Telerik Reports тоже не лишены недостатков, очень мутный редактор, тормоза на линуксе (может исправили), как мне кажется не стоит своих денег. У NPOI адекватные авторы и вы всегда можете им заслать PR, это немного отстающий клон джавовой POI. Еще одна либа для Excel - EPPlus, платная, обновлять надо аккуратно - часто ломают. Если pdf простой, то и старого itext хватит, QuestPDF тоже ничего. В приципе никто не мешает использовать разор для генерации html и конвертить потом в pdf как тут описано, это может быть удобнее при работе с большим количеством данных.


  1. uhfath
    03.11.2025 16:21

    Есть ещё вот такая штука, не рассматривали? Правда придётся поднимать отдельный сервис и ходить в него, но зато будет возможность его масштабировать, если придётся генерировать кучу PDFок одновременно.


  1. xtraroman
    03.11.2025 16:21

    Из российских коммерческих ещё есть Эремекс https://eremexcontrols.net/controls/datagrid/export/

    У нас есть экспорт в pdf и xlsx. Выпустили буквально пару месяцев назад. Дизайнера пока нет. Подойдёт для простых отчётов на основе грида и трилиста. Так же, мы планируем сделать api для манипуляций с файлами документов как у aspose.


  1. shmelev-1987
    03.11.2025 16:21

    Вместо "Microsoft RDLC Report Designer", встроенный в VisualStudio, я использую ReportBuilder (бесплатный дизайнер отчетов). Сделал свое приложение ImportExportDataSql, которое парсит RDL (они же XML) файлы и генерит отчеты в форматах PDF, XLS, XLSX, DOC, DOCX или TIFF. В одном отчете можно совмещать данные из разных источников, сейчас поддерживается Microsoft SQL Server, MySQL и ClickHouse.

    Скриншот из приложения ImportExportDataSql. Окно настройки источников данных и параметров отчета
    Скриншот из приложения ImportExportDataSql. Окно настройки источников данных и параметров отчета