產品比較

報告 .NET 與 IronPDF 的比較

發佈 2024年4月29日
分享:

本文將深入探討兩個常用於處理 PDF 檔案的熱門 C# 程式庫: IronPDFReport.NET這些工具對需要透過 C# 應用程式創建、修改或互動 PDF 文件的開發者來說非常重要。兩個庫均提供了一系列功能,旨在使處理 PDF 更加容易和高效,但他們以不同方式來實現這些功能。

IronPDF 和 Report.NET 使開發者能夠動態生成文件、編輯內容,並從 PDF 中提取文本和圖像。它們還支持表單處理、添加數字簽名,並確保應用程序能夠在不同平台上處理 PDF 文件而不失真。這意味著無論使用何種設備或操作系統,PDF 文件都能夠按照預期顯示和運行。

在這次比較中,我們將深入探討每個庫提供的具體功能、它們的運行方式,並提供代碼片段來展示如何使用這些庫,還會討論它們的許可條款。本次比較旨在讓開發者清楚了解每個庫的功能,幫助他們決定哪一個可能最適合其項目需求。讓我們詳細分析 IronPDFReport.NET 的功能和差異,重點放在為開發者提供簡單而實用的見解。

1. Report.NET C# Library

Report.NET 是一個強大的 C# 函式庫,專為協助開發人員在其 .NET 應用中直接建立、管理和操作 PDF 文件而設計。這個工具以其簡單明瞭的方法著稱,可生成和操作 PDF,無論是從頭開始創建複雜的 PDF 文件,還是修改現有的 PDF 文件。其功能涵蓋從簡單的文本添加到嵌入圖片和形狀,使其成為開發人員在項目中實現 PDF 功能的多功能選擇。

Report.NET 1.1 主要功能

1.1.1 文件創建和編輯

Report.NET在創建新PDF文件和編輯現有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 報告服務無縫整合。我們可以使用 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 應用程式”。確保您選擇與您希望使用的程式語言(例如 C#)相對應的模板。

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

3.4 配置專案

選擇主控台應用程式範本後,點擊「Next」進入專案配置畫面。在這裡,你需要提供一些專案的詳細資訊:

  • 專案名稱: 給你的專案起一個能反映其目的的有意義的名稱。
  • 位置: 選擇你希望將專案檔案儲存在電腦上的位置。

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

  • 方案名稱: 預設為您的專案名稱,但如果您打算在同一個方案中包含多個專案,可以更改名稱。

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

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

3.5 創建專案

填寫所有必要的資訊後,點擊「Create」按鈕。Visual Studio 現在將根據您的規格生成一個新的控制台應用程式專案。此過程可能需要幾分鐘。

4. 安裝 IronPDF 函式庫

為了在您的專案中利用 IronPDF 的功能,您需要先安裝該函式庫。有多種方法可以完成此操作,這些方法適應不同的開發工作流程或偏好。以下是將 IronPDF 函式庫安裝到您的 Visual Studio 專案中的三種常見方法。

4.1 使用 NuGet 套件管理器安裝

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

  1. 在 Visual Studio 中,在 Solution Explorer 中導航到您的專案,右鍵點擊它,然後選擇 "管理 NuGet 套件..." 選項。
  2. 點擊 "瀏覽" 標籤,並在搜索框中輸入 "IronPDF"。
  3. 在搜索結果中找到 IronPDF 套件,選擇它,然後點擊 "安裝" 按鈕。Visual Studio 會自動處理下載和安裝。

.NET 報告與 IronPDF 比較:圖 5 - 使用 NuGet 套件管理員為解決方案安裝 IronPDF,方法是在 NuGet 套件管理員的搜索框中搜索「IronPdf」,然後選擇專案並點擊「安裝」按鈕。

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

對於那些喜歡使用命令行工具的人,NuGet 套件管理器控制台是一個功能強大的替代方案。

  1. 打開控制台:在 Visual Studio 中,進入“工具”選單,然後導航到“NuGet 套件管理器” > “套件管理器控制台”。

  2. 安裝命令:在控制台中,輸入以下命令並按下 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 庫

打開你的網頁瀏覽器,並前往 Report.NET 的 GitHub 儲存庫,網址為 https://github.com/ritchiecarroll/Report.NET/tree/master。這個頁面包含了最新版本的 Report.NET 與其原始碼一起提供的庫。

5.1 下載程式庫

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

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

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

  1. 開啟您的專案:啟動 Visual Studio,並開啟您希望添加 Report.NET 的專案。

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

    • 作為編譯好的程序集:如果 GitHub 儲存庫中包含編譯好的 DLL 檔案,您可以簡單地在專案中添加對該 DLL 的引用。在專案的解決方案總管中右鍵點擊“引用”,選擇“添加引用…”,然後瀏覽並選擇該 DLL 檔案。

    • 通過包含源代碼檔案:如果您更喜歡直接包含源代碼,或者沒有提供編譯好的 DLL,您可以將源代碼檔案添加到專案中。在解決方案總管中右鍵點擊您的專案,選擇“添加” > “現有項目…”,然後導航至並選擇從 ZIP 中解壓出的 Report.NET 源代碼檔案。
  3. 確保相容性:確保您的專案使用的 .NET Framework 版本與 Report.NET 所需版本相容。

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

6.1 IronPDF 其他高級功能

IronPDF 附帶一套先進功能,旨在輕鬆處理各種 PDF 相關任務。

6.1.1 HTML 轉換成 PDF 繪製

IronPDF 可以將 HTML 內容,包括 CSS 和 JavaScript,直接渲染成 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以提高可读性,并省略XML声明,因为在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-Properties

這是指設置和修改 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

報告.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 美元)4. 試用版授權:理想的評估用途,這 試用授權 您可以免費試用 IronPDF。然而,它僅限於私人使用,生成的 PDF 不應在任何公共或企業互聯網或內聯網項目中發布。

除了核心許可證,還有延伸涵蓋選項:

  • 免版稅重新分發:如果您需要在即將分發或銷售的軟體產品中包含 IronPDF,則需要免版稅重新分發許可。這個價格是 $1,499,適用於 SaaS 和 OEM 重發行。
  • 延長支援與更新:這個附加功能可確保您持續收到產品更新和支援。您可以選擇一年或五年的支援方案,後者相對於年度選項有成本節約。

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.10 剛剛發布

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >