Экспорт отчёта в PDF
В этой статье рассмотрен процесс экспорта отчёта с помощью процессора отчётов FastReport Corporate Server.
Приступая к работе
Вам понадобятся следующие инструменты и возможности:
Знания по использованию API key в FastReport Corporate Server.
В этой статье будет пропущена дополнительная информация по аутентификации и авторизации.
Редактор C# кода или текстовый редактор, например Visual Studio Code.
Отчёт.
Как построить отчёт можно узнать в статье Построение отчёта.
Активная подписка для FastReport.Cloud.
Доступ в интернет.
Обратите внимание! Это руководство рассчитано, что вы уже знаете, как разработать своё приложение на языке программирования C#.
Обратите внимание! Пункты выше описывают рекомендуемые инструменты.
Замечание
Обратите внимание, что экспорт отчёта можно сделать напрямую из шаблона, без промежуточного сохранения отчёта. Для этого выполните те же команды для шаблона отчёта, заменив Report
в методах на Template
, также используете идентификатор шаблона, а не отчёта.
Инструкция
Вам будет необходим идентификатор отчёта для его экспорта в PDF, для его получения воспользуйтесь методом <xref:FastReport.Cloud.ITemplatesClient.GetFilesListAsync(System.String,System.Nullable{System.Int32},System.Nullable{System.Int32})>
public async Task<string> GetReportId(HttpClient httpClient) { IReportFoldersClient reportFoldersClient = new ReportFoldersClient(httpClient); IReportsClient reportsClient = new ReportsClient(httpClient); FileVM rootFolder = await reportFoldersClient.GetRootFolderAsync(null); IEnumerable<ReportVM> reports = await reportsClient.GetFilesListAsync(rootFolder.Id, 0, 10); ReportVM report = reports.First(); return report.Id; }
В этом примере функция запрашивает корневую директорию первой подписки пользователя, затем запрашивает 10 отчётов и возвращает первый.
Для экспорта отчёта понадобится директория, в которую следует сохранить экспорт.
Получите корневую директорию экспортов, для этого воспользуйтесь методом <xref:FastReport.Cloud.IExportFoldersClient.GetRootFolder(System.String)>.
public async Task<string> GetExportsRoot(HttpClient httpClient, string subscriptionId = null) { IExportFoldersClient exportFoldersClient = new ExportFoldersClient(httpClient); FileVM result = await exportFoldersClient.GetRootFolderAsync(subscriptionId); return result.Id; }
В этом примере функция запрашивает корневую директорию, идентификатор подписки можно не задавать, в этом случае будет возвращена корневая директория для первой подписки пользователя.
Для экспорта отчёта сделайте воспользуйтесь методом <xref:FastReport.Cloud.IReportsClient.ExportAsync(System.String,FastReport.Cloud.ExportReportTaskVM)>.
public async Task<string> ExportReport(HttpClient httpClient, string folderId, string reportId, string fileName) { IReportsClient reportsClient = new ReportsClient(httpClient); ExportReportTaskVM task = new ExportReportTaskVM() { FileName = Path.ChangeExtension(fileName, ".pdf"), FolderId = folderId, Format = ExportReportTaskVMFormat.Pdf }; ExportVM result = await reportsClient.ExportAsync(reportId, task); return result.Id; }
В этом примере функция создаёт задачу на экспорт отчёта.
Обратите внимание! Хотя отчёт ещё не экспортирован, но уже на этом этапе у экспорта присвоен идентификатор, через некоторое время очередь построителя дойдёт до этой задачи и отчёт будет экспортирован.
Для получения информации об файле воспользуйтесь методом <xref:FastReport.Cloud.IExportsClient.GetFileAsync(System.String)>.
public async Task<ExportVMStatus> CheckStatus(HttpClient httpClient, string exportId) { IExportsClient exportsClient = new ExportsClient(httpClient); ExportVM result = await exportsClient.GetFileAsync(exportId); return result.Status.GetValueOrDefault(); }
В этом примере функция запрашивает экспорт по его идентификатору и возвращает статус. Необходимо дождаться статуса <xref:FastReport.Cloud.ExportVMStatus.Success>, проверяйте статус каждые несколько секунд.
Для скачивания отчёта воспользуйтесь методом <xref:FastReport.Cloud.IDownloadClient.GetExportAsync(System.String)>.
public async Task<byte[]> DownloadExport(HttpClient httpClient, string exportId) { IDownloadClient downloadClient = new DownloadClient(httpClient); FileResponse file = await downloadClient.GetExportAsync(exportId); using (MemoryStream ms = new MemoryStream()) { file.Stream.CopyTo(ms); return ms.ToArray(); } }
В этом примере функция запрашивает файл и копирует его в память.