產品比較

報告 .NET 與 IronPDF 的比較

喬迪·巴迪亞
喬迪·巴迪亞
2024年4月29日
分享:

在本文中,我們將仔細研究兩個用於處理 PDF 檔案的受歡迎 C# 函式庫:IronPDF - The .NET PDF Library for C# DevelopersReport.NET。 這些工具對於需要透過其 C# 應用程式創建、修改或互動 PDF 文檔的開發人員來說是必不可少的。 這兩個庫都提供了一系列的功能,旨在使處理PDF更輕鬆和高效,但它們的實現方式不同。

IronPDF 和 Report.NET 使開發人員能夠動態生成文件、編輯內容,並從 PDF 中提取文字和圖像。 他們還支持表單處理、添加數位簽章,並確保應用程式能夠在不同平台上處理 PDF,而不丟失文件的完整性。 這意味著無論是何種裝置或操作系統,PDF 都將按預期顯示和運行。

在這次比較中,我們將深入探討每個庫提供的特定功能、它們的運作方式,提供代碼片段以說明它們的使用方式,並討論它們的許可條款。 此比較旨在讓開發人員清楚了解每個函式庫的功能,協助他們決定哪一個最適合他們的專案需求。 讓我們分解IronPDFReport.NET之間的功能和差異,專注於對開發人員的簡單性和實用見解。

1. Report.NET C#函式庫

Report.NET 是一個強大的 C# 函式庫,旨在幫助開發人員直接在其 .NET 應用程式中創建、管理和操作 PDF 文件。 此工具以其簡單明瞭的PDF生成和操作方法而聞名,允許從頭開始創建複雜的PDF文件或修改現有文件。 其功能範圍從簡單的文字添加到圖像和形狀的合併,使其成為開發人員在專案中實現 PDF 功能的多用途選擇。

Report.NET 1.1 主要功能

1.1.1 文件建立與編輯

Report.NET 在創建新的 PDF 文件和編輯現有文件方面表現出色。 開發人員可以輕鬆添加文本、圖像和圖形,從而製作出詳細且視覺吸引力的文件。

1.1.2 內容管理的靈活性

此程式庫允許對文件內容進行精確控制,包括文字格式、圖像位置和圖形元素。 這種程度的控制確保最終的 PDF 看起來完全符合預期。

1.1.3 使用方便

Report.NET專注於簡單化,簡化了PDF生成過程,即使是剛接觸程式設計上下文中PDF的人也能輕鬆使用。

1.1.4 跨平台相容性

Report.NET 被設計為能無縫地適用於整個 .NET 平台,包括 .NET Core,確保應用程式無論在什麼作業系統上都能生成和管理 PDF。

1.1.5 自訂和樣式設計

該庫為 PDF 文檔提供廣泛的自訂選項,允許開發者調整佈局、樣式和整體外觀,以滿足其特定需求。

1.1.6 開源

作為一款開源工具,Report.NET 從社群貢獻中受益,確保其隨著時間的推移持續更新並接收新功能。社群支持也意味著開發者可以獲得大量的知識和資源。

2. IronPDF C# 程式庫

IronPDF 是一個全面的 .NET 函式庫,專為簡化在 .NET 應用程式中創建、操作和呈現 PDF 文件而設計。 此工具以其能夠同時處理從HTML生成PDF和直接編輯現有PDF文件的能力而脫穎而出。 這對製作報告非常有幫助。 IronPDF 還可以順利整合到 SQL Server Reporting Services 中。 我們可以使用IronPDF建立一個終端用戶報告設計器,以創建報告工具和報告檢視器。

2.1 IronPDF 的主要功能

2.1.1 HTML 轉換為 PDF

IronPDF 的核心優勢之一是其將HTML 和 CSS 轉換為 PDF 文件的能力。 這項功能對於希望將網頁內容轉換為可攜帶格式,同時保留原有設計和佈局的開發人員來說是無價的。

2.1.2 PDF 操作

IronPDF 擅長為開發人員提供編輯和操作 PDF 文件的工具。 這包括新增或移除頁面、修改文字以及嵌入圖片。 我們也可以使用 IronPDF 從報告中提取報告數據。

2.1.3 表單處理

該庫支援創建和編輯PDF 表單,使使用者能夠以動態的方式與文件互動。 此功能對於需要從終端用戶輸入的應用程式至關重要,如調查或申請表。

2.1.4 安全功能

使用IronPDF,實施加密和密碼保護等安全措施變得非常簡單。 這些功能確保 PDF 文件中的敏感信息免受未經授權的訪問。

2.1.5 列印與呈現

IronPDF允許開發人員渲染PDF以用於螢幕顯示和實體列印,確保在這兩種情況下都能實現高品質輸出。 這使得為各種展示或分發需求準備文件變得更加容易。

2.1.6 跨平台支持

IronPDF 在各種 .NET 平台上運行,遵循 .NET 代碼標準,並促進在不同環境中的開發,無兼容性問題。

2.1.7 全面的文件和支持

IronPDF 擁有詳細的文件和專業的支持,幫助開發者有效地導航這個庫的功能並將其功能集成到他們的應用程式中。

2.1.8 進階 PDF 編輯

IronPDF 提供許多先進的編輯功能。 這包括合併和拆分PDF 文件的功能,這對於整理大量信息或從文檔中提取特定部分以供單獨使用特別有用。

2.1.9 自訂頁首與頁尾

該庫允許在 PDF 文件中自定義頁首和頁尾。 此功能對於在頁面之間添加一致的品牌標識、頁碼或文件標題至關重要,提升輸出的專業外觀。

3. 在 Visual Studio 中創建控制臺項目

在 Visual Studio IDE 中建立主控台應用程式是一個相對簡單的過程,涉及幾個步驟。

3.1 啟動 Visual Studio

