Вывод отчета 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, которые вы можете использовать в качестве справочного материала, чтобы найти тот, который подходит для вашего проекта.

Об образце отчета

Файл отчета, включенный в шаблон для нового проекта, пуст, поэтому мы будем использовать официальный образец отчета. Вот несколько предложений, поэтому, пожалуйста, загрузите их с одного из следующих сайтов.

В данном случае мы будем использовать следующий пример отчета.

  • Постраничный отчет : 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-файл, чтобы проверить, все ли в порядке.