将 ActiveReports 报表输出为 PDF 文件
操作环境
- 窗户
-
- 视窗 10 专业版 22H2
- Visual Studio的
-
- Visual Studio 2022 社区版
- 适用于 .NET 的 ActiveReports
-
- 适用于 .NET 16.0J 的 ActiveReports
先决条件
- 窗户
-
- Windows 8.1
- 视窗 10
- 窗户11
- Windows 服务器 2012
- Windows 服务器 2012 R2
- Windows 服务器 2016
- Windows 服务器 2019
- 视窗服务器 2022
- Visual Studio的
-
- Visual Studio 2017的
- Visual Studio 2019 中
- Visual Studio 2022 中
- .NET 框架
-
- NET 框架 4.6.2
- NET 框架 4.7
- NET 框架 4.8
- 。网
-
- .NET Core 3.1
- .NET 5
- .NET 6
- 适用于 .NET 的 ActiveReports
-
- 适用于 .NET 16.0J 的 ActiveReports
如何输出到 PDF 文件
如果用户希望将报表作为 PDF 文件,则提供该报表的最快方法是在查看器中查看报表。 除了显示报表外,查看器还具有打印和输出PDF等文件的功能,因此,如果显示查看器,则可以要求用户输出PDF文件。
但是,在某些情况下,您可能不想打扰用户,或者您可能希望系统地定向 PDF 文件。 本节介绍如何以编程方式直接从报表输出 PDF 文件。
PDF 文件输出方法和限制
有几种方法可以以编程方式输出 PDF 文件,但并非所有方法都可以接受。 这取决于 ActiveReports 的版本、平台、框架和它执行的报告类型。 例如,在 ActiveReports 16 中,节报表和页报表的输出方式不同。 这方面的一个例子也可以在官方页面上找到。
出于这个原因,这里有一些编程 PDF 输出的示例,您可以将其用作参考,以找到适合您的项目的输出。
关于示例报告
新项目模板中包含的报告文件为空,因此我们将使用官方的示例报告。 以下是一些建议,因此请从以下网站之一下载。
- ActiveReports-估计-示例
- GrapeCity ActiveReports (GitHub) ( 每个示例项目中可能都有一个报告文件)
在本例中,我们将使用以下示例报告。
- 页面报告 : Estimate_page_ipa.rdlx
- 部分报告:Invoice.rpx(包含在 WebSample16 示例项目中)
呈现和生成 PDF(页面报表/RDL 报表)
有一个用于输出 PDF 的“导出过滤器”,但在版本 16 中,它只能用于章节报告。
因此,页面报告/RDL 报告需要使用“绘图扩展”生成,如上页所述。
首先,我将创建一个项目,但这次我将使用一个简单的控制台应用程序来制作它。 它适用于桌面和 Web 版本就像应用于 Web 版本一样容易。
创建项目时,请选择“控制台应用”。
创建项目后,添加所需的包。
以下是您将添加的内容: 请不要获取最新版本,而是使用下面描述的版本。
似乎某些软件包组合在最新版本中无法正常工作。
将显示一个警告标记,但请忽略它,因为依赖项不匹配。
但是,将来可能会随着版本升级而改变,因此请每次进行调整。
GrapeCity.Documents.Imaging
GrapeCity.Documents.Pdf
并且需要渲染为 PDF。
- GrapeCity.ActiveReports.Export.pdf (16.4.0)
- GrapeCity.Documents.Imaging (6.0.3)
- 葡萄城.Documents.pdf (6.0.3)
将报告文件添加到项目中。 位置可以在任何地方,但这次我要 Reports
创建一个文件夹并将其放入其中。
此放置位置会影响您稍后指定的路径。
接下来,打开已添加报表的属性。
将生成操作设置为“嵌入资源”。 这意味着将资源嵌入到 EXE (DLL) 中。 报表在桌面上是唯一加载的,就像在 Web 上一样。
接下来,编写代码以加载报表并将其打印为 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) 中。 报表在桌面上是唯一加载的,就像在 Web 上一样。
接下来,编写代码以加载报表并将其打印为 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 文件,看看是否可以。