產品比較

報告 .NET 與 IronPDF 的比較

發佈 2024年4月29日
分享:

本文將深入探討兩個常用於處理 PDF 檔案的熱門 C# 程式庫:IronPDF - C#開發者的.NET PDF庫Report.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#。

報告 .NET 和 IronPDF 之間的比較:圖 2 - 接下來,選擇 C# 編程語言中的 Console App 項目類型。

3.4 配置專案

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

  • 項目名稱:為您的項目提供一個反映其目的的有意義的名稱。

    • 位置:選擇您想將專案檔案儲存到電腦上的位置。

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

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

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

    Report .NET 與 IronPDF 比較:圖 4 - 選擇您想要的 .NET Framework 版本。 如果您不確定,請選擇最新版本。

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 將自動處理下載和安裝。

    .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");
Imports IronPdf
Private Renderer = New IronPdf.HtmlToPdf()
Private PDF = Renderer.RenderHtmlAsPdf("<h1>Hello IronPDF</h1>")
PDF.SaveAs("HtmlStringToPdf.pdf")
VB   C#

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");
Imports IronPdf
Private Renderer = New ChromePdfRenderer()
Private PDF = Renderer.RenderHTMLFileAsPdf("invoice.html")
PDF.SaveAs("HtmlFileToPdf.pdf")
VB   C#

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

6.1.1.3 URL 轉 PDF

IronPDF 也能夠渲染一個從實時網址生成 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");
Imports IronPdf
Private Renderer = New ChromePdfRenderer()
Private PDF = Renderer.RenderUrlAsPdf("http://ironpdf.com")
PDF.SaveAs("UrlToPdf.pdf")
VB   C#

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");
Imports IronPdf
Private document = PdfDocument.FromFile("original_document.pdf")
Private Const targetPageIndex As Integer = 1
Private Const oldString As String = "Hello, World!"
Private Const newString As String = "Greetings, Universe!"
document.ReplaceTextOnPage(targetPageIndex, oldString, newString)
document.SaveAs("modified_document.pdf")
VB   C#

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");
Imports IronPdf
Imports System
Private Const alternativeHtmlContent As String = "
    <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>"
Private alternativePdfRenderer = New ChromePdfRenderer()
alternativePdfRenderer.RenderingOptions.CreatePdfFormsFromHtml = True
alternativePdfRenderer.RenderHtmlAsPdf(alternativeHtmlContent).SaveAs("AlternativeForm.pdf")
VB   C#

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");
Imports IronPdf
Private 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>"
Private 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>"
Private pdfRenderer = New ChromePdfRenderer()
Private pdfDocA = pdfRenderer.RenderHtmlAsPdf(firstHtmlContent)
Private pdfDocB = pdfRenderer.RenderHtmlAsPdf(secondHtmlContent)
Private mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB)
mergedPdf.SaveAs("MergedDocuments.pdf")
VB   C#

報告 .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");
Imports IronPdf
Imports System
Private encryptedPdf = PdfDocument.FromFile("protected.pdf", "password")
encryptedPdf.SecuritySettings.RemovePasswordsAndEncryption()
encryptedPdf.SecuritySettings.MakePdfDocumentReadOnly("super-secret-key")
encryptedPdf.Password = "new-password"
encryptedPdf.SaveAs("secured.pdf")
VB   C#

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");
Imports IronPdf
Imports System
Private encryptedPdf = PdfDocument.FromFile("sample.pdf")
pdf.MetaData.Author = "Iron Developer"
pdf.MetaData.Keywords = "Confidential, Private"
pdf.MetaData.ModifiedDate = DateTime.Now
pdf.SaveAs("modified.pdf")
VB   C#

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 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>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<?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>
VB   C#

這是我們的 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 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>
'INSTANT VB TODO TASK: The following line could not be converted:
<?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="/"> (Of html) (Of head) (Of title) Library Catalog</title> (Of style) body
If True Then
	font-family: Arial, sans-serif
	margin:
	20px
