Как сохранить отчет в формате html в zip архив

13.04.2016

При разработке очередного PHP приложения возникла необходимость в отчетности. Имел большой опыт работы с генератором отчетов FastReport .Net, поэтому задался целью использовать его. К сожалению, вариант с веб-отчетами отпадает, так как ASP .Net в этом проекте у нас не используется. Родилась идея использовать REST вебсервис, который будет строить отчет и отдавать php приложению. О разработке сервиса я расскажу позже, а сейчас пока остановимся непосредственно на процессе построения отчета и подготовке его к отправке через REST. Для простоты я покажу это на примере консольного приложения.

Для работы понадобятся библиотеки FastReport:

1
2
3
using FastReport;
using FastReport.Export.Html;
using FastReport.Utils;

Название отчета буду передавать параметром:

        

1
2
3
4
5
6
7
static void Main(string[] args)
 {
 if (args.Length > 0)
 DoExport(args[0]);
 else
 Console.WriteLine("Set the report file (*.frx) as parameter");
 }

Создаем метод экспорта в HTML и архивации в ZIP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private static void DoExport(string reportFile)
 {
 if (File.Exists(reportFile))
 {
 Config.WebMode = true; // включаем режим WebMode чтобы включить thread-safe code
 using (Report report = new Report()) // создаем экземпляр объекта отчета
 {
 report.Load(reportFile); // загружаем отчет из файла
 report.Prepare(); // подготавливаем отчет
 using (HTMLExport html = new HTMLExport()) // создаем экземпляр объекта экспорта в HTML
 {
 html.SaveStreams = true; // включаем режим сохранения в поток
 report.Export(html, (Stream)null); // устанавливаем целевой поток в null - у нас есть несколько потоков внутри объекта экспорта 
 if (html.GeneratedFiles.Count > 0)
 {
 ZipArchive zip = new ZipArchive(); // создаем экземпляр объекта zip-архива
 for(int i = 0; i < html.GeneratedFiles.Count; i++)
 zip.AddStream(html.GeneratedFiles[i], html.GeneratedStreams[i]); // добавляем потоки с именами файлов в архив 
 zip.SaveToFile(Path.GetFileNameWithoutExtension(reportFile) + ".zip"); // записываем zip в файл
 }
 } 
 }
 }
 else
 Console.WriteLine("File " + reportFile + " not found!");
 }

Тут нужно отметить  свойство Config.WebMode – оно включает «тихий» режим генерации отчетов без выдачи любых диалогов и прогресс баров.

В этом примере я упаковываю один отчет, но ничто не мешает положить в архив несколько.

Теперь, запускаем приложение в консоли с параметром. В параметре указываем путь к отчету. И получаем в  папке с приложением zip-архив, в котором упакован отчет в формате html. Таким образом, используя веб сервис, можно передать в мое php (или другое) веб приложение архив с одним или несколькими отчетами, готовыми к отображению.

 

.NET .NET FastReport FastReport HTML HTML
25 марта 2025

Как объединить несколько отчетов в один из FastReport .NET

FastReport .NET — это мощный инструмент для создания и управления отчётами. В данной статье мы рассмотрим, как объединить несколько отчётов в один в FastReport .NET.
11 марта 2025

Как использовать FastReport .NET Avalonia на Fedora Workstation с протоколом Wayland

В данной статье мы разберем, как запустить FastReport .NET Avalonia на операционной системе «Fedora Workstation 39» с протоколом Wayland.
7 марта 2025

Как создать QR-код с картинкой в FastReport .NET

В статье разобрались как вставлять картинку в QR Code из дизайнера отчётов FastReport .NET всего за пару кликов.

Появились вопросы?

Задайте нам интересующие вас вопросы в чате ниже.

Продолжая использовать сайт, Вы даете согласие ООО "Быстрые отчеты" на обработку файлов cookies и пользовательских данных, собираемых посредством агрегаторов статистики посетителей веб-сайтов, в целях ведения статистики посещений сайта, таргетирования товаров в соответствии с интересами посетителя сайта. Если Вы не хотите, чтобы Ваши вышеперечисленные данные обрабатывались, просим отключить обработку файлов cookies и сбор пользовательских данных в настройках Вашего браузера или покинуть сайт. Политика обработки персональных данных.