首先打開 Microsoft Visual Studio。 如果您尚未安裝,您需要從Microsoft 官方網站下載並安裝。 安裝後,啟動 Visual Studio。

3.2 建立新專案

打開 Visual Studio 後,您會看到啟動視窗。 在此,選擇「建立新專案」選項以開始設定新主控台應用程式的過程。

Report .NET 和 IronPDF 比較:圖 1 - 開啟 Visual Studio 並點擊「建立新專案」選項。

3.3 選擇專案類型

在「創建新專案」視窗中,您會看到各種專案範本。 在搜索框中輸入「console」以篩選選項,然後從列表中選擇「Console App」。確保選擇對應於您希望使用的程式語言的模板,例如 C#。

Report .NET 與 IronPDF 的比較:圖2 - 接下來,在 C# 程式語言中選擇「控制台應用程式」專案類型。

3.4 配置專案

選擇控制台應用程式範本後,點擊「下一步」以進入專案配置畫面。 在這裡,您需要提供有關您的項目的一些詳細信息:

  • 專案名稱:為您的專案賦予反映其目的的有意義的名稱。

    • 位置:選擇您希望在電腦上儲存專案檔案的位置。

    Report .NET 與 IronPDF 的比較:圖 3 - 指定 Console App 專案的名稱和位置。 預設情況下,方案名稱與專案名稱相同,但您可以更改它。

  • 解決方案名稱:預設情況下,這與您的專案名稱相同,但如果您計劃在相同的解決方案中包含多個專案,則可以更改。

    • Framework:選擇您想要目標的 .NET Framework 版本。 如果不確定,請選擇最新版本。

    ![Report .NET 和 IronPDF 的比較:圖 4 - 選擇您想要的 .NET Framework 版本。] 如果您不確定,請選擇最新版本。](/static-assets/pdf/blog/report-net-csharp/report-net-csharp-4.webp)

3.5 建立專案

填寫完所有必要資訊後,按下「創建」按鈕。 Visual Studio 現在將根據您的規格生成一個新的控制台應用程序專案。 此過程可能需要一些時間。

4. 安裝 IronPDF 函式庫

要在您的專案中利用IronPDF的功能,您需要先安裝該庫。有幾種方法可以達成這一目的,每種方法均適合不同的開發流程或偏好。 以下是將 IronPDF 庫安裝到 Visual Studio 專案中的三種常見方法。

4.1 使用 NuGet 套件管理器安裝

Visual Studio 中的 NuGet 套件管理器 UI 提供了一種簡單的方式來瀏覽、選擇和安裝套件。

  1. 在 Visual Studio 中,導航到解決方案總管中的專案,右鍵點擊該項目,然後選擇「管理 NuGet 套件...」選項。

  2. 點擊「瀏覽」標籤,然後在搜索框中輸入「IronPDF」。

  3. 在搜索结果中找到 IronPDF 套件,选中它,然后点击“安装”按钮。 Visual Studio 將自動處理下載和安裝。

    Report .NET 與 IronPDF 的比較:圖 5 - 通過在 NuGet 套件管理器的搜索欄中搜索「IronPdf」,使用解決方案的管理 NuGet 套件來安裝 IronPDF,然後選擇專案並點擊安裝按鈕。

4.2 使用 NuGet 套件管理器主控台安裝

對於那些偏好使用命令列工具的人來說,NuGet 套件管理器主控台是一個強大的替代選擇。

  1. 打開主控台:在 Visual Studio 中,前往「工具」選單,然後導航到「NuGet 套件管理器」>「套件管理器主控台」。

    1. 安裝指令:在控制台中,輸入以下指令並按 Enter 鍵:
Install-Package IronPdf

此指令指示 NuGet 下載並安裝最新版本的 IronPDF 到您的專案中。

4.3 使用 NuGet 網站安裝

如果您傾向於手動下載套件或需要特定版本的 IronPDF,NuGet 網站是一個不錯的選擇。

  1. 造訪 NuGet 網站:前往 nuget.org,然後搜尋 "IronPDF"。

  2. 下載套件:從IronPDF 頁面選擇您需要的版本並下載.nupkg 文件。

  3. 手動安裝:下載後,您可以手動將套件添加到您的專案中。 在 Visual Studio 中,前往「工具」菜單,然後選擇「選項」>「NuGet 套件管理員」>「套件來源」。 新增一個來源指向您下載.nupkg文件的資料夾。最後,使用 Visual Studio 中的套件管理器 UI 或主控台從本機來源安裝套件。

5. 安裝 Report.NET 函式庫

打開您的網絡瀏覽器,前往位於 https://github.com/ritchiecarroll/Report.NET/tree/master 的 Report.NET GitHub 存儲庫。 此頁面包含最新版本的Report.NET庫及其源代碼。

5.1 下載庫文件

在儲存庫頁面上,找到「Code」按鈕並點擊它。 在下拉選單中,選擇“Download ZIP”以將整個儲存庫下載為 ZIP 檔案。將此檔案保存到電腦上方便的位置,然後解壓其內容。

5.2 將 Report.NET 添加到您的專案中

提取 ZIP 檔案後,您將在提取的檔案中找到 Report.NET 庫的源代碼。 在您的 Visual Studio 專案中使用 Report.NET,請遵循以下步驟:

  1. 打開您的專案:啟動 Visual Studio 並打開您希望新增 Report.NET 的專案。

    1. 手動添加程式庫:有幾種方法可以將程式庫包含在您的專案中:

      • 作為編譯的程序集:如果 GitHub 存儲庫包含已編譯的 DLL 文件,您只需在專案中添加對該 DLL 的引用。 在專案的方案總管中右鍵點擊「參考」,選擇「添加參考...」,然後瀏覽並選擇 DLL 檔案。
    • 通過包含源文件:如果您希望直接包含源代碼或未提供已編譯的 DLL,您可以將源代碼文件添加到您的專案中。 在方案總管中右鍵點擊您的專案,選擇「添加」>「現有項目...」,然後導航並選擇您從ZIP中提取的Report.NET原始碼檔案。
  2. 確保相容性:確保您的專案針對 Report.NET 所需的相容 .NET Framework 版本。

