將 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 檔,看看是否可以。