跳至頁尾內容
產品對比

Jsreport 與 IronPDF 的比較

1. 引言

在數位時代,PDF(便攜式文件格式)已成為日常必需品,對於以可靠和一致的格式儲存和共享資訊至關重要。 無論是將資料屬性轉換為格式整齊的 PDF,還是製作專業的發票,開發人員通常都會選擇功能強大的 C# 用戶端程式庫(如 IronPDF 和本機 JSReport Studio),而不是用於伺服器開發的 Phantom PDF。

IronPDF在 .NET 框架中將 HTML 轉換為 PDF 方面效能最佳,而 JSReport SDK 則提供動態報表解決方案,重點在於使用本機 JSReport 伺服器和設定檔實現靈活性和可自訂性。 這兩個庫都提供了獨特的解決方案,滿足了開發人員在 PDF 生成和處理領域的不同需求。

2. 使用 JSReport Server .NET

JSReport SDK .NET 是一款適用於 .NET 應用程式的高階報表解決方案,尤其針對 ASP.NET Core 環境進行了最佳化。 它的獨特之處在於能夠直接從 HTML 和 JavaScript 將視圖輸出轉換為各種格式,例如 PDF、Excel、DOCX 和 CSV。 利用 ASP.NET MVC 引擎(如 Razor)和報表伺服器產生報表,可以實現此功能。

JSReport .NET 提供了一套全面的預設本機擴展,包括計劃、範本版本控制、子報表、使用者管理、匯入/匯出範本和備份,增強了其在各種業務場景中的多功能性和適用性。 它還支援各種 API,包括 REST API、CLI 和 SDK,因此幾乎可以從任何地方呈現報告。

2.1 主要特點

2.1.1 ASP.NET Core 集成

JSReport SDK 提供了一個專門用於 ASP.NET Core 應用程式的jsreport.AspNetCore NuGet 套件。 這包括中間件過濾器,能夠將 MVC 視圖輸出轉換為所需的格式,使用視圖作為 HTML 產生器,使用 JSReport 伺服器作為輸出轉換器。

2.1.2 靈活設置

該設定涉及使用諸如jsreport.AspNetCorejsreport.Localjsreport.Binary之類的套件。 這些輔助類別便於透過jsreport.Client連接到本機 JSReport 實例或遠端實例。

2.1.3 輸出轉換

開發人員可以輕鬆地為輸出轉換指定 JSReport 配方。 例如,使用MiddlewareFilterChromePdf配方,ASP.NET 過濾器可以擷取視圖的渲染結果並將其轉換為 PDF 格式。 此功能對於基於 ASP.NET 的應用程式尤其有用。

2.1.4 遠端實例相容性

JSReport .NET 可與遠端 JSReport 實例無縫整合。 這在編排式 Docker 環境中尤其有利,因為 JSReport 在單獨的容器中運作。 這種整合有助於使用 Docker-compose 等工具來協調 JSReport 和 .NET Core 應用程式。

2.1.5 高級響應處理

OnAfterRender鉤子允許對回應標頭和其他屬性進行操作。 該鉤子還可以用於將輸出儲存到文件中,從而在處理報告產生過程的回應方面提供了靈活性。

2.1.6 自訂標頭

JSReport.NET 允許透過局部視圖指定自訂 PDF 標頭。 這些標題可以在運行時與 PDF 主內容一起呈現,為報告生成提供額外的自訂選項。

2.1.7 不使用 MVC 視圖進行渲染

此框架支援從原始 HTML 渲染報表,而不僅僅是 MVC 視圖。 此功能使報告產生過程更加靈活,使開發人員能夠直接渲染 HTML 內容。

3. IronPDF

IronPDF 是一個適用於 .NET 應用程式的實用程式庫,專注於簡化 PDF 的處理流程。 它的主要功能之一是將 HTML 轉換為 PDF ,這非常適合從網頁產生報告或發票。 它在伺服器端和客戶端應用程式方面都很高效,因此既適用於商業項目,也適用於個人用途。

IronPDF 可以整合到許多不同的 .NET 環境中,例如 ASP.NET、MVC、Windows Forms 和 WPF,並且與 .NET Core 和 .NET Framework 都能流暢運作。 它還支援 Azure 和其他雲端服務,這對於基於雲端的應用程式開發來說是一個巨大的優勢。

3.1 IronPDF 的主要功能

3.1.1 HTML 轉 PDF

IronPDF 擅長將 HTML 轉換為 PDF 文件。 它可以無縫處理 HTML、CSS、JavaScript 和圖像,確保您的網頁內容在最終的 PDF 中看起來完美無瑕。 轉換過程中保留了原始 HTML 的佈局和樣式。

3.1.2 ASP.NET 集成

與 ASP.NET 的整合非常無縫,無需大量編碼即可將 ASPX 頁面轉換為 PDF。 這對於從現有 Web 應用程式建立 PDF 檔案尤其有用。

3.1.3 編輯和修改

IronPDF 讓您編輯現有的 PDF 文件,例如新增文字、圖像和頁面或合併多個 PDF 文件。 編輯功能簡單易用,無需具備 PDF 專業知識即可使用。 您也可以為 PDF 檔案添加註釋附件大綱和書籤

3.1.4 表單填寫和提取

IronPDF 支援填寫和提取PDF 表單中的數據,這對於處理表單的應用程式至關重要。 IronPDF 讓表單資料的管理流程更加順暢,並且可以處理不同類型的 PDF 表單,從而增強了其靈活性。

3.1.5 安全特性

IronPDF 包含密碼保護和設定 PDF 文件權限等安全功能,這些功能對於保護敏感資訊至關重要。 它具備加密和解密功能,為您的 PDF 檔案增加了一層額外的安全性

3.1.6 可自訂渲染

您可以對 PDF 的渲染方式進行全面控制,例如設定自訂頁首和頁尾、調整頁面邊距以及選擇要轉換的特定 HTML 部分。 這種自訂功能可確保您的 PDF 檔案完全符合您的預期。

3.1.7 進階 PDF 功能

IronPDF 支援PDF/A 合規性和數位簽名,以及 OCR 功能,因此可以將掃描的文件和影像轉換為可搜尋和可編輯的 PDF。 這些功能非常適合更複雜的項目。

3.1.8 易於部署

IronPDF 的安裝非常簡單; 它無需額外安裝或依賴任何元件。 它非常輕巧,以確保不會對應用程式的效能產生負面影響。 此外,它會定期更新,以跟上 .NET 技術的最新發展,為您提供始終適用的 PDF 解決方案。

4. 建立 .NET 項目

4.1 啟動新項目

開啟 Visual Studio,點擊"建立新專案"按鈕開始一個新專案。

JSreport 與 IronPDF 的比較:圖 1 - 建立項目

然後,選擇"控制台應用程式"、".NET Core 應用程式"或任何其他適合您需求的選項。

JSreport 與 IronPDF 的比較:圖 2 - 獨立專案 - 主機應用程式

4.2 項目設置

你需要為你的專案取個名字。 找到項目名稱文字框,然後輸入您想要的名稱。 選擇項目保存位置,方法是選擇您希望項目儲存到的路徑。 輸入這些資訊後,點擊"建立"按鈕繼續。

Jsreport 與 IronPDF 的比較:圖 3 - 專案配置

4.3 選擇 .NET Framework

下一步是為您的專案選擇所需的 .NET 框架。 這個選擇取決於您的專案需求和相容性。 之後,點擊"創建"按鈕。

JSreport 與 IronPDF 的比較:圖 4 - 選擇框架

5. 安裝 IronPDF 庫

5.1 使用 NuGet 套件管理器

若要使用 Visual Studio NuGet 套件管理器安裝 IronPDF,請依照下列步驟操作:

5.2 使用 Visual Studio 命令列

如果您喜歡使用命令列,可以如下在 Visual Studio 中安裝 IronPDF:

開啟 Visual Studio。

  • 前往"工具"選單,將滑鼠停留在"NuGet 套件管理員"上,然後從側邊選單中選擇"套件管理器控制台"。
  • 在控制台中,輸入以下命令:

    Install-Package IronPdf
  • 按 Enter 鍵執行指令,並等待安裝完成。

    Jsreport 與 IronPDF 的比較:圖 7 - IronPDF 安裝

5.3 從 NuGet 網頁直接下載

IronPDF 也可以直接從 NuGet 網站下載:

6. 安裝 JSReport

6.1 在 Visual Studio 中使用 NuGet 套件管理器

若要使用 Visual Studio 的 NuGet 套件管理員執行 JSReport,請前往"工具"功能表並選擇"管理 NuGet 套件"。 這將開啟 NuGet 套件管理器介面。 在 NuGet 套件管理器中,您可以根據專案需求搜尋jsreport.Localjsreport.Binary

Jsreport 與 IronPDF 的比較:圖 10 - jsreport.Binary

以下是將 JSReport 整合到 .NET 應用程式的主要軟體包。 找到合適的軟體包後,點擊"安裝"將其新增至您的專案。 此過程將自動下載該軟體包並將其引用到您的專案中,使其可以正常使用。

6.2 使用 NuGet 套件管理器控制台

或者,您也可以使用 Visual Studio 中的 NuGet 套件管理器控制台安裝 JSReport。 從"工具"功能表中選擇"NuGet 套件管理器",然後選擇"套件管理器控制台",開啟 NuGet 套件管理器控制台。

! Jsreport 與 IronPDF 的比較:圖 11 - 套件管理器控制台

在控制台中,您需要執行特定的命令來安裝 JSReport 套件。 如果要安裝jsreport.Local套件,可以使用指令Install-Package jsreport.Local 。 對於jsreport.Binary包,指令是Install-Package jsreport.Binary 。 在套件管理器控制台中執行這些命令,即可下載對應的 JSReport 套件並將其新增至您的專案。

Jsreport 與 IronPDF 的比較:圖 12 - 安裝 jsreport.Local

7. IronPDF 和 JSReport 中 HTML 與 PDF 功能的比較

7.1 IronPDF 的 HTML 轉 PDF 功能

IronPDF 是一個頂級的 HTML 轉 PDF 庫,以其易用性和高效能而聞名。 它支援 CSS 渲染、JavaScript 執行以及自訂頁首和頁尾等高級功能,增強了其從 HTML 來源生成優質 PDF 的能力。 IronPDF 提供三種將 HTML 轉換為 PDF 的方法:

  1. 將 HTML 字串轉換為 PDF
  2. 將 HTML 檔案轉換為 PDF
  3. 指向 PDF 的 URL

讓我們逐一討論這些方法。

7.1.1 將 HTML 字串轉換為 PDF

此功能可讓您直接從字串轉換 HTML 內容,對於應用程式中動態產生或修改的 HTML 內容尤其有用。 將 HTML 字串傳遞給 IronPDF,即可渲染為 PDF。

using IronPdf;

// Initialize the ChromePdfRenderer
var renderer = new ChromePdfRenderer();

// License key setup
IronPdf.License.LicenseKey = "Your-License-Key";

// HTML string to be converted
string htmlString = @"
<html>
    <head>
        <title>Example HTML</title>
    </head>
    <body>
        <h1>Hello, World!</h1>
        <p>This is an HTML string converted to PDF using IronPDF.</p>
    </body>
</html>";

// Convert HTML string to PDF
var pdfDocument = renderer.RenderHtmlAsPdf(htmlString);

// Save the rendered PDF document
pdfDocument.SaveAs("HtmlStringToPdf.pdf");
using IronPdf;

// Initialize the ChromePdfRenderer
var renderer = new ChromePdfRenderer();

// License key setup
IronPdf.License.LicenseKey = "Your-License-Key";

// HTML string to be converted
string htmlString = @"
<html>
    <head>
        <title>Example HTML</title>
    </head>
    <body>
        <h1>Hello, World!</h1>
        <p>This is an HTML string converted to PDF using IronPDF.</p>
    </body>
</html>";

// Convert HTML string to PDF
var pdfDocument = renderer.RenderHtmlAsPdf(htmlString);

// Save the rendered PDF document
pdfDocument.SaveAs("HtmlStringToPdf.pdf");
$vbLabelText   $csharpLabel

7.1.2 HTML 檔案轉 PDF

此方法可將現有的 HTML 檔案轉換為 PDF,適用於需要以 PDF 格式顯示或散佈的靜態 HTML 檔案。 提供 HTML 檔案的路徑,IronPDF 會處理轉換。

using IronPdf;

// Initialize the ChromePdfRenderer
var renderer = new ChromePdfRenderer();

// License key setup
IronPdf.License.LicenseKey = "Your-License-Key";

// Convert HTML file to PDF
var pdfDocument = renderer.RenderHtmlFileAsPdf("invoice.html");

// Save the PDF document
pdfDocument.SaveAs("Invoice.pdf");
using IronPdf;

// Initialize the ChromePdfRenderer
var renderer = new ChromePdfRenderer();

// License key setup
IronPdf.License.LicenseKey = "Your-License-Key";

// Convert HTML file to PDF
var pdfDocument = renderer.RenderHtmlFileAsPdf("invoice.html");

// Save the PDF document
pdfDocument.SaveAs("Invoice.pdf");
$vbLabelText   $csharpLabel

7.1.3 指向 PDF 的 URL

此功能透過 URL 將整個網頁轉換為 PDF,方便捕捉網頁的當前狀態,包括樣式、圖像和其他資源。 IronPDF 將從給定的 URL 載入網頁並將其轉換為 PDF 文檔,盡可能複製佈局和內容。

using IronPdf;

// Initialize the ChromePdfRenderer
var renderer = new ChromePdfRenderer();

// License key setup
IronPdf.License.LicenseKey = "Your-License-Key";

// Set the Paper Size
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A2;

// Convert webpage to PDF
var pdfDocument = renderer.RenderUrlAsPdf("https://dotnet.microsoft.com/");

// Save the PDF document
pdfDocument.SaveAs("UrlToPdf.pdf");
using IronPdf;

// Initialize the ChromePdfRenderer
var renderer = new ChromePdfRenderer();

// License key setup
IronPdf.License.LicenseKey = "Your-License-Key";

// Set the Paper Size
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A2;

// Convert webpage to PDF
var pdfDocument = renderer.RenderUrlAsPdf("https://dotnet.microsoft.com/");

// Save the PDF document
pdfDocument.SaveAs("UrlToPdf.pdf");
$vbLabelText   $csharpLabel

7.2 JSReport C# HTML 轉 PDF

在 JSReport 中將 HTML 轉換為 PDF 的過程涉及多個步驟,通常包括設定 JSReport 伺服器或使用其線上 API。 一個典型的 C# 實作可能如下所示:

using JsReport.AspNetCore;
using JsReport.Types;
using System.Threading.Tasks;

public async Task<IActionResult> GeneratePdf()
{
    var report = new LocalReporting()
                 .UseBinary(JsReportBinary.GetBinary())
                 .AsUtility()
                 .Create();

    var reportResult = await report.RenderAsync(new RenderRequest()
    {
        Template = new Template()
        {
            Content = "<html><body><h1>Example HTML</h1><p>This is converted to PDF using JSReport.</p></body></html>",
            Engine = Engine.None,
            Recipe = Recipe.ChromePdf
        },
        Options = new RenderOptions()
        {
            Debug = new DebugOptions() { Preview = true }
        }
    });

    var stream = new MemoryStream();
    reportResult.Content.CopyTo(stream);
    stream.Position = 0;
    return File(stream, "application/pdf", "Report.pdf");
}
using JsReport.AspNetCore;
using JsReport.Types;
using System.Threading.Tasks;

public async Task<IActionResult> GeneratePdf()
{
    var report = new LocalReporting()
                 .UseBinary(JsReportBinary.GetBinary())
                 .AsUtility()
                 .Create();

    var reportResult = await report.RenderAsync(new RenderRequest()
    {
        Template = new Template()
        {
            Content = "<html><body><h1>Example HTML</h1><p>This is converted to PDF using JSReport.</p></body></html>",
            Engine = Engine.None,
            Recipe = Recipe.ChromePdf
        },
        Options = new RenderOptions()
        {
            Debug = new DebugOptions() { Preview = true }
        }
    });

    var stream = new MemoryStream();
    reportResult.Content.CopyTo(stream);
    stream.Position = 0;
    return File(stream, "application/pdf", "Report.pdf");
}
$vbLabelText   $csharpLabel

有關更多 JSReport .NET 範例,請造訪以下連結

7.3. Bootstrap 與現代 CSS 框架渲染

使用 Bootstrap 等 CSS 框架建立的現代 Web 應用程式需要 PDF 生成工具,以準確地保留框架佈局和響應式設計元素。

IronPDF:完全支援 Bootstrap 和框架

IronPDF 的 Chromium 渲染引擎為所有現代 CSS 框架提供全面支援:

Bootstrap 5:完全支援 Flexbox 和 CSS Grid,以及所有響應式工具 Bootstrap 4:完整的卡片系統、導航、表單元件

  • Tailwind CSS:所有實用類別和響應式修飾符 -基礎:完整的網格和組件系統 現代CSS3: Flexbox、Grid、自訂屬性、動畫、變換

已通過生產實例驗證: Bootstrap 首頁Bootstrap 模板轉換精度達到像素級。

程式碼範例:使用 Bootstrap 建立功能對比表

using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapComparison = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container my-5'>
        <h1 class='text-center mb-5'>Feature Comparison</h1>

        <div class='table-responsive'>
            <table class='table table-bordered table-hover'>
                <thead class='table-primary'>
                    <tr>
                        <th style='width: 30%'>Feature</th>
                        <th style='width: 35%' class='text-center'>IronPDF</th>
                        <th style='width: 35%' class='text-center'>Alternative</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td><strong>HTML5 Support</strong></td>
                        <td class='text-center'>
                            <span class='badge bg-success fs-6'>Full Support</span>
                            <p class='text-muted small mb-0 mt-2'>Modern web standards</p>
                        </td>
                        <td class='text-center'>
                            <span class='badge bg-warning fs-6'>Partial</span>
                            <p class='text-muted small mb-0 mt-2'>Basic HTML only</p>
                        </td>
                    </tr>
                    <tr>
                        <td><strong>CSS3 & Flexbox</strong></td>
                        <td class='text-center'>
                            <span class='badge bg-success fs-6'>Full Support</span>
                            <p class='text-muted small mb-0 mt-2'>Chromium engine</p>
                        </td>
                        <td class='text-center'>
                            <span class='badge bg-danger fs-6'>Limited</span>
                            <p class='text-muted small mb-0 mt-2'>No flexbox/grid</p>
                        </td>
                    </tr>
                    <tr>
                        <td><strong>JavaScript Execution</strong></td>
                        <td class='text-center'>
                            <span class='badge bg-success fs-6'>Full Support</span>
                            <p class='text-muted small mb-0 mt-2'>V8 engine</p>
                        </td>
                        <td class='text-center'>
                            <span class='badge bg-warning fs-6'>Partial</span>
                            <p class='text-muted small mb-0 mt-2'>Limited execution</p>
                        </td>
                    </tr>
                    <tr>
                        <td><strong>Bootstrap 5</strong></td>
                        <td class='text-center'>
                            <span class='badge bg-success fs-6'>Full Support</span>
                            <p class='text-muted small mb-0 mt-2'>All components</p>
                        </td>
                        <td class='text-center'>
                            <span class='badge bg-danger fs-6'>No Support</span>
                            <p class='text-muted small mb-0 mt-2'>Bootstrap 3 only</p>
                        </td>
                    </tr>
                    <tr class='table-secondary'>
                        <td><strong>Deployment</strong></td>
                        <td class='text-center'>
                            <div class='d-flex justify-content-center gap-2 flex-wrap'>
                                <span class='badge bg-primary'>On-Premises</span>
                                <span class='badge bg-primary'>Cloud</span>
                                <span class='badge bg-primary'>Offline</span>
                            </div>
                        </td>
                        <td class='text-center'>
                            <div class='d-flex justify-content-center gap-2 flex-wrap'>
                                <span class='badge bg-secondary'>Server Only</span>
                            </div>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>

        <div class='alert alert-info mt-4 d-flex align-items-start'>
            <svg class='bi flex-shrink-0 me-2 mt-1' width='20' height='20'></svg>
            <div>
                <strong>Note:</strong> IronPDF's Chromium engine ensures that modern web applications convert to PDF with browser-accurate fidelity, preserving all CSS frameworks and responsive designs.
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapComparison);
pdf.SaveAs("feature-comparison.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapComparison = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container my-5'>
        <h1 class='text-center mb-5'>Feature Comparison</h1>

        <div class='table-responsive'>
            <table class='table table-bordered table-hover'>
                <thead class='table-primary'>
                    <tr>
                        <th style='width: 30%'>Feature</th>
                        <th style='width: 35%' class='text-center'>IronPDF</th>
                        <th style='width: 35%' class='text-center'>Alternative</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td><strong>HTML5 Support</strong></td>
                        <td class='text-center'>
                            <span class='badge bg-success fs-6'>Full Support</span>
                            <p class='text-muted small mb-0 mt-2'>Modern web standards</p>
                        </td>
                        <td class='text-center'>
                            <span class='badge bg-warning fs-6'>Partial</span>
                            <p class='text-muted small mb-0 mt-2'>Basic HTML only</p>
                        </td>
                    </tr>
                    <tr>
                        <td><strong>CSS3 & Flexbox</strong></td>
                        <td class='text-center'>
                            <span class='badge bg-success fs-6'>Full Support</span>
                            <p class='text-muted small mb-0 mt-2'>Chromium engine</p>
                        </td>
                        <td class='text-center'>
                            <span class='badge bg-danger fs-6'>Limited</span>
                            <p class='text-muted small mb-0 mt-2'>No flexbox/grid</p>
                        </td>
                    </tr>
                    <tr>
                        <td><strong>JavaScript Execution</strong></td>
                        <td class='text-center'>
                            <span class='badge bg-success fs-6'>Full Support</span>
                            <p class='text-muted small mb-0 mt-2'>V8 engine</p>
                        </td>
                        <td class='text-center'>
                            <span class='badge bg-warning fs-6'>Partial</span>
                            <p class='text-muted small mb-0 mt-2'>Limited execution</p>
                        </td>
                    </tr>
                    <tr>
                        <td><strong>Bootstrap 5</strong></td>
                        <td class='text-center'>
                            <span class='badge bg-success fs-6'>Full Support</span>
                            <p class='text-muted small mb-0 mt-2'>All components</p>
                        </td>
                        <td class='text-center'>
                            <span class='badge bg-danger fs-6'>No Support</span>
                            <p class='text-muted small mb-0 mt-2'>Bootstrap 3 only</p>
                        </td>
                    </tr>
                    <tr class='table-secondary'>
                        <td><strong>Deployment</strong></td>
                        <td class='text-center'>
                            <div class='d-flex justify-content-center gap-2 flex-wrap'>
                                <span class='badge bg-primary'>On-Premises</span>
                                <span class='badge bg-primary'>Cloud</span>
                                <span class='badge bg-primary'>Offline</span>
                            </div>
                        </td>
                        <td class='text-center'>
                            <div class='d-flex justify-content-center gap-2 flex-wrap'>
                                <span class='badge bg-secondary'>Server Only</span>
                            </div>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>

        <div class='alert alert-info mt-4 d-flex align-items-start'>
            <svg class='bi flex-shrink-0 me-2 mt-1' width='20' height='20'></svg>
            <div>
                <strong>Note:</strong> IronPDF's Chromium engine ensures that modern web applications convert to PDF with browser-accurate fidelity, preserving all CSS frameworks and responsive designs.
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapComparison);
pdf.SaveAs("feature-comparison.pdf");
$vbLabelText   $csharpLabel

輸出:專業的功能比較表,採用 Bootstrap 的表格樣式、徽章、響應式佈局和提示元件-所有內容均以 PDF 格式精確呈現。

JSReport .NET:基於模板,但對 Bootstrap 支援有限

JSReport採用基於模板的方法,根據所選方案使用不同的渲染引擎:

  • Chrome PDF 範例:使用 Puppeteer/Chrome 無頭模式,對 Bootstrap 有良好的支持
  • Phantom JS Recipe:基於舊版 WebKit 引擎,對現代 CSS 的支援有限。
  • wkhtmltopdf 配方: Qt WebKit 引擎(已過時,不支援 flexbox/grid) -模板複雜度:需要學習 JSReport 模板語法 -伺服器依賴性:需要安裝和管理 JSReport 伺服器

使用 Bootstrap 建置 JSReport 時需要考慮的關鍵因素: -配方選擇: Bootstrap 支援情況會因配方選擇的不同而有很大差異。

  • Chrome PDF 格式: Bootstrap 的最佳選擇,但會增加複雜性和依賴項。 -模板學習曲線:必須學習 Handlebars/JSRender 模板語法 -伺服器管理:需要維護 JSReport 伺服器實例 工作流程複雜性:多步驟範本 → 資料 → 渲染過程

開發影響:雖然 JSReport 的 Chrome PDF 方案可以很好地處理 Bootstrap,但整體複雜度更高:

  1. 基於範本的工作流程與直接 HTML 轉換
  2. 伺服器基礎設施需求與進程內庫
  3. 模板語法與標準 HTML 的學習曲線對比
  4. 配方配置的複雜度與簡單易用的 API

對於需要簡單 HTML 到 PDF 轉換且支援 Bootstrap 的應用來說,IronPDF 的直接方法提供了更簡單的整合和更少的元件。

有關 Bootstrap 框架的最佳實踐,請參閱Bootstrap 和 Flexbox CSS 指南

8. 靈活性和進階功能

8.1 IronPDF 的進階功能和自訂

IronPDF 以其先進的功能和高度的客製化能力脫穎而出,可滿足各種 PDF 處理需求。 主要進階功能包括:

PDF/A 合規性

IronPDF 支援 PDF/A 格式,這對於長期存檔和符合行業標準至關重要。 對於法律、金融和政府部門而言,文件的長期完整性至關重要,因此合規性尤其重要。

using IronPdf;

// Create a PdfDocument object or open any PDF File
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3);
using IronPdf;

// Create a PdfDocument object or open any PDF File
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3);
$vbLabelText   $csharpLabel

編輯、合併和拆分 PDF 文件

IronPDF 允許編輯現有 PDF 文件、將多個 PDF 文件合併為一個文件以及將 PDF 文件拆分為單獨的文檔。 此功能在需要將大型文件拆分以便於分發,或者需要合併各種文件的不同部分時特別有用。

安全功能

IronPDF 包含強大的安全功能,例如密碼保護、加密和設定使用者權限的功能。 IronPDF 支援對 PDF 文件進行加密,從而增加一層額外的安全保障,防止內容被竄改或複製。

using IronPdf;

// Open a PDF File
var pdfDoc = PdfDocument.FromFile("invoice.pdf");

// Make a PDF read-only and disallow copy & paste and printing
pdfDoc.SecuritySettings.RemovePasswordsAndEncryption();
pdfDoc.SecuritySettings.AllowUserAnnotations = false;
pdfDoc.SecuritySettings.AllowUserCopyPasteContent = false;
pdfDoc.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdfDoc.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdfDoc.SecuritySettings.AllowUserFormData = false;

// Change or set the document encryption password
pdfDoc.SecuritySettings.OwnerPassword = "passForOpen"; // password to edit the pdf
pdfDoc.SecuritySettings.UserPassword = "onlyForShare"; // password to open the pdf

// Save the protected PDF
pdfDoc.SaveAs("InvoiceProtected.pdf");
using IronPdf;

// Open a PDF File
var pdfDoc = PdfDocument.FromFile("invoice.pdf");

// Make a PDF read-only and disallow copy & paste and printing
pdfDoc.SecuritySettings.RemovePasswordsAndEncryption();
pdfDoc.SecuritySettings.AllowUserAnnotations = false;
pdfDoc.SecuritySettings.AllowUserCopyPasteContent = false;
pdfDoc.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdfDoc.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdfDoc.SecuritySettings.AllowUserFormData = false;

// Change or set the document encryption password
pdfDoc.SecuritySettings.OwnerPassword = "passForOpen"; // password to edit the pdf
pdfDoc.SecuritySettings.UserPassword = "onlyForShare"; // password to open the pdf

// Save the protected PDF
pdfDoc.SaveAs("InvoiceProtected.pdf");
$vbLabelText   $csharpLabel

頁首和頁尾控制

開發人員可以輕鬆地在 PDF 文件中新增自訂頁首和頁腳,這對於製作外觀專業的報告、發票和其他商業文件至關重要。 這包括添加頁碼、日期和自訂文字的功能。

PDF 轉影像

IronPDF 可以將 PDF 頁面轉換為影像。 此功能在需要在 Web 應用程式中將 PDF 內容顯示為圖像或產生縮圖的場景中特別有用。

using IronPdf;
using IronSoftware.Drawing;

// Load the PDF document
var pdf = PdfDocument.FromFile("Example.pdf");