6. IronPDF 與 Report.NET C# 的高級功能比較

6.1 IronPDF C# 的進階功能

IronPDF 提供了一套高級功能,旨在輕鬆處理各種與 PDF 相關的任務。

6.1.1 將 HTML 渲染成 PDF

IronPDF 可以將包括 CSS 和 JavaScript 在內的 HTML 內容直接轉換為 PDF 文件。 這意味著網頁或 HTML 模板可以被轉換成在瀏覽器中看起來一樣的 PDF。

6.1.1.1 HTML 字串轉換為 PDF

IronPDF允許直接將HTML字串轉換為PDF。 這意味著開發者可以將以字串變數儲存的 HTML 代碼,使用 IronPDF 將其渲染為 PDF 檔案。這項功能在 HTML 內容由應用程式動態生成或修改後進行轉換時特別有用。

using IronPdf;
var Renderer = new IronPdf.HtmlToPdf();
var PDF = Renderer.RenderHtmlAsPdf("<h1>Hello IronPDF</h1>");
PDF.SaveAs("HtmlStringToPdf.pdf");
using IronPdf;
var Renderer = new IronPdf.HtmlToPdf();
var PDF = Renderer.RenderHtmlAsPdf("<h1>Hello IronPDF</h1>");
PDF.SaveAs("HtmlStringToPdf.pdf");

6.1.1.2 HTML 文件轉換為 PDF

同樣地,IronPDF 可以將現有的HTML 檔案轉換為 PDF 文件。 這是通過從檔案系統讀取 HTML 文件,並使用 IronPDF 創建具有相同格式和結構的 PDF 文件來完成的。

using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderHTMLFileAsPdf("invoice.html");
PDF.SaveAs("HtmlFileToPdf.pdf");
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderHTMLFileAsPdf("invoice.html");
PDF.SaveAs("HtmlFileToPdf.pdf");

報告 .NET 與 IronPDF 的比較:圖 6 - 使用 IronPDF 將 HTML 文件輸出為 PDF

6.1.1.3 URL 轉 PDF

IronPDF 也能從即時 URL 渲染 PDF。 這使開發人員可以輸入一個網頁地址,而IronPDF會從該URL獲取HTML內容並將其渲染為PDF。

using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderUrlAsPdf("http://ironpdf.com");
PDF.SaveAs("UrlToPdf.pdf");
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderUrlAsPdf("http://ironpdf.com");
PDF.SaveAs("UrlToPdf.pdf");

Report .NET 和 IronPDF 的比較:圖 7 - 使用 IronPDF 的 URL 轉換為 PDF 的輸出

6.1.2 編輯PDF

使用 IronPDF,您可以編輯現有的 PDF 文件。 這包括向文件中添加文字、圖片和頁面或從文檔中移除頁面。 您還可以從 PDF 文件中查找和替換文本

using IronPdf;
var document = PdfDocument.FromFile("original_document.pdf");
const int targetPageIndex = 1;
const string oldString = "Hello, World!";
const string newString = "Greetings, Universe!";
document.ReplaceTextOnPage(targetPageIndex, oldString, newString);
document.SaveAs("modified_document.pdf");
using IronPdf;
var document = PdfDocument.FromFile("original_document.pdf");
const int targetPageIndex = 1;
const string oldString = "Hello, World!";
const string newString = "Greetings, Universe!";
document.ReplaceTextOnPage(targetPageIndex, oldString, newString);
document.SaveAs("modified_document.pdf");

Report .NET 與 IronPDF 的比較:圖 8 - 輸出:使用 IronPDF 編輯現有 PDF

6.1.3 提取文本和圖像

此套件可以從 PDF 文件中提取文字和圖片,類似於 Crystal Reports,您可以用於索引、搜尋或重新利用內容。

6.1.4 生成 PDF 表單

IronPDF 支援建立PDF 表單。 開發人員可以以程式方式在 PDF 中建立表格,使用者可以填寫它們。

using IronPdf;
using System;
const string alternativeHtmlContent = @"
    <html>
        <body>
            <h2>Alternative PDF Form</h2>
            <form>
              Name: <br> 
              Age: <br> 
              <br>
              <p>Select country:</p>
              <select name='country'>
                <option value='USA'>USA</option>
                <option value='UK'>UK</option>
                <option value='Canada'>Canada</option>
              </select>
              <br>
              <p>Select interests:</p>
              <label for='interest1'> Interest 1</label><br>
              <label for='interest2'> Interest 2</label><br>
            </form>
        </body>
    </html>";
var alternativePdfRenderer = new ChromePdfRenderer();
alternativePdfRenderer.RenderingOptions.CreatePdfFormsFromHtml = true;
alternativePdfRenderer.RenderHtmlAsPdf(alternativeHtmlContent).SaveAs("AlternativeForm.pdf");
using IronPdf;
using System;
const string alternativeHtmlContent = @"
    <html>
        <body>
            <h2>Alternative PDF Form</h2>
            <form>
              Name: <br> 
              Age: <br> 
              <br>
              <p>Select country:</p>
              <select name='country'>
                <option value='USA'>USA</option>
                <option value='UK'>UK</option>
                <option value='Canada'>Canada</option>
              </select>
              <br>
              <p>Select interests:</p>
              <label for='interest1'> Interest 1</label><br>
              <label for='interest2'> Interest 2</label><br>
            </form>
        </body>
    </html>";
var alternativePdfRenderer = new ChromePdfRenderer();
alternativePdfRenderer.RenderingOptions.CreatePdfFormsFromHtml = true;
alternativePdfRenderer.RenderHtmlAsPdf(alternativeHtmlContent).SaveAs("AlternativeForm.pdf");

Report .NET與IronPDF的比較:圖9 - 輸出PDF:使用IronPDF生成PDF表單

6.1.5 合併 PDF 文件

您可以將多個 PDF 文件合併成一個單一文件。 此功能對於合併報告或組合不同的文件部分非常方便。

using IronPdf;
var firstHtmlContent = @"<h1>Document A</h1>
        <p>This is the first document.</p>
        <div style='page-break-after: always;'></div>
        <p>Continuation of Document A</p>";
var secondHtmlContent = @"<h1>Document B</h1>
        <p>This is the second document.</p>
        <div style='page-break-after: always;'></div>
        <p>Continuation of Document B</p>";
var pdfRenderer = new ChromePdfRenderer();
var pdfDocA = pdfRenderer.RenderHtmlAsPdf(firstHtmlContent);
var pdfDocB = pdfRenderer.RenderHtmlAsPdf(secondHtmlContent);
var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB);
mergedPdf.SaveAs("MergedDocuments.pdf");
using IronPdf;
var firstHtmlContent = @"<h1>Document A</h1>
        <p>This is the first document.</p>
        <div style='page-break-after: always;'></div>
        <p>Continuation of Document A</p>";
var secondHtmlContent = @"<h1>Document B</h1>
        <p>This is the second document.</p>
        <div style='page-break-after: always;'></div>
        <p>Continuation of Document B</p>";
var pdfRenderer = new ChromePdfRenderer();
var pdfDocA = pdfRenderer.RenderHtmlAsPdf(firstHtmlContent);
var pdfDocB = pdfRenderer.RenderHtmlAsPdf(secondHtmlContent);
var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB);
mergedPdf.SaveAs("MergedDocuments.pdf");

Report .NET 與 IronPDF 的比較:圖10 - 輸出PDF:生成多個PDF檔並將它們合併成一個PDF。

6.1.6 拆分 PDF 文件

相反地,IronPDF 可以將單個 PDF拆分成多個文檔。 如果您想分發單個頁面或部分內容,這可能是需要的。

6.1.7 加密和解密 PDF 文件

IronPDF 允許對PDF 文件進行加密和解密,為敏感信息增加一層額外的安全保護。

using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("protected.pdf", "password");
encryptedPdf.SecuritySettings.RemovePasswordsAndEncryption();
encryptedPdf.SecuritySettings.MakePdfDocumentReadOnly("super-secret-key");
encryptedPdf.Password = "new-password";
encryptedPdf.SaveAs("secured.pdf");
using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("protected.pdf", "password");
encryptedPdf.SecuritySettings.RemovePasswordsAndEncryption();
encryptedPdf.SecuritySettings.MakePdfDocumentReadOnly("super-secret-key");
encryptedPdf.Password = "new-password";
encryptedPdf.SaveAs("secured.pdf");

6.1.8 設定文件屬性和元數據

使用此庫,設定文件屬性如標題、作者和中繼資料非常簡單。 這有助於文件管理和組織。

using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("sample.pdf");
pdf.MetaData.Author = "Iron Developer";
pdf.MetaData.Keywords = "Confidential, Private";
pdf.MetaData.ModifiedDate = DateTime.Now;
pdf.SaveAs("modified.pdf");
using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("sample.pdf");
pdf.MetaData.Author = "Iron Developer";
pdf.MetaData.Keywords = "Confidential, Private";
pdf.MetaData.ModifiedDate = DateTime.Now;
pdf.SaveAs("modified.pdf");

6.1.9 PDF/A 合規性

IronPDF 可以生成符合 PDF/A 標準的文件,此類文件用於長期歸檔和記錄保存。

6.1.10 使用IronPDF的XML報告

IronPDF 不支持直接將 XML 轉換為 PDF,但一種可行的方法是先將 XML 資料轉換為 HTML 格式。 這是通過使用 XSLT(可擴展樣式表語言轉換)來實現的,這是一種強大的 XML 樣式表語言,旨在將 XML 文檔轉換為其他格式,如 HTML、文本,甚至是新的 XML 文檔。 假設這是我們的 data.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<Library>
    <Book id="1">
        <Title>The Great Gatsby</Title>
        <Author>F. Scott Fitzgerald</Author>
        <Genre>Fiction</Genre>
        <Year>1925</Year>
    </Book>
    <Book id="2">
        <Title>To Kill a Mockingbird</Title>
        <Author>Harper Lee</Author>
        <Genre>Fiction</Genre>
        <Year>1960</Year>
    </Book>
    <Book id="3">
        <Title>1984</Title>
        <Author>George Orwell</Author>
        <Genre>Dystopian</Genre>
        <Year>1949</Year>
    </Book>
</Library>
XML

