Экспорт отчета в FastReport.OpenSource

10.01.2019

FastReport.OpenSource вызвал не малый интерес у многих разработчиков. Это отличный генератор отчетов с длинной историей. Версия с открытым исходным кодом представляет собой FastReport.Core, появившийся в начале 2018го года, но с некоторыми ограничениями. А именно – урезанный экспорт. Таким образом нам доступны лишь следующие форматы:

HTML, BMP, PNG, JPEG, GIF, TIFF, EMF.

Это, конечно, очень мало. Объект WebReport отображает отчет в html формате, поэтому его и оставили.

Примечательно, что в объекте WebReport, нам доступно сохранение отчета только в формат предварительного просмотра fpx.

 

Поэтому экспортировать отчет придется из кода приложения. Давайте рассмотрим, как это будет выглядеть на примере.

Я опишу подробно весь процесс создания демонстрационного приложения, чтобы вы могли повторить при желании.

Создаем проект ASP .Net Core 2.0. Далее добавляем пакеты из NuGet хранилища: FastReport.OpenSource и FastReport.OpenSource.Web.

Теперь нужно добавить использование библиотек FastReport в файл Startup.cs

Воспользуемся представлением Index. Изменим его так:

1
2
3
4
5
6
7
8
@using (Html.BeginForm("Save", "Home", FormMethod.Get))
{
 <input id="save" type="submit" value="Save report in HTML" />
}
 
<div>
 <img src ='@Url.Action("GetImage")'>
</div>

Мы выведем отчет в формате рисунка, а также ссылку на скачивание отчета в HTML формате.

Вначале у нас отобразится кнопка на скачивание, которая инициирует формирование html файла отчета. Затем идет изображение. Но файл для него будет сформирован «на лету» из метода GetImage в контроллере.

Перейдем к контроллеру HomeController.cs. Нам понадобятся библиотеки:

1
2
3
4
5
6
7
8
9
using System.IO;
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using OpenSourceReportExport.Models;
using FastReport;
using FastReport.Export.Image;
using FastReport.Export.Html;
using System.Data;
using Microsoft.AspNetCore.Hosting;

Чтобы задавать корректные пути к файлам на сервере воспользуемся интерфейсом IHostingEnvironment. Для этого передаем в конструктор контроллера объект типа IHostingEnvironment.

1
2
3
4
5
6
 public HomeController(IHostingEnvironment hostingEnvironment)
 {
 _hostingEnvironment = hostingEnvironment;
 }
 
 private IHostingEnvironment _hostingEnvironment;

Метод Index оставляем без изменений:

1
2
3
4
public IActionResult Index()
 {
 return View();
 }

 Добавим новый метод для получения отчета в виде изображения. Т.е. экспорт в изображение, например, формат jpeg:

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
27
28
29
public IActionResult GetImage()
 {
 // Creatint the Report object
 using (Report report = new Report())
 {
 string path = _hostingEnvironment.WebRootPath;
 // Loading a report
 report.Load(path + "\\App_Data\\Master-Detail.frx");
 DataSet data = new DataSet();
 data.ReadXml(path + "\\App_Data\\nwind.xml"); //Open xml database
 report.RegisterData(data, "NorthWind"); //Register data source in the report
 report.Prepare();// Preparing a report
 
 // Creating the Image export
 using (ImageExport image = new ImageExport())
 { 
 image.ImageFormat = ImageExportFormat.Jpeg;
 image.JpegQuality = 100; // Set up the quality
 image.Resolution = 100; // Set up a resolution 
 image.SeparateFiles = false; // We need all pages in one big single file
 
using (MemoryStream st = new MemoryStream())// Using stream to save export
 {
 report.Export(image, st);
 return base.File(st.ToArray(), "image/jpeg");
 }
 }
 }
 }

Второй метод – сохранение экспорта отчета в формат html. По сути то же самое, что и в предыдущем.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 [HttpGet]
 public ActionResult Save()
 {
 using (Report report = new Report())
 {
 string path = _hostingEnvironment.WebRootPath;
 // Loading a report
 report.Load(path + "\\App_Data\\Master-Detail.frx");
 DataSet data = new DataSet();
 data.ReadXml(path + "\\App_Data\\nwind.xml"); //Open xml database
 report.RegisterData(data, "NorthWind"); //Register data source in the report
 report.Prepare();// Preparing a report
 
 // Creating the HTML export
 using (HTMLExport html = new HTMLExport())
 {
 using (FileStream st = new FileStream(path + "\\App_Data\\test.html", FileMode.Create))
 {
 report.Export(html, st);
 return File("App_Data/test.html", "application/octet-stream", "Test.html");
 }
 }
 }
 }

В этом методе мы получили один файл html. И это значит, что в нем не будет картинок. Чтобы сохранить html файл с картинками, нужно сохранять файлы в цикле. Пример такого экспорта можно посмотреть в документации FastReport Open Source: https://fastreports.github.io/FastReport.Documentation/Exporting.html.

Давайте запустим наше приложение:

Изображение содержит все страницы отчета, потому что мы задали свойство SeparateFiles = false. В противном случае – пришлось бы отображать несколько файлов.

Нажимаем кнопку Save report in HTML:

 

И файл автоматически загружается браузером.

На этом все. Как видите, реализация экспорта в коде в FastReport Open Source ничем не отличается от FastReport.Core.

FastReport Open Source Экспорты
10 июля 2026

Как настроить Content Security Policy для отчетов FastReport .NET WEB

Узнайте, как настроить Content Security Policy для отчётов FastReport .NET WEB: обзор директив и значений CSP, изменения в архитектуре FastReport, типичные сценарии обхода и способы защиты.
22 июня 2026

Как настроить отчет с Business Objects из кода и дизайнера в FastReport .NET

В этой статье рассматривается реальный пример создания и использования шаблона отчета .frx для подключения к иерархическим бизнес-объектам в FastReport .NET.
21 апреля 2026

Использование водяных знаков в FastReport VCL

В статье подробно рассмотрели функционал добавления водяных знаков в FastReport VCL — как через визуальный интерфейс, так и программно, с помощью кода на Delphi и в скриптах отчётов.

Не является публичной офертой
© 1998-2026 ООО «Быстрые отчеты»