Оглавление:
Проблема ухода 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)

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

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

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

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

xtraroman
03.11.2025 16:21Из российских коммерческих ещё есть Эремекс https://eremexcontrols.net/controls/datagrid/export/
У нас есть экспорт в pdf и xlsx. Выпустили буквально пару месяцев назад. Дизайнера пока нет. Подойдёт для простых отчётов на основе грида и трилиста. Так же, мы планируем сделать api для манипуляций с файлами документов как у aspose.

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. Окно настройки источников данных и параметров отчета
Geminix
На чем в итоге остановились? Какие библиотеки умеют работать с шаблонами как ClosedXml и с большим объёмом данных > 1000 строчек?