End If
					table
					If True Then
						border-collapse: collapse
						width:
						100 Mod 
					End If
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'					th, td
'					{
'						text-align: left;
'						padding:
'						8px;
'					}
					tr:
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'					nth-child(even)
'					{
'						background-color: #f2f2f2;
'					}
					th
					If True Then
						background-color: #4CAF50
						color:
						white
					End If
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'				</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>
VB   C#

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

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");
Imports System
Imports System.Xml.Xsl
Imports System.Xml
Private transform As New XslCompiledTransform()
transform.Load("style.xslt")
Dim reader As XmlReader = XmlReader.Create("data.xml")
Dim settings As New XmlWriterSettings With {
	.Indent = True,
	.OmitXmlDeclaration = True
}
Using writer As XmlWriter = XmlWriter.Create("output.html", settings)
	transform.Transform(reader, writer)
End Using
License.LicenseKey = "Liecense-Key"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlFileAsPdf("output.html")
pdf.SaveAs("Report.pdf")
VB   C#
  1. 您從 XSLT 樣式表開始(style.xslt)規定 XML 資料應如何結構化為 HTML。 在 .NET 中,XslCompiledTransform 類別用於載入您的 XSLT 檔案。

  2. 使用 XmlReader 來載入您的 XML 資料(data.xml). XmlReader 對此用途非常有效,因為它提供了對 XML 數據的單向、只讀視圖。

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

  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;
    }
  }
}
Imports Root.Reports
Imports System
Imports System.Drawing
Namespace ReportSamples
  Public Class Test
	  Inherits Report

	Private ReadOnly fontDef As FontDef
	Private ReadOnly fontProp_Title As FontProp
	Private ReadOnly fontProp_Label As FontProp
	Public Sub New()
	  fontDef = FontDef.FontDefFromName(Me, FontDef.StandardFont.Helvetica)
	  fontProp_Title = New FontPropMM(fontDef, 6) With {.Bold = True}
	  fontProp_Label = New FontPropMM(fontDef, 4)
	End Sub
	Protected Overrides Sub Create()
	  FontTest()
	End Sub
	Private Sub FontTest()
	  Dim fp_Title As FontProp = New FontPropMM(fontDef, 12) With {.Bold = True}
	  Dim fp As FontProp = New FontPropMM(fontDef, 6)
	  Dim fp_Small As FontProp = New FontPropMM(fontDef, 1.4)
	  Dim fp_XSmall As FontProp = New FontPropMM(fontDef, 0.8)
	  Dim page_Cur As New Page(Me)
	  page_Cur.AddCB_MM(30, New RepString(fontProp_Title, "Font Test"))
	  Dim rX As Double = 300
	  Dim rY As Double = 40
	  For i As Int32 = 32 To 126
		PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur)
	  Next i
	  For i As Int32 = 161 To 255
		PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur)
	  Next i
	  PrintCharacter(AscW(" "c), fp, fp_Small, fp_XSmall, rX, rY, page_Cur)
	End Sub
	Private Sub PrintCharacter(ByVal iChar As Int32, ByVal fp As FontProp, ByVal fp_Small As FontProp, ByVal fp_XSmall As FontProp, ByVal rX As Double, ByVal rY As Double, ByVal page_Cur As Page)
	  If rX > 185 Then
		rY += fp.rLineFeedMM
		rX = 22
	  End If
	  If rY > 280 Then
		Dim tempVar As New Page(Me)
		rY = 40
	  End If
	  Dim ch As Char = ChrW(iChar)
	  Dim s As String = ch.ToString()
	  page_Cur.AddMM(rX + 2, rY, New RepString(fp, s))
	  rX += 15
	End Sub
  End Class
End Namespace
VB   C#

