如何用 C# 從 SAP Crystal Reports 轉移到 IronPDF
從SAP Crystal Reports遷移到 IronPDF:完整的 C# 遷移指南。
從SAP Crystal Reports轉移到IronPDF可將您的報表工作流程從具有複雜部署需求的重量級傳統平台轉換為現代化、輕量級的NuGet套件。 本指南提供完整的逐步遷移路徑,可省去 500MB 以上的龐大執行時安裝,消除 SAP 生態系統的鎖定,並實現完整的 .NET Core/5/6/7/8+ 支援。
為什麼要從SAP Crystal Reports遷移到 IronPDF?
瞭解 SAP Crystal Reports
SAP Crystal Reports 在企業領域中脫穎而出,是一種可產生動態且"像素完美"報表的工具。SAP Crystal Reports以其連結多種資料來源的能力而聞名,一直是許多企業尋求全面報表功能的最佳解決方案。 該平台透過 Crystal Reports Designer 提供無與倫比的功能,此工具可簡化複雜報表佈局的建構。
然而,隨著技術的發展,SAP Crystal Reports 對 SAP 架構的高度依賴,以及其嚴苛的安裝和部署要求也不能不引起注意。 重量級的性質意味著企業通常需要大量的資源和時間才能完全實施和維護系統。
遷移的主要原因
1.大量安裝:Crystal Reports Runtime 超過 500MB,需要複雜的安裝。 2.SAP生態系統鎖定:與SAP的定價、支援週期和產品路線圖相關聯。 3.複雜的授權:使用 SAP 企業銷售流程的每處理器/每使用者授權 4.傳統架構:使現代 64 位元部署變得複雜的 32 位元 COM 相依性 5.Deprecated Support for .NET Core:對現代 .NET 平台的有限支援 6.依賴報表設計師:需要 Visual Studio 擴充套件或獨立設計器 7.效能低:運行時初始化和記憶體佔用量大
SAP Crystal Reports的隱藏成本
| 成本因素 | SAP Crystal Reports | IronPDF |
|---|---|---|
| 運行時間大小 | 500MB+ | 約20MB |
| 安裝 | 複雜的 MSI/安裝 | NuGet 套件 |
| 部署 | 特殊安裝程式 | xcopy |
| 64 位元支援 | 問題 | 原生語言 |
| .NET Core/5/6/7/8 | 限額 | 全面支援 |
| 雲端部署 | 難度 | 簡單的 |
| Linux/Docker | 無 | 是 |
SAP Crystal Reports與IronPDF比較。
| 特點 | SAP Crystal Reports | IronPDF |
|---|---|---|
| 主要功能 | 企業報告平台 | HTML 到 PDF 的轉換引擎和 PDF 操作 |
| 整合。 | SAP 生態系統內最佳 | 現代 .NET 整合,輕量級NuGet套件 |
| 易用性 | 複雜的設定與部署 | 簡化整合,支援 .NET 開發人員 |
| 報表設計師 | 要求 | 可選 (HTML/CSS) |
| 範本格式 | .rpt (二進位) | HTML/CSS |
| HTML至PDF | 無 | 完整的 Chromium |
| URL轉PDF | 無 | 是 |
| CSS 支援 | 無 | 完整的 CSS3 |
| JavaScript。 | 無 | 完整的 ES2024 |
| PDF 操作 | 無 | 完整(合併、分割、編輯) |
| 數位簽名 | 無 | 是 |
| PDF/A合規性 | 無 | 是 |
| 現代相關性 | 日漸式微,被現代替代品取代 | 現代化,與當代技術完美結合 |
對於計劃在 2025 年和 2026 年之前採用 .NET 10 和 C# 14 的團隊而言,IronPDF 可提供SAP Crystal Reports無法提供的原生跨平台支援。
開始之前
先決條件
1..NET 環境:.NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ 2.NuGet存取:安裝NuGet套件的能力 3.IronPDF 授權:從IronPdf.com取得您的授權金鑰。
NuGet套件變更
# Remove Crystal Reports packages
dotnet remove package CrystalDecisions.CrystalReports.Engine
dotnet remove package CrystalDecisions.Shared
dotnet remove package CrystalDecisions.ReportAppServer
dotnet remove package CrystalDecisions.Web
# Remove legacy assemblies from project references
# Check for: CrystalDecisions.*.dll in project references
# Install IronPDF
dotnet add package IronPdf# Remove Crystal Reports packages
dotnet remove package CrystalDecisions.CrystalReports.Engine
dotnet remove package CrystalDecisions.Shared
dotnet remove package CrystalDecisions.ReportAppServer
dotnet remove package CrystalDecisions.Web
# Remove legacy assemblies from project references
# Check for: CrystalDecisions.*.dll in project references
# Install IronPDF
dotnet add package IronPdf授權組態
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.com完整的 API 參考資料
命名空間變更
// Before: SAP Crystal Reports
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.ReportAppServer;
// After: IronPDF
using IronPdf;// Before: SAP Crystal Reports
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.ReportAppServer;
// After: IronPDF
using IronPdf;IRON VB CONVERTER ERROR developers@ironsoftware.com核心 API 對應
| SAP Crystal Reports | IronPDF | 筆記 |
|---|---|---|
報告文件 | <代碼>ChromePdfRenderer</代碼 | 核心渲染 |
| <編碼>ReportDocument.Load()</編碼 | <代碼>RenderHtmlAsPdf()</代碼 | 載入內容 |
.rpt 檔案 | HTML/CSS 範本 | 範本格式 |
| <編碼>SetDataSource()</編碼 | 包含資料的 HTML | 資料綁定 |
| <代碼>SetParameterValue()</代碼 | 字串插值 | 參數 |
| <代碼>ExportToDisk()</代碼 | <代碼>pdf.SaveAs()</代碼 | 儲存檔案 |
| <代碼>ExportToStream()</代碼 | <編碼>pdf.BinaryData</編碼 | 取得 bytes |
| <代碼>PrintToPrinter()</代碼 | <編碼>pdf.Print()</編碼 | 印刷 |
Database.Tables | C# 資料存取 | 資料來源 |
公式字段定義 | C# 邏輯 | 計算 |
摘要資訊 | <編碼>pdf.MetaData</編碼 | PDF 元資料 |
| <編碼>ExportFormatType.PortableDocFormat</編碼 | 預設輸出 | PDF 原生語言 |
程式碼遷移範例
範例 1:HTML 到 PDF 的轉換
之前 (SAP Crystal Reports):
// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;
class Program
{
static void Main()
{
// Crystal Reports requires a .rpt file template
ReportDocument reportDocument = new ReportDocument();
reportDocument.Load("Report.rpt");
// Crystal Reports doesn't directly support HTML
// You need to bind data to the report template
// reportDocument.SetDataSource(dataSet);
ExportOptions exportOptions = reportDocument.ExportOptions;
exportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
exportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
DiskFileDestinationOptions diskOptions = new DiskFileDestinationOptions();
diskOptions.DiskFileName = "output.pdf";
exportOptions.DestinationOptions = diskOptions;
reportDocument.Export();
reportDocument.Close();
reportDocument.Dispose();
}
}// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;
class Program
{
static void Main()
{
// Crystal Reports requires a .rpt file template
ReportDocument reportDocument = new ReportDocument();
reportDocument.Load("Report.rpt");
// Crystal Reports doesn't directly support HTML
// You need to bind data to the report template
// reportDocument.SetDataSource(dataSet);
ExportOptions exportOptions = reportDocument.ExportOptions;
exportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
exportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
DiskFileDestinationOptions diskOptions = new DiskFileDestinationOptions();
diskOptions.DiskFileName = "output.pdf";
exportOptions.DestinationOptions = diskOptions;
reportDocument.Export();
reportDocument.Close();
reportDocument.Dispose();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
string htmlContent = "<h1>Hello World</h1><p>This is a PDF generated from HTML.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
string htmlContent = "<h1>Hello World</h1><p>This is a PDF generated from HTML.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com本範例展示了基本的範式差異。SAP Crystal Reports需要在 Crystal Reports Designer 中建立預先設計好的 .rpt 檔案範本,然後您必須設定 ExportOptions, ExportDestinationType, ExportFormatType, 和 DiskFileDestinationOptions. 該函式庫不直接支援 HTML 內容 - 您必須將資料綁定到報告範本。
IronPDF 直接接受 HTML 字串:建立一個 ChromePdfRenderer, 使用任何 HTML 內容呼叫 RenderHtmlAsPdf(), 以及 SaveAs(). 不需要設計師、不需要二進位範本、不需要複雜的匯出設定。 請參閱 HTML to PDF 文件,以瞭解全面的範例。
範例 2:URL 到 PDF 的轉換
之前 (SAP Crystal Reports):
// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;
using System.Net;
class Program
{
static void Main()
{
// Crystal Reports cannot directly convert URLs to PDF
// You need to create a report template first
// Download HTML content
WebClient client = new WebClient();
string htmlContent = client.DownloadString("https://example.com");
// Crystal Reports requires .rpt template and data binding
// This approach is not straightforward for URL conversion
ReportDocument reportDocument = new ReportDocument();
reportDocument.Load("WebReport.rpt");
// Manual data extraction and binding required
// reportDocument.SetDataSource(extractedData);
reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "output.pdf");
reportDocument.Close();
reportDocument.Dispose();
}
}// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;
using System.Net;
class Program
{
static void Main()
{
// Crystal Reports cannot directly convert URLs to PDF
// You need to create a report template first
// Download HTML content
WebClient client = new WebClient();
string htmlContent = client.DownloadString("https://example.com");
// Crystal Reports requires .rpt template and data binding
// This approach is not straightforward for URL conversion
ReportDocument reportDocument = new ReportDocument();
reportDocument.Load("WebReport.rpt");
// Manual data extraction and binding required
// reportDocument.SetDataSource(extractedData);
reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "output.pdf");
reportDocument.Close();
reportDocument.Dispose();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF from a URL
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created from URL successfully!");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF from a URL
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created from URL successfully!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comSAP Crystal Reports 無法直接將 URL 轉換為 PDF。 您需要使用 WebClient 來手動下載 HTML 內容,然後以某種方式將這些資料擷取並綁定到預先設計好的 .rpt 模版 - 這個過程並不簡單,需要大量的手動工作。
IronPDF 的 RenderUrlAsPdf() 方法可在單次呼叫中擷取包含所有 CSS、JavaScript 和圖片的完整渲染網頁。 請參閱我們的 教學,瞭解更多資訊。
範例 3:帶有頁碼的頁首和頁尾
之前 (SAP Crystal Reports):
// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;
class Program
{
static void Main()
{
// Crystal Reports requires design-time configuration
ReportDocument reportDocument = new ReportDocument();
reportDocument.Load("Report.rpt");
// Headers and footers must be designed in the .rpt file
// using Crystal Reports designer
// You can set parameter values programmatically
reportDocument.SetParameterValue("HeaderText", "Company Name");
reportDocument.SetParameterValue("FooterText", "Page ");
// Crystal Reports handles page numbers through formula fields
// configured in the designer
reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "output.pdf");
reportDocument.Close();
reportDocument.Dispose();
}
}// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;
class Program
{
static void Main()
{
// Crystal Reports requires design-time configuration
ReportDocument reportDocument = new ReportDocument();
reportDocument.Load("Report.rpt");
// Headers and footers must be designed in the .rpt file
// using Crystal Reports designer
// You can set parameter values programmatically
reportDocument.SetParameterValue("HeaderText", "Company Name");
reportDocument.SetParameterValue("FooterText", "Page ");
// Crystal Reports handles page numbers through formula fields
// configured in the designer
reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "output.pdf");
reportDocument.Close();
reportDocument.Dispose();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
// Configure headers and footers
renderer.RenderingOptions.TextHeader.CenterText = "Company Name";
renderer.RenderingOptions.TextHeader.FontSize = 12;
renderer.RenderingOptions.TextFooter.LeftText = "Confidential";
renderer.RenderingOptions.TextFooter.RightText = "Page {page} of {total-pages}";
renderer.RenderingOptions.TextFooter.FontSize = 10;
string htmlContent = "<h1>Document Title</h1><p>Document content goes here.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF with headers and footers created!");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
// Configure headers and footers
renderer.RenderingOptions.TextHeader.CenterText = "Company Name";
renderer.RenderingOptions.TextHeader.FontSize = 12;
renderer.RenderingOptions.TextFooter.LeftText = "Confidential";
renderer.RenderingOptions.TextFooter.RightText = "Page {page} of {total-pages}";
renderer.RenderingOptions.TextFooter.FontSize = 10;
string htmlContent = "<h1>Document Title</h1><p>Document content goes here.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF with headers and footers created!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comSAP Crystal Reports 需要在設計時設定頁首和頁尾。 您必須使用 Crystal Reports Designer 在 .rpt 檔案中設計它們,然後在執行時傳入參數值,例如 "HeaderText" 和 "FooterText" 。必須透過設計器中的公式欄位來設定頁碼。
IronPdf 使用 TextHeader 和 TextFooter 屬性提供程式化的頁首/頁尾設定。 直接在程式碼中設定 CenterText, LeftText, RightText, 以及 FontSize. 頁數使用 {page} 和 {total-pages} 占位符 - 不需要設計師。
常見的遷移問題
問題 1:.rpt 檔案轉換
SAP Crystal Reports:內嵌版面、資料、公式的二進位 .rpt 檔案。
解決方案:無法直接轉換 - 必須重新製作成 HTML: 1.在 Crystal Reports 設計器中開啟 .rpt 2.文件排版、字型、顏色 3.請注意所有公式欄位 4.以HTML/CSS重製 5.將公式轉換為 C# 程式碼
第 2 期:資料庫連線
SAP Crystal Reports: 內嵌連接字串和 ODBC。
解決方案:使用您應用程式的資料層:
// Instead of Crystal's database integration
var data = await _dbContext.Orders
.Where(o => o.Date >= startDate && o.Date <= endDate)
.ToListAsync();
// Bind to HTML template
var html = GenerateReportHtml(data);// Instead of Crystal's database integration
var data = await _dbContext.Orders
.Where(o => o.Date >= startDate && o.Date <= endDate)
.ToListAsync();
// Bind to HTML template
var html = GenerateReportHtml(data);IRON VB CONVERTER ERROR developers@ironsoftware.com問題 3:運行時依賴性
SAP Crystal Reports: 需要安裝 Crystal Reports Runtime (500MB以上)。
解決方案:IronPDF是自成一格的:
# Just add theNuGetpackage
dotnet add package IronPdf
# That's it - no additional installs needed# Just add theNuGetpackage
dotnet add package IronPdf
# That's it - no additional installs needed第 4 期:32 位元/64 位元問題
SAP Crystal Reports: COM 依賴通常需要 32 位元模式。
解決方案:IronPDF為原生 64 位元,無需特殊設定。
遷移後的新功能
遷移到IronPDF之後,您可以獲得SAP Crystal Reports無法提供的功能:
PDF 合併
var pdf1 = PdfDocument.FromFile("report1.pdf");
var pdf2 = PdfDocument.FromFile("report2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_report.pdf");var pdf1 = PdfDocument.FromFile("report1.pdf");
var pdf2 = PdfDocument.FromFile("report2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_report.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comPDF安全性
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(reportHtml);
pdf.MetaData.Title = "Quarterly Sales Report";
pdf.MetaData.Author = "Finance Department";
pdf.SecuritySettings.OwnerPassword = "admin123";
pdf.SecuritySettings.UserPassword = "view123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("secure_report.pdf");var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(reportHtml);
pdf.MetaData.Title = "Quarterly Sales Report";
pdf.MetaData.Author = "Finance Department";
pdf.SecuritySettings.OwnerPassword = "admin123";
pdf.SecuritySettings.UserPassword = "view123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("secure_report.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com數位簽名
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);IRON VB CONVERTER ERROR developers@ironsoftware.com水印。
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");IRON VB CONVERTER ERROR developers@ironsoftware.com功能比較摘要
| 特點 | SAP Crystal Reports | IronPDF |
|---|---|---|
| 安裝 | ||
| 運行時間大小 | 500MB+ | 約20MB |
| 安裝方法 | MSI/Setup.exe | NuGet |
| 部署 | 複雜的 | xcopy |
| 平台支援 | ||
| .NET Framework | 是 | 是 |
| .NET Core/5/6/7/8 | 限額 | 全文 |
| 64 位元原生 | 問題 | 是 |
| Linux/Docker | 無 | 是 |
| Azure/AWS | 難度 | 簡單的 |
| 開發 | ||
| 報表設計師 | 要求 | 可選 (HTML) |
| 範本格式 | .rpt (二進位) | HTML/CSS |
| 學習曲線 | 水晶語法 | 網頁標準 |
| IntelliSense | 無 | 完整 C# |
| 渲染 | ||
| HTML 至 PDF | 無 | 完整的 Chromium |
| URL 至 PDF | 無 | 是 |
| CSS 支援 | 無 | 完整的 CSS3 |
| JavaScript | 無 | 完整的 ES2024 |
| PDF功能 | ||
| 合併 PDF | 無 | 是 |
| 分割 PDF | 無 | 是 |
| 水印 | 限額 | 完整 HTML |
| 數位簽名 | 無 | 是 |
| PDF/A | 無 | 是 |
遷移清單
預遷移
- [ ] 庫存所有
.rpt檔案 - [ ] 每份報告版面截圖以供參考
- [ ] 文件公式欄位和計算
- [ ] 列出所有資料來源和參數
- [ ] 確定列印需求
- [ ] 從 ironpdf.com 獲得IronPDF授權金鑰
程式碼更新
- [ ] 移除 Crystal Reports 套件 (
CrystalDecisions.CrystalReports.Engine等) - [ ] 從部署中移除執行時安裝
- [ ] 安裝
IronPdfNuGet套件 - [ ] 將
.rpt版面轉換為HTML/CSS模板 - [ ] 將 Crystal 公式轉換為 C# 程式碼
- [更新資料綁定從<編碼>SetDataSource()</編碼到 HTML 字串插值
- [更新列印程式碼,從<代碼>PrintToPrinter()</代碼到<編碼>pdf.Print()</編碼。
- [ ] 在應用程式啟動時加入授權初始化
基礎架構
- [ ] 從伺服器移除 Crystal Runtime
- [ ] 更新部署腳本
- [ ] 移除 32 位元相容模式
- [ ] 更新 Docker 映像(如適用)
測試
- [ ] 比較 PDF 輸出與原始報告
- [ ] 核實所有計算
- [ ] 測試所有參數
- [ ] 測試列印功能
- [ ] 效能測試
- [ ] 64 位元測試
結論
雖然SAP Crystal Reports仍是傳統企業報表的強大平台,但其缺乏現代化的彈性,對於動態、前瞻性的組織而言,吸引力往往較低。 該平台 500MB 以上的運行時間、複雜的部署以及有限的 .NET Core 支援造成了重大的維護負擔。
本次轉換的主要變更如下 1.架構:重量級企業平台 → 輕量級NuGet套件 2.大小:500MB+runtime → ~20MB 3.範本:二進制 .rpt 檔 → HTML/CSS 4.設計師:必填 Crystal Reports Designer → 可選(使用任何 HTML 編輯器) 5.資料綁定:SetDataSource() → C# 字串插值 6.參數:SetParameterValue() → 標準 C# 變數 7.Export:複雜的 ExportOptions → 簡單的 pdf.SaveAs() 8.標題/註腳:設計時設定 → 執行時 TextHeader/TextFooter 9.頁數:公式欄位 → {page} 和 {total-pages} 占位符 10.平台:有限的 .NET Core → 完全跨平台支援 11.新功能:PDF 合併、分割、安全性、數位簽署、PDF/A
在SAP Crystal Reports和IronPDF之間做決定,主要取決於組織的設定和未來的期望。 對於大量嵌入 SAP 生態系統、尋求全面報表功能的實體而言,SAP Crystal Reports 的功能無與倫比。 與此同時,使用 .NET 開展網路驅動計畫、尋找簡化 PDF 轉換引擎的組織,將會發現IronPDFfor .NET 具有難以置信的優勢。