這是我們的 style.xslt 檔案:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" doctype-system="about:legacy-compat" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <html>
            <head>
                <title>Library Catalog</title>
                <style>
                    body { font-family: Arial, sans-serif; margin: 20px; }
                    table { border-collapse: collapse; width: 100%; }
                    th, td { text-align: left; padding: 8px; }
                    tr:nth-child(even) { background-color: #f2f2f2; }
                    th { background-color: #4CAF50; color: white; }
                </style>
            </head>
            <body>
                <h2>Library Catalog</h2>
                <table>
                    <tr>
                        <th>Title</th>
                        <th>Author</th>
                        <th>Genre</th>
                        <th>Year</th>
                    </tr>
                    <xsl:for-each select="Library/Book">
                        <tr>
                            <td><xsl:value-of select="Title"/></td>
                            <td><xsl:value-of select="Author"/></td>
                            <td><xsl:value-of select="Genre"/></td>
                            <td><xsl:value-of select="Year"/></td>
                        </tr>
                    </xsl:for-each>
                </table>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
XML

以下是我們可以實現這個邏輯的程式碼片段:

using System;
using System.Xml.Xsl;
using System.Xml;
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("style.xslt");
XmlReader reader = XmlReader.Create("data.xml");
XmlWriterSettings settings = new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true };
using (XmlWriter writer = XmlWriter.Create("output.html", settings))
{
    transform.Transform(reader, writer);
}
License.LicenseKey = "Liecense-Key";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("output.html");
pdf.SaveAs("Report.pdf");
using System;
using System.Xml.Xsl;
using System.Xml;
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("style.xslt");
XmlReader reader = XmlReader.Create("data.xml");
XmlWriterSettings settings = new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true };
using (XmlWriter writer = XmlWriter.Create("output.html", settings))
{
    transform.Transform(reader, writer);
}
License.LicenseKey = "Liecense-Key";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("output.html");
pdf.SaveAs("Report.pdf");
  1. 您首先需要一個 XSLT 樣式表(style.xslt),用於指導如何將 XML 數據結構化為 HTML。 .NET 中的 XslCompiledTransform 類用於載入您的 XSLT 文件。

  2. 利用XmlReader來載入你的 XML 數據(data.xml)。 XmlReader 對此用途而言非常高效,因為它提供了僅向前、唯讀的 XML 數據檢視。

  3. 轉換後的 HTML 被寫入一個文件(output.html),使用XmlWriter配置為生成縮進的 HTML 以提高可讀性,並省略 XML 聲明,因為在 HTML 輸出中不需要。

  4. 準備好 HTML 文件後,IronPDFChromePdfRenderer 隨即用來將 HTML 文件轉換成 PDF。 此渲染器模擬高品質渲染引擎,確保生成的 PDF 精確呈現 HTML 內容。

  5. 最後,PDF 文件被保存到檔案系統(Report.pdf)。 此步驟完成了轉換過程,生成了一個從原始 XML 資料派生的 PDF 文件。

    這就是我們使用XML和IronPDF生成報告的方法。 我們生成的輸出 PDF 文件:

    Report .NET 與 IronPDF 的比較:圖11——使用 IronPDF 和 XSLT 從 XML 報告輸出的 PDF 文件

    我們也可以通過程式設計創建 SAP 互動報告,然後使用 IronPDF 進行轉換。 欲了解更多詳情,請參閱此指南:C# 報告生成

6.2 Report.NET的進階功能

Report.NET 提供一套進階功能,允許進行全面的 PDF 生成和自訂。 圖片中列出的功能反映了其中一些先進的功能。 讓我們詳細探討每一個。

6.2.1 字體添加

此功能使PDF文件中能使用各種字體樣式和大小。 它允許開發人員測試不同字體的外觀,確保文本正確顯示並符合設計規範。

