Виведення звіту ActiveReports у форматі PDF

Сторінка оновлюється :
Дата створення сторінки :

Робоче середовище

Вікна
  • Windows 10 Pro 22H2
Візуальна студія
  • Версія для спільноти Visual Studio 2022
ActiveReports для .NET
  • ActiveReports для .NET 16.0J

Передумови

Вікна
  • Windows 8.1
  • Вікна 10
  • Вікна 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
  • 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 потрібно створювати за допомогою «Розширення для малювання», як описано на сторінці вище.

Перш за все, я створю проект, але цього разу зроблю його за допомогою простого консольного додатку. Його так само легко застосувати до десктопної та веб-версії, як і до веб-версії.

Коли ви створюєте проект, виберіть Console App.

Після того, як ви створите проект, додайте необхідні пакети.

Ось що ви додасте: Будь ласка, не завантажуйте останню версію, а використовуйте версію, описану нижче. Схоже, що деякі комбінації пакунків не працюють належним чином з останньою версією. Буде показано позначку попередження, але проігноруйте її, оскільки залежності не збігаються. Однак існує ймовірність, що в майбутньому він зміниться з оновленням версії, тому, будь ласка, змінюйте його щоразу. 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 створюю папку і кладу її туди. Це місце розташування впливає на контур, який ви вкажете пізніше.

Далі відкрийте властивості доданого звіту.

Встановіть для дії збірки значення Embedded Resource. Це означає вбудовування ресурсу в EXE (DLL). Звіт завантажується як на робочому столі, так і в Інтернеті.

Далі напишіть код для завантаження звіту та роздрукуйте його у форматі PDF. Так як це консольний додаток, то він повинен бути описаний в Програмі.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 створюю папку і кладу її туди. Це місце розташування впливає на контур, який ви вкажете пізніше.

Далі відкрийте властивості доданого звіту.

Встановіть для дії збірки значення Embedded Resource. Це означає вбудовування ресурсу в EXE (DLL). Звіт завантажується як на робочому столі, так і в Інтернеті.

Далі напишіть код для завантаження звіту та роздрукуйте його у форматі PDF. Так як це консольний додаток, то він повинен бути описаний в Програмі.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-файл, щоб перевірити, чи все гаразд.