// Extract all pages to a folder as PNG image files
pdf.RasterizeToImageFiles(@"C:\image\folder\*.png");

// Extract specific dimensions or page ranges
pdf.RasterizeToImageFiles(@"C:\image\folder\example_pdf_image_*.jpg", 100, 80);

// Extract all pages as AnyBitmap objects
AnyBitmap [] pdfBitmaps = pdf.ToBitmap();
using IronPdf;
using IronSoftware.Drawing;

// Load the PDF document
var pdf = PdfDocument.FromFile("Example.pdf");

// Extract all pages to a folder as PNG image files
pdf.RasterizeToImageFiles(@"C:\image\folder\*.png");

// Extract specific dimensions or page ranges
pdf.RasterizeToImageFiles(@"C:\image\folder\example_pdf_image_*.jpg", 100, 80);

// Extract all pages as AnyBitmap objects
AnyBitmap [] pdfBitmaps = pdf.ToBitmap();
$vbLabelText   $csharpLabel

8.2 JSReport .NET 高階特性與可擴充性

JSReport .NET 以其高級功能和可擴充性而聞名,使其成為一款用途廣泛的報表產生工具。 其主要特點包括:

動態報表生成

它支援各種模板引擎,包括 Handlebars 和 EJS,從而可以實現複雜而靈活的報表設計。 這種多引擎相容性帶來了廣泛的設計可能性,能夠滿足報告創建中不同的需求和複雜性。

var report = new LocalReporting()
    .UseBinary(JsReportBinary.GetBinary())
    .RunInDirectory(Path.Combine(Directory.GetCurrentDirectory(), "jsreport"))
    .KillRunningJsReportProcesses()
    .Configure(cfg => cfg.AllowLocalFilesAccess().FileSystemStore().BaseUrlAsWorkingDirectory())
    .AsUtility()
    .Create();

var reportResult = await report.RenderAsync(new RenderRequest()
{
    Template = new Template()
    {
        Content = "{{{message}}}",
        Engine = Engine.Handlebars,
        Recipe = Recipe.ChromePdf
    },
    Data = new
    {
        message = "PDF Generation with JSReport .NET"
    }
});
var report = new LocalReporting()
    .UseBinary(JsReportBinary.GetBinary())
    .RunInDirectory(Path.Combine(Directory.GetCurrentDirectory(), "jsreport"))
    .KillRunningJsReportProcesses()
    .Configure(cfg => cfg.AllowLocalFilesAccess().FileSystemStore().BaseUrlAsWorkingDirectory())
    .AsUtility()
    .Create();

var reportResult = await report.RenderAsync(new RenderRequest()
{
    Template = new Template()
    {
        Content = "{{{message}}}",
        Engine = Engine.Handlebars,
        Recipe = Recipe.ChromePdf
    },
    Data = new
    {
        message = "PDF Generation with JSReport .NET"
    }
});
$vbLabelText   $csharpLabel

模板引擎

JSReport .NET 具有報表產生計劃和自動化功能,非常適合每日或每月匯總等定期報表需求。 此功能可確保及時交付報告,並可與業務工作流程集成,實現事件觸發式報告。

透過自訂腳本進行擴展

JSReport C# 允許透過自訂腳本擴展其功能,增強自訂資料處理或特殊格式等功能。 這種可擴展性對於建立滿足特定業務邏輯和資料處理要求的報告至關重要。

9. 支持

9.1 IronPDF 文件品質和可用性

IronPDF 的文檔內容全面且易於使用,既適合初學者,也適合經驗豐富的開發人員。 它包含詳細的指南、API 參考和大量的程式碼範例,使開發人員更容易理解和實作該程式庫在多種語言(如 C# 和 Node)中的功能。

文件結構清晰,定期更新,反映了最新的功能和最佳實踐。 此外,IronPDF 的網站還提供快速入門指南和常見問題解答,這對 .NET 環境下 PDF 操作的新手來說尤其有幫助。

IronPDF 還提供了一個線上試驗場,您可以在其中線上試用 IronPDF 的功能,而無需下載其代碼。 請點擊以下連結進行探索。

9.1.1 支援選項

IronPDF 提供多種支援選項,包括專門的支援團隊來處理查詢和技術問題。 他們提供電子郵件支持,並在開發者論壇上非常活躍,提供解決方案和建議。您也可以透過網站上的"線上支援"選項聯絡線上客服人員。

9.2 JSReport .NET 文件品質和可用性

JSReport .NET 以其內容豐富且維護良好的文件而自豪。 該文件涵蓋了從基本設定到進階使用場景的各種主題,並附有程式碼片段和實作範例。 它的結構邏輯清晰,便於瀏覽和尋找相關資訊。 線上資源還包括全面的 API 參考,確保開發人員能夠存取有關該工具功能的詳細資訊。

9.2.1 支援選項

JSReport .NET 提供多種支援選項。 他們擁有一支專門的支援團隊,可以透過電子郵件聯繫,並且在 GitHub 上保持活躍,提供了一個報告問題和提出功能請求的平台。

10. 許可模式

10.1 IronPDF 的許可

Jsreport 與 IronPDF 的比較:圖 16 - 許可

IronPDF 提供三種不同的定價方案,以滿足不同的使用等級和預算需求:

精簡版:售價為$799 ,這是雲端部署的一次性費用。 它專為小型專案或剛開始接觸 PDF 處理的團隊而設計。

專業版:售價為$1,199 ,另需一次性支付雲端部署費用,此版本適合需要更高級功能和特性的專業開發人員。

無限版:最全面的套餐,價格為$2,399 ,是雲端部署的一次性費用。 它非常適合大規模企業使用,提供豐富的功能,且使用沒有任何限制。

10.2 JSReport .NET 許可證

JSReport 與 IronPDF 的比較:圖 17 - JSReport 許可

JSReport .NET 提供靈活的授權選項,包括訂閱授權和永久授權:

免費許可:此許可提供功能齊全的實例,但最多只能使用 5 個報告範本。 它無需許可證密鑰,適用於小型專案或評估用途。

企業訂閱:此方案每年定價 395 美元,提供功能齊全的單一 JSReport 實例,沒有任何限制,並包含更新。 它非常適合需要強大報表解決方案的個人企業。

企業級訂閱:每年 1,295 美元,此方案最適合大規模部署,提供單一許可證金鑰,可用於無限數量的實例。 此方案包含更新功能,且無需支付版稅,因此適合執行多個實例或作為其他產品的一部分部署給多個客戶的組織。

11. 結論

總之,雖然 IronPDF 和 JSReport .NET 在各自的領域都很有價值,但 IronPDF 由於其全面的 PDF 處理功能而略勝一籌。 它在 PDF/A 合規性、高級編輯和安全功能等方面表現出色,使其成為 .NET 環境中進行詳細 PDF 處理的更通用工具。 JSReport .NET 在動態報表產生和範本方面具有優勢,對於以報表為中心的任務非常有效。 然而,對於大多數需要詳細且多樣化的 PDF 處理和操作的場景,IronPDF 成為更具優勢的選擇。

IronPDF 提供免費的開發者許可證和免費試用版。 Iron Software 提供了一套名為 Iron Suite 的綜合軟體包。軟體包包含IronBarcodeIronXLIronQRIronOCRIronPDFIronWebScraper ,售價僅為兩款軟體的價格,對於尋求廣泛功能的開發人員來說極具價值。

最終,這兩種方案之間的選擇取決於專案或開發商的特定需求和環境。

請注意JSReport SDK 是其各自所有者的註冊商標。 本網站與 JSReport SDK 無任何關聯,也未獲得其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 文中比較僅供參考,反映的是撰寫本文時可公開取得的資訊。

常見問題解答

如何在.NET應用程式中將HTML轉換為PDF?

您可以使用 IronPDF 的RenderHtmlAsPdf方法將 HTML 字串轉換為 PDF 文件。此外,IronPDF 也支援使用RenderHtmlFileAsPdf方法將整個 HTML 檔案轉換為 PDF。

使用 IronPDF 進行 ASP.NET 整合有哪些優勢?

IronPDF 與 ASP.NET 無縫集成,使開發人員能夠以最少的程式碼將 ASPX 頁面轉換為 PDF。這種整合對於從現有 Web 應用程式產生 PDF 報告尤為有利。

IronPDF 能否處理 PDF 的安全功能?

是的,IronPDF 包含強大的安全功能,例如密碼保護、加密和設定 PDF 文件權限,這些功能對於保護敏感資訊至關重要。

IronPDF有哪些特色使其適合HTML轉PDF?

IronPDF 以其易用性和高效能的 HTML 轉 PDF 功能而聞名。它支援 CSS 渲染、JavaScript 執行以及自訂頁首和頁尾等進階功能。

JSReport SDK for .NET Core 的主要特性有哪些?

JSReport SDK for .NET Core 提供了諸如用於轉換 MVC 視圖輸出的中間件過濾器、與遠端實例的兼容性、使用OnAfterRender鉤子的高級響應處理以及從原始 HTML 呈現報告的功能等特性。

JSReport 如何利用範本增強報表產生功能?

JSReport 支援多種範本引擎,可實現複雜靈活的報表設計。它還提供報表定期產生和自動化等功能,從而提高工作效率。

在 Docker 環境中使用 JSReport 有哪些好處?

JSReport .NET 可以與遠端 JSReport 實例高效集成,這在 JSReport 運行於獨立容器中的 Docker 環境中尤其有利。這種設定有助於與 .NET Core 應用程式進行高效的編排。

IronPDF有哪些授權許可選項?

IronPDF 提供多種授權選項:Lite Edition 用於小型項目,Professional Edition 用於進階功能,Unlimited Edition 用於大型企業用途,以滿足不同的專案需求。

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。