using Root.Reports;
using System;
using System.Drawing;
namespace ReportSamples {
  public class Test : Report {
    private readonly FontDef fontDef;
    private readonly FontProp fontProp_Title;
    private readonly FontProp fontProp_Label;
    public Test() {
      fontDef = FontDef.FontDefFromName(this, FontDef.StandardFont.Helvetica);
      fontProp_Title = new FontPropMM(fontDef, 6) { Bold = true };
      fontProp_Label = new FontPropMM(fontDef, 4);
    }
    protected override void Create() {
      FontTest();
    }
    private void FontTest() {
      FontProp fp_Title = new FontPropMM(fontDef, 12) { Bold = true };
      FontProp fp = new FontPropMM(fontDef, 6);
      FontProp fp_Small = new FontPropMM(fontDef, 1.4);
      FontProp fp_XSmall = new FontPropMM(fontDef, 0.8);
      Page page_Cur = new Page(this);
      page_Cur.AddCB_MM(30, new RepString(fontProp_Title, "Font Test"));
      Double rX = 300;
      Double rY = 40;
      for (Int32 i = 32; i < 127; i++) {
        PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
      }
      for (Int32 i = 161; i < 256; i++) {
        PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
      }
      PrintCharacter('�', fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
    }
    private void PrintCharacter(Int32 iChar, FontProp fp, FontProp fp_Small, FontProp fp_XSmall, Double rX, Double rY, Page page_Cur) {
      if (rX > 185) {
        rY += fp.rLineFeedMM;
        rX = 22;
      }
      if (rY > 280) {
        new Page(this);
        rY = 40;
      }
      Char ch = (Char)iChar;
      String s = ch.ToString();
      page_Cur.AddMM(rX + 2, rY, new RepString(fp, s));
      rX += 15;
    }
  }
}
using Root.Reports;
using System;
using System.Drawing;
namespace ReportSamples {
  public class Test : Report {
    private readonly FontDef fontDef;
    private readonly FontProp fontProp_Title;
    private readonly FontProp fontProp_Label;
    public Test() {
      fontDef = FontDef.FontDefFromName(this, FontDef.StandardFont.Helvetica);
      fontProp_Title = new FontPropMM(fontDef, 6) { Bold = true };
      fontProp_Label = new FontPropMM(fontDef, 4);
    }
    protected override void Create() {
      FontTest();
    }
    private void FontTest() {
      FontProp fp_Title = new FontPropMM(fontDef, 12) { Bold = true };
      FontProp fp = new FontPropMM(fontDef, 6);
      FontProp fp_Small = new FontPropMM(fontDef, 1.4);
      FontProp fp_XSmall = new FontPropMM(fontDef, 0.8);
      Page page_Cur = new Page(this);
      page_Cur.AddCB_MM(30, new RepString(fontProp_Title, "Font Test"));
      Double rX = 300;
      Double rY = 40;
      for (Int32 i = 32; i < 127; i++) {
        PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
      }
      for (Int32 i = 161; i < 256; i++) {
        PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
      }
      PrintCharacter('�', fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
    }
    private void PrintCharacter(Int32 iChar, FontProp fp, FontProp fp_Small, FontProp fp_XSmall, Double rX, Double rY, Page page_Cur) {
      if (rX > 185) {
        rY += fp.rLineFeedMM;
        rX = 22;
      }
      if (rY > 280) {
        new Page(this);
        rY = 40;
      }
      Char ch = (Char)iChar;
      String s = ch.ToString();
      page_Cur.AddMM(rX + 2, rY, new RepString(fp, s));
      rX += 15;
    }
  }
}

Report .NET 與 IronPDF 之間的比較:圖12 - 使用 Report.NET 為 PDF 文件添加各種字體樣式和大小

6.2.2 圖像嵌入

透過圖像範例功能,開發人員可以將圖像嵌入到 PDF 文件中。 這包含控制圖像的大小和位置,以及可能對它們應用變換或效果。

using Root.Reports;
using System.Drawing;
namespace ReportSamples {
  public class ImageSample : Report {
    protected override void Create() {
      FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
      FontProp fp_Title = new FontPropMM(fd, 15) { Bold = true };
      FontProp fp_SubTitle = new FontPropMM(fd, 4) { Bold = true };
      PenProp pp = new PenProp(this, 0.2, Color.FromArgb(235, 235, 235));
      PenProp pp_Black = new PenProp(this, 0.2, Color.Black);
      BrushProp bp = new BrushProp(this, Color.LightGray);
      new Page(this);
      page_Cur.AddCB_MM(40, new RepString(fp_Title, "Image Sample"));
      System.IO.Stream stream = GetType().Assembly.GetManifestResourceStream("ReportSamples.Image.jpg");
      page_Cur.AddMM(20, 90, new RepImageMM(stream, 40, Double.NaN));
      page_Cur.AddMM(20, 95, new RepString(fp_SubTitle, "W = 40mm, H = auto."));
      page_Cur.AddMM(67, 90, new RepImageMM(stream, 40, 20));
      page_Cur.AddMM(67, 95, new RepString(fp_SubTitle, "W = 40mm, H = 20mm"));
      page_Cur.AddMM(114, 90, new RepImageMM(stream, Double.NaN, 30));
      page_Cur.AddMM(114, 95, new RepString(fp_SubTitle, "W = auto., H = 30mm"));
      page_Cur.AddMM(161, 90, new RepImageMM(stream, 30, 30));
      page_Cur.AddMM(161, 95, new RepString(fp_SubTitle, "W = 30mm, H = 30mm"));
    }
  }
}
using Root.Reports;
using System.Drawing;
namespace ReportSamples {
  public class ImageSample : Report {
    protected override void Create() {
      FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
      FontProp fp_Title = new FontPropMM(fd, 15) { Bold = true };
      FontProp fp_SubTitle = new FontPropMM(fd, 4) { Bold = true };
      PenProp pp = new PenProp(this, 0.2, Color.FromArgb(235, 235, 235));
      PenProp pp_Black = new PenProp(this, 0.2, Color.Black);
      BrushProp bp = new BrushProp(this, Color.LightGray);
      new Page(this);
      page_Cur.AddCB_MM(40, new RepString(fp_Title, "Image Sample"));
      System.IO.Stream stream = GetType().Assembly.GetManifestResourceStream("ReportSamples.Image.jpg");
      page_Cur.AddMM(20, 90, new RepImageMM(stream, 40, Double.NaN));
      page_Cur.AddMM(20, 95, new RepString(fp_SubTitle, "W = 40mm, H = auto."));
      page_Cur.AddMM(67, 90, new RepImageMM(stream, 40, 20));
      page_Cur.AddMM(67, 95, new RepString(fp_SubTitle, "W = 40mm, H = 20mm"));
      page_Cur.AddMM(114, 90, new RepImageMM(stream, Double.NaN, 30));
      page_Cur.AddMM(114, 95, new RepString(fp_SubTitle, "W = auto., H = 30mm"));
      page_Cur.AddMM(161, 90, new RepImageMM(stream, 30, 30));
      page_Cur.AddMM(161, 95, new RepString(fp_SubTitle, "W = 30mm, H = 30mm"));
    }
  }
}

Report .NET 與 IronPDF 的比較:圖 13 - 輸出 PDF:使用 Report.NET 將圖像嵌入 PDF 文件中

6.2.3 清單佈局管理器

列表佈局管理器提供了一種將列表添加到 PDF 文件中的方法。 這對於創建有序或無序列表、自定義列表縮排、項目符號樣式以及管理文檔中列表項的整體佈局非常有用。

using Root.Reports;
using System.Drawing;
namespace ReportSamples {
  public class ListLayoutManagerSample : Report {
    private Double rMarginLeft = 20;  // millimeters
    private Double rWidth = 175;  // millimeters
    protected override void Create() {
      FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
      FontProp fp = new FontPropMM(fd, 1.9);
      Double rY = 40;  // vertical position in millimeters
      new Page(this);
      FontProp fp_Title = new FontPropMM(fd, 8);
      page_Cur.AddCB_MM(rY, new RepString(fp_Title, "List Layout Manager Sample"));
      rY += 18;
      ListLayoutManager llm = null;
      using (llm = new ListLayoutManager(this)) {
        PenProp pp_BorderLine = new PenPropMM(this, 0.4, Color.Blue);
        PenProp pp_GridLine = new PenPropMM(this, 0.1, Color.Blue);
        // Configuration for columns
        TlmColumn col_Number = new TlmColumnMM(llm, 10);
        col_Number.tlmCellDef_Default.rAlignH = RepObj.rAlignCenter;
        col_Number.tlmCellDef_Default.rAlignV = RepObj.rAlignCenter;
        col_Number.tlmCellDef_Default.penProp_LineLeft = pp_BorderLine;
        TlmColumn col_Text = new TlmColumnMM(llm, 100);
        col_Text.tlmCellDef_Default.tlmTextMode = TlmTextMode.MultiLine;
        TlmColumn col_Author = new TlmColumnMM(llm, rWidth - llm.rWidthMM);
        col_Author.tlmCellDef_Default.penProp_LineRight = pp_BorderLine;
        col_Author.tlmCellDef_Default.brushProp_Back = new BrushProp(this, Color.FromArgb(255, 210, 210));
        llm.container_CreateMM(page_Cur, rMarginLeft, rY);  // immediately creates a container
        // Adding rows and content
        // ...
        // Rows and content omitted for brevity
        // ...
      }
      rY += llm.rCurY_MM + 1.5;
      fp.rSizeMM = 1.5;
      page_Cur.AddRT_MM(rMarginLeft + rWidth, rY, new RepString(fp, "End of list"));
    }
  }
}
using Root.Reports;
using System.Drawing;
namespace ReportSamples {
  public class ListLayoutManagerSample : Report {
    private Double rMarginLeft = 20;  // millimeters
    private Double rWidth = 175;  // millimeters
    protected override void Create() {
      FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
      FontProp fp = new FontPropMM(fd, 1.9);
      Double rY = 40;  // vertical position in millimeters
      new Page(this);
      FontProp fp_Title = new FontPropMM(fd, 8);
      page_Cur.AddCB_MM(rY, new RepString(fp_Title, "List Layout Manager Sample"));
      rY += 18;
      ListLayoutManager llm = null;
      using (llm = new ListLayoutManager(this)) {
        PenProp pp_BorderLine = new PenPropMM(this, 0.4, Color.Blue);
        PenProp pp_GridLine = new PenPropMM(this, 0.1, Color.Blue);
        // Configuration for columns
        TlmColumn col_Number = new TlmColumnMM(llm, 10);
        col_Number.tlmCellDef_Default.rAlignH = RepObj.rAlignCenter;
        col_Number.tlmCellDef_Default.rAlignV = RepObj.rAlignCenter;
        col_Number.tlmCellDef_Default.penProp_LineLeft = pp_BorderLine;
        TlmColumn col_Text = new TlmColumnMM(llm, 100);
        col_Text.tlmCellDef_Default.tlmTextMode = TlmTextMode.MultiLine;
        TlmColumn col_Author = new TlmColumnMM(llm, rWidth - llm.rWidthMM);
        col_Author.tlmCellDef_Default.penProp_LineRight = pp_BorderLine;
        col_Author.tlmCellDef_Default.brushProp_Back = new BrushProp(this, Color.FromArgb(255, 210, 210));
        llm.container_CreateMM(page_Cur, rMarginLeft, rY);  // immediately creates a container
        // Adding rows and content
        // ...
        // Rows and content omitted for brevity
        // ...
      }
      rY += llm.rCurY_MM + 1.5;
      fp.rSizeMM = 1.5;
      page_Cur.AddRT_MM(rMarginLeft + rWidth, rY, new RepString(fp, "End of list"));
    }
  }
}

Report .NET 與 IronPDF 的比較:圖 14 - 輸出 PDF:使用 Report.NET 將清單添加到 PDF 文件中

6.2.4 PDF 屬性

這指的是設置和修改 PDF 文件本身的各種屬性的能力,例如元數據(作者、標題、主題)、檢視首選項以及加密和存取權限等安全設置。

using Root.Reports;
using System;
namespace ReportSamples {
  public class PdfPropertiesSample : Report {
    public PdfPropertiesSample() {
      PdfFormatter pf = (PdfFormatter)formatter;
      pf.sTitle = "PDF Sample";
      pf.sAuthor = "Otto Mayer, mot@root.ch";
      pf.sSubject = "Sample of some PDF features";
      pf.sKeywords = "Sample PDF RSF";
      pf.sCreator = "RSF Sample Application";
      pf.dt_CreationDate = new DateTime(2002, 8, 15, 0, 0, 0, 0);
      pf.pageLayout = PageLayout.TwoColumnLeft;
      pf.bHideToolBar = true;
      pf.bHideMenubar = false;
      pf.bHideWindowUI = true;
      pf.bFitWindow = true;
      pf.bCenterWindow = true;
      pf.bDisplayDocTitle = true;
    }
    protected override void Create() {
      FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
      FontProp fp = new FontPropMM(fd, 4);
      FontProp fp_Title = new FontPropMM(fd, 11);
      fp_Title.bBold = true;
      Page page = new Page(this);
      page.AddCB_MM(40, new RepString(fp_Title, "PDF Properties Sample"));
      fp_Title.rSizeMM = 8;
      page.AddCB_MM(100, new RepString(fp_Title, "First Page"));
      page.AddCB_MM(120, new RepString(fp, "Choose <Document Properties, Summary> from the"));
      page.AddCB_MM(126, new RepString(fp, "File menu to display the document properties"));
      page = new Page(this);
      page.AddCB_MM(100, new RepString(fp_Title, "Second Page"));
    }
  }
}
using Root.Reports;
using System;
namespace ReportSamples {
  public class PdfPropertiesSample : Report {
    public PdfPropertiesSample() {
      PdfFormatter pf = (PdfFormatter)formatter;
      pf.sTitle = "PDF Sample";
      pf.sAuthor = "Otto Mayer, mot@root.ch";
      pf.sSubject = "Sample of some PDF features";
      pf.sKeywords = "Sample PDF RSF";
      pf.sCreator = "RSF Sample Application";
      pf.dt_CreationDate = new DateTime(2002, 8, 15, 0, 0, 0, 0);
      pf.pageLayout = PageLayout.TwoColumnLeft;
      pf.bHideToolBar = true;
      pf.bHideMenubar = false;
      pf.bHideWindowUI = true;
      pf.bFitWindow = true;
      pf.bCenterWindow = true;
      pf.bDisplayDocTitle = true;
    }
    protected override void Create() {
      FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
      FontProp fp = new FontPropMM(fd, 4);
      FontProp fp_Title = new FontPropMM(fd, 11);
      fp_Title.bBold = true;
      Page page = new Page(this);
      page.AddCB_MM(40, new RepString(fp_Title, "PDF Properties Sample"));
      fp_Title.rSizeMM = 8;
      page.AddCB_MM(100, new RepString(fp_Title, "First Page"));
      page.AddCB_MM(120, new RepString(fp, "Choose <Document Properties, Summary> from the"));
      page.AddCB_MM(126, new RepString(fp, "File menu to display the document properties"));
      page = new Page(this);
      page.AddCB_MM(100, new RepString(fp_Title, "Second Page"));
    }
  }
}

6.2.5 PDF 來自文本

PDF 從文本特徵展示了該庫在 PDF 中添加和自訂文本內容的能力。 這包括設定文本對齊、行間距、顏色,以及應用粗體或斜體等文本效果。

7. 文件和支持

7.1 IronPDF

IronPDF 以其廣泛且詳細的文件而聞名。 IronPDF 提供了一個組織良好的文件區塊,包括設置說明、教程和 API 參考資料。 這些指南的結構旨在幫助初學者和經驗豐富的開發人員快速找到所需的資訊。 對於社群驅動的支援,開發人員可以求助於論壇和社群討論。 在這裡,他們可以提問、分享經驗,並從其他用戶那裡找到答案。

IronPDF 也提供透過工單系統的專業支援,讓工程師能直接從 IronPDF 團隊獲得幫助。 此服務可能屬於付費授權的一部分,提供更直接和即時的協助。

7.2 Report.NET

Report.NET 作為一個開源庫,其文檔和支持採用了不同的方法。 該文件可能不如商業庫的內容廣泛,但足以讓您開始並處理常見任務。 該庫的文檔可在 GitHub 存儲庫中找到,或者作為源代碼中的內聯註釋提供。 這往往較為技術性,可能需要一些深入的探究才能找到所需的資訊。

由於 Report.NET 是一個免費且開放源碼的庫,因此不提供正式的專業支持。 開發人員依賴社群提供幫助,或者可能需要聘請專家來處理更深入的問題。

8. 授權模式

報告 .NET 與 IronPDF 的比較:圖 15 - IronPDF for .NET 許可資訊

8.1 IronPDF 授權模式

IronPDF 提供各種授權模式以滿足不同的開發和部署需求,確保能適合各種規模的項目和組織。 以下是概述:

  1. Lite License ($749 USD):這是最基本的選擇,適合個別開發人員在一個地點開發單一專案。 它附帶電子郵件支援,但不包括免版稅再分發。

  2. Plus License ($1,499 USD):適用於小型團隊,此授權支持多達三名開發者在三個地點上進行三個專案的開發。 它加強支援,包括 24 小時電子郵件和聊天,以及電話支援。

  3. 專業授權 ($2,999 美元):此授權專為較大型的團隊和專案而設計,可容納多達 10 名開發人員,在 10 個地點上進行 10 個專案的開發。 它包含所有 Plus 支援選項,還增加了螢幕分享支援,以便進行更具互動性的問題解決。

  4. 免費試用授權:適合評估用途,此試用授權讓您可以免費試用IronPDF。然而,此授權僅限私人使用,且生成的PDF不應發佈於任何公眾或公司互聯網或內聯網項目。

    除了核心授權之外,還有延伸覆蓋的選項:

    • 免版稅再分配:如果您需要在將要分發或銷售的軟體產品中包含 IronPDF,則需要免版稅再分配的保障。 此產品的SaaS和OEM再分發價格為$1,499。
    • 擴展支援與更新:此附加元件確保您持續收到產品更新和支援。 您可以選擇1年或5年的支持方案,後者相較於每年選擇更具成本效益。

8.2 Report.NET 授權模式

Report.NET 在 LGPL 许可证下免费分发。 LGPL(較寬鬆公共許可證)是一種自由軟體許可,允許用戶運行、學習、共享和修改軟體。 這個授權確保 Report.NET 庫在開源和專有軟體中都可以免費使用,只要 LGPL 授權的部分代碼未被修改。 如果它們被修改,這些修改必須在相同的許可證下共享。

9. 結論

在查看IronPDFReport.NET時,我們檢查了各種元素,如它們的功能、所提供的功能範圍、易用性、支援服務以及它們的許可情況。

IronPDF 提供豐富的功能集,不僅允許開發人員從 HTML、圖像和文字創建和編輯 PDF 文件,還可以實現加密、數位簽章和自訂頁眉/頁尾等進階功能。 對不同授權的支持意味著它可以滿足從個人開發者到大型企業的不同規模項目的需求。 全面的文件和專業的支援結構,讓它適合於需要持續更新和直接協助的重要專案。 IronPDF 也提供 免費試用,IronPDF 的試用版本起始於 $749。

相較之下,Report.NET 是一個簡單易用的工具,擅長生成 PDF 文件。 其 LGPL 授權意味著開發人員可以在個人和商業項目中使用該軟體,且基本上沒有太多限制。 雖然它可能不提供與IronPDF相同等級的結構化支持,但Report.NET 的開源特性鼓勵社群的參與和協助。

您在IronPDFReport.NET之間的選擇將取決於您專案的具體需求。 如果您的項目需要詳細的 PDF 創建和操作並有專業支持,IronPDF 可能是您的首選。

喬迪·巴迪亞
軟體工程師
Jordi 最擅長 Python、C# 和 C++,當他不在 Iron Software 發揮技能時,他會進行遊戲編程。他負責產品測試、產品開發和研究,為持續產品改進增添了巨大的價值。多樣化的經驗使他感到挑戰和投入,他說這是與 Iron Software 合作的最喜歡的方面之一。Jordi 在佛羅里達州邁阿密長大,並在佛羅里達大學學習計算機科學和統計學。
< 上一頁
Compdfkit 與 IronPDF 的比較
下一個 >
C# 報告工具(功能比較)