在 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"));
    }
  }
}
Imports Root.Reports
Imports System.Drawing
Namespace ReportSamples
  Public Class ImageSample
	  Inherits Report

	Protected Overrides Sub Create()
	  Dim fd As New FontDef(Me, FontDef.StandardFont.Helvetica)
	  Dim fp_Title As FontProp = New FontPropMM(fd, 15) With {.Bold = True}
	  Dim fp_SubTitle As FontProp = New FontPropMM(fd, 4) With {.Bold = True}
	  Dim pp As New PenProp(Me, 0.2, Color.FromArgb(235, 235, 235))
	  Dim pp_Black As New PenProp(Me, 0.2, Color.Black)
	  Dim bp As New BrushProp(Me, Color.LightGray)
	  Dim tempVar As New Page(Me)
	  page_Cur.AddCB_MM(40, New RepString(fp_Title, "Image Sample"))
	  Dim stream As System.IO.Stream = Me.GetType().Assembly.GetManifestResourceStream("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"))
	End Sub
  End Class
End Namespace
VB   C#

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"));
    }
  }
}
Imports Root.Reports
Imports System.Drawing
Namespace ReportSamples
  Public Class ListLayoutManagerSample
	  Inherits Report

	Private rMarginLeft As Double = 20 ' millimeters
	Private rWidth As Double = 175 ' millimeters
	Protected Overrides Sub Create()
	  Dim fd As New FontDef(Me, FontDef.StandardFont.Helvetica)
	  Dim fp As FontProp = New FontPropMM(fd, 1.9)
	  Dim rY As Double = 40 ' vertical position in millimeters
	  Dim tempVar As New Page(Me)
	  Dim fp_Title As FontProp = New FontPropMM(fd, 8)
	  page_Cur.AddCB_MM(rY, New RepString(fp_Title, "List Layout Manager Sample"))
	  rY += 18
	  Dim llm As ListLayoutManager = Nothing
	  llm = New ListLayoutManager(Me)
	  Using llm
		Dim pp_BorderLine As PenProp = New PenPropMM(Me, 0.4, Color.Blue)
		Dim pp_GridLine As PenProp = New PenPropMM(Me, 0.1, Color.Blue)
		' Configuration for columns
		Dim col_Number As TlmColumn = 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
		Dim col_Text As TlmColumn = New TlmColumnMM(llm, 100)
		col_Text.tlmCellDef_Default.tlmTextMode = TlmTextMode.MultiLine
		Dim col_Author As TlmColumn = New TlmColumnMM(llm, rWidth - llm.rWidthMM)
		col_Author.tlmCellDef_Default.penProp_LineRight = pp_BorderLine
		col_Author.tlmCellDef_Default.brushProp_Back = New BrushProp(Me, 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
		' ...
	  End Using
	  rY += llm.rCurY_MM + 1.5
	  fp.rSizeMM = 1.5
	  page_Cur.AddRT_MM(rMarginLeft + rWidth, rY, New RepString(fp, "End of list"))
	End Sub
  End Class
End Namespace
VB   C#

比較 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"));
    }
  }
}
Imports Root.Reports
Imports System
Namespace ReportSamples
  Public Class PdfPropertiesSample
	  Inherits Report

	Public Sub New()
	  Dim pf As PdfFormatter = CType(formatter, PdfFormatter)
	  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
	End Sub
	Protected Overrides Sub Create()
	  Dim fd As New FontDef(Me, FontDef.StandardFont.Helvetica)
	  Dim fp As FontProp = New FontPropMM(fd, 4)
	  Dim fp_Title As FontProp = New FontPropMM(fd, 11)
	  fp_Title.bBold = True
	  Dim page As New Page(Me)
	  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(Me)
	  page.AddCB_MM(100, New RepString(fp_Title, "Second Page"))
	End Sub
  End Class
End Namespace
VB   C#

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美元):這是最基本的選項,適合在一個地點工作的個人開發者處理單個專案。 它附帶電子郵件支援,但不包括免版稅再分發。

  2. Plus License($1,499 美元)適用於小型團隊,此許可支持最多三位開發人員在三個不同地點上進行三個項目。 它加強支援,包括 24 小時電子郵件和聊天,以及電話支援。

  3. Professional License($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 可能是您的首選。

< 上一頁
Compdfkit 與 IronPDF 的比較
下一個 >
C# 報告工具(功能比較)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >