Как сохранить отчет в формате 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 (или другое) веб приложение архив с одним или несколькими отчетами, готовыми к отображению.

 

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.