Вывод отчета ActiveReports в виде PDF-файла
Условия эксплуатации
- Виндоус
-
- Windows 10 Pro 22H2
- Визуальная студия
-
- Visual Studio 2022 Community Edition
- ActiveReports для .NET
-
- ActiveReports для .NET 16.0J
Необходимые условия
- Виндоус
-
- Windows 8.1
- Windows 10
- Windows 11
- Windows Server 2012
- Windows Server 2012 R2
- Windows Server 2016
- Windows Server 2019
- Windows Server 2022
- Визуальная студия
-
- Visual Studio 2017
- Visual Studio 2019
- Visual Studio 2022
- Платформа .NET Framework
-
- NET Framework 4.6.2
- NET Framework 4.7
- NET Framework 4.8
- .СЕТЬ
-
- .NET Core 3.1
- .NET 5
- .NET 6
- ActiveReports для .NET
-
- ActiveReports для .NET 16.0J
Вывод в PDF-файл
Если пользователь хочет получить отчет в виде PDF-файла, самый быстрый способ предоставить его — просмотреть отчет в средстве просмотра. Помимо отображения отчетов, средство просмотра имеет функцию печати и вывода файлов, таких как PDF, поэтому, если вы отображаете средство просмотра, вы можете попросить пользователя вывести файл PDF.
Однако в некоторых случаях вы можете не беспокоить пользователя или систематически направлять PDF-файл. В этом разделе описывается, как программно вывести PDF-файл непосредственно из отчета.
Методы и ограничения вывода PDF-файлов
Существует несколько способов программного вывода PDF-файлов, но не все из них приемлемы. Это зависит от версии ActiveReports, платформы, платформы и типа отчета, который он выполняет. Например, в ActiveReports 16 отчеты по разделам и страницам выводятся по-разному программно. Пример этого также можно найти на официальной странице.
По этой причине ниже приведено несколько примеров программного вывода PDF, которые вы можете использовать в качестве справочного материала, чтобы найти тот, который подходит для вашего проекта.
Об образце отчета
Файл отчета, включенный в шаблон для нового проекта, пуст, поэтому мы будем использовать официальный образец отчета. Вот несколько предложений, поэтому, пожалуйста, загрузите их с одного из следующих сайтов.
- ActiveReports-Estimate-sample
- GrapeCity ActiveReports (GitHub) ( в каждом примере проекта может быть файл отчета)
В данном случае мы будем использовать следующий пример отчета.
- Постраничный отчет : Estimate_page_ipa.rdlx
- Отчет по разделу: Invoice.rpx (включен в пример проекта WebSample16)
Рендеринг и создание PDF-файлов (отчеты по страницам/отчеты RDL)
Есть «фильтр экспорта» для вывода PDF-файлов, но в версии 16 его можно использовать только для отчетов по разделам.
Таким образом, страничные отчеты/отчеты RDL должны создаваться с помощью "Drawing Extension", как описано на странице выше.
Первым делом я создам проект, но в этот раз сделаю его с помощью простого консольного приложения. Его так же легко применить к десктопной и веб-версиям, как и к веб-версии.
При создании проекта выберите Консольное приложение.
После создания проекта добавьте необходимые пакеты.
Вот что вы добавите: Пожалуйста, не загружайте последнюю версию, а используйте версию, описанную ниже.
Похоже, что некоторые комбинации пакетов не работают должным образом с последней версией.
Отображается предупреждающая метка, но игнорируйте ее, так как зависимости не совпадают.
Тем не менее, есть вероятность, что он будет меняться с обновлением версии в будущем, поэтому, пожалуйста, корректируйте его каждый раз.
GrapeCity.Documents.Imaging
GrapeCity.Documents.Pdf
и необходимы для рендеринга в PDF.
- GrapeCity.ActiveReports.Export.Pdf (16.4.0)
- GrapeCity.Documents.Imaging (6.0.3)
- GrapeCity.Documents.Pdf (6.0.3)
Добавьте файл отчета в проект. Местоположение может быть где угодно, но на этот раз я создаю папку и помещаю Reports
ее туда.
Это место размещения влияет на путь, который вы укажете позже.
Далее откройте свойства добавленного отчета.
Задайте для действия сборки значение Внедренный ресурс. Это означает встраивание ресурса в EXE (DLL). Отчет загружается на настольный компьютер так же, как и в Интернете.
Далее напишите код для загрузки отчета и распечатайте его в формате PDF. Так как это консольное приложение, оно должно быть описано в Program.cs как есть, но если это рабочий стол, то оно должно быть описано в событии кнопки и т.д., а если это ASP.NET, то оно должно быть описано в том месте, где оно обрабатывается при публикации.
// レポートファイルがあるパス
var reportPath = "ConsoleApp1.Reports.Estimate_page_ipa.rdlx";
// 埋め込みリソースを Stream をして取り出す
var stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(reportPath);
if (stream == null) return;
// ページレポートに変換します
using var sr = new StreamReader(stream);
var pageReport = new GrapeCity.ActiveReports.PageReport(sr);
// PDF 描画拡張を定義します
var pdfRenderingExtension = new GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension();
// メモリストリームとして出力する定義です
var outputProvider = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();
// レポートを PDF にレンダリングします
pageReport.Document.Render(pdfRenderingExtension, outputProvider);
// Stream に変換します
var ps = outputProvider.GetPrimaryStream();
var outputStream = ps.OpenStream();
Я не буду подробно объяснять, что это за обработка, потому что она написана в комментариях к коду.
Ключевым моментом является указание местоположения файла отчета в первой строке.
Формат следующий <アセンブリ名>.<レポートファイルのパス>
, и все разделители путей являются точками.
Последний - Stream, поэтому, пожалуйста, конвертируйте его в PDF в соответствии с обрабатываемым контентом.
Например, если вы хотите сохранить его как локальный файл, добавьте следующее.
// ファイルにストリームを書き出します
using var fs = new FileStream("Output.pdf", FileMode.Create);
outputStream.CopyTo(fs);
Если вы хотите загрузить его вместе с ASP.NET, добавьте следующее.
return File(outputStream, "application/pdf", "Output.pdf");
Попробуйте открыть выходной PDF-файл, чтобы проверить, все ли в порядке.
Вывод PDF с помощью фильтров экспорта (отчеты по разделам)
Используйте фильтр экспорта PDF, доступный для отчетов по разделам.
Он создается в консольном проекте так же, как и для постраничных отчетов. Код и настройки, которые вы создадите здесь, могут быть применены к другим проектам.
После создания проекта добавьте необходимые пакеты. На этот раз мы будем выводить с фильтром экспорта, поэтому добавим только один.
- GrapeCity.ActiveReports.Export.Pdf (16.4.0)
Добавьте файл отчета в проект. Местоположение может быть где угодно, но на этот раз я создаю папку и помещаю Reports
ее туда.
Это место размещения влияет на путь, который вы укажете позже.
Далее откройте свойства добавленного отчета.
Задайте для действия сборки значение Внедренный ресурс. Это означает встраивание ресурса в EXE (DLL). Отчет загружается на настольный компьютер так же, как и в Интернете.
Далее напишите код для загрузки отчета и распечатайте его в формате PDF. Так как это консольное приложение, оно должно быть описано в Program.cs как есть, но если это рабочий стол, то оно должно быть описано в событии кнопки и т.д., а если это ASP.NET, то оно должно быть описано в том месте, где оно обрабатывается при публикации.
// レポートファイルがあるパス
var reportPath = "ConsoleApp1.Reports.Invoice.rpx";
// 埋め込みリソースを Stream をして取り出す
var stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(reportPath);
if (stream == null) return;
// Stream を XML として読み込めるようにします
var xr = System.Xml.XmlReader.Create(stream);
// セクションレポートとして読み込みます
var sectionReport = new GrapeCity.ActiveReports.SectionReport();
sectionReport.LoadLayout(xr);
sectionReport.Run();
// PDF のエクスポートフィルターを作成します
var pdfExport = new GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport();
// メモリストリームに PDF の情報を書き出します
var outputStream = new System.IO.MemoryStream();
pdfExport.Export(sectionReport.Document, outputStream);
outputStream.Seek(0, SeekOrigin.Begin);
Я не буду подробно объяснять, что это за обработка, потому что она написана в комментариях к коду.
Ключевым моментом является указание местоположения файла отчета в первой строке.
Формат следующий <アセンブリ名>.<レポートファイルのパス>
, и все разделители путей являются точками.
Последний - Stream, поэтому, пожалуйста, конвертируйте его в PDF в соответствии с обрабатываемым контентом.
Например, если вы хотите сохранить его как локальный файл, добавьте следующее.
// ファイルにストリームを書き出します
using var fs = new FileStream("Output.pdf", FileMode.Create);
outputStream.CopyTo(fs);
Если вы хотите загрузить его вместе с ASP.NET, добавьте следующее.
return File(outputStream, "application/pdf", "Output.pdf");
Попробуйте открыть выходной PDF-файл, чтобы проверить, все ли в порядке.