在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
本文將深入探討兩個常用於處理 PDF 檔案的熱門 C# 程式庫: IronPDF 和 Report.NET這些工具對需要透過 C# 應用程式創建、修改或互動 PDF 文件的開發者來說非常重要。兩個庫均提供了一系列功能,旨在使處理 PDF 更加容易和高效,但他們以不同方式來實現這些功能。
IronPDF 和 Report.NET 使開發者能夠動態生成文件、編輯內容,並從 PDF 中提取文本和圖像。它們還支持表單處理、添加數字簽名,並確保應用程序能夠在不同平台上處理 PDF 文件而不失真。這意味著無論使用何種設備或操作系統,PDF 文件都能夠按照預期顯示和運行。
在這次比較中,我們將深入探討每個庫提供的具體功能、它們的運行方式,並提供代碼片段來展示如何使用這些庫,還會討論它們的許可條款。本次比較旨在讓開發者清楚了解每個庫的功能,幫助他們決定哪一個可能最適合其項目需求。讓我們詳細分析 IronPDF 和 Report.NET 的功能和差異,重點放在為開發者提供簡單而實用的見解。
Report.NET 是一個強大的 C# 函式庫,專為協助開發人員在其 .NET 應用中直接建立、管理和操作 PDF 文件而設計。這個工具以其簡單明瞭的方法著稱,可生成和操作 PDF,無論是從頭開始創建複雜的 PDF 文件,還是修改現有的 PDF 文件。其功能涵蓋從簡單的文本添加到嵌入圖片和形狀,使其成為開發人員在項目中實現 PDF 功能的多功能選擇。
Report.NET在創建新PDF文件和編輯現有PDF文件方面表現出色。開發人員可以輕鬆添加文本、圖像和圖形,從而生成詳細且視覺上吸引的文件。
這個庫允許精確控制文檔的內容,包括文本格式、圖像定位和圖形元素。這種控制級別可確保最終的 PDF 文件完全符合預期。
專注於簡單化,Report.NET 簡化了 PDF 的生成過程,使其即使對於新接觸編程和 PDF 工作的人也變得容易上手。
Report.NET 被設計為能無縫地在 .NET 平台上運作,包括 .NET Core,確保應用程式無論在何種作業系統下都能生成和管理 PDF。
該庫提供廣泛的PDF文件自訂選項,允許開發人員調整佈局、樣式和整體外觀,以滿足其特定需求。
作為一個開源工具,Report.NET 受益於社群的貢獻,確保它隨時保持更新並隨時間增加新功能。這種社群支持也意味著開發者可以訪問大量的知識和資源。
IronPDF 是一個完整的 .NET 函式庫,專門用於在 .NET 應用程式中創建、操控和呈現 PDF 文件。這個工具以其能夠從 HTML 生成 PDF 以及直接編輯現有 PDF 文件的能力而著稱。它在創建報告方面非常有幫助。IronPDF 還可以與 SQL Server 報告服務無縫整合。我們可以使用 IronPDF 創建一個終端使用者報告設計器,以創建報告工具和報告查看器。
IronPDF 的核心優勢之一是其轉換能力 將 HTML 和 CSS 轉換為 PDF 文件此功能對於希望在保留原始設計和佈局的同時將網頁內容轉換為可攜式格式的開發者來說是無價的。
IronPDF 擅長為開發者提供編輯和操作 PDF 文件的工具。這包括添加或刪除頁面、修改文本以及 嵌入圖像我們也可以使用IronPDF從報告中提取報告數據。
該庫支持創建和編輯 PDF 表單,使使用者能夠與文件以動態方式互動。這種功能對於需要來自終端使用者輸入的應用程序(如調查或申請表格)至關重要。
使用 IronPDF,可以實現例如加密等安全措施 密碼保護 很簡單。這些功能確保 PDF 文檔中的敏感信息免受未經授權的訪問。
IronPDF允許開發人員渲染PDF以供螢幕查看和 實體列印確保在兩種情況下都能提供高質量的輸出。這使準備文件以滿足各種展示或分發需求變得更容易。
IronPDF 適用於各種 .NET 平台,遵循 .NET 代碼標準,並促進不同環境中的開發而無兼容問題。
IronPDF 支持由 詳細文件 並提供專業支援,幫助開發者導航庫的功能並將其功能高效地整合到他們的應用程式中。
IronPDF 提供許多高級編輯功能。這包括能夠 合併與拆分 PDF文件,這對於組織大量資訊或從文件中提取特定部分以單獨使用特別有用。
該程式庫允許 自訂頁首 在 PDF 文檔中添加頁眉和頁腳。這一功能對於在各個頁面上添加一致的品牌標識、頁碼或文檔標題,以及提升輸出文檔的專業外觀至關重要。
在 Visual Studio 集成開發環境 (IDE) 中建立主控台應用程式是一個涉及多個步驟的簡單過程。
首先開啟 Microsoft Visual Studio。如果您沒有安裝,您需要從以下位置下載並安裝。 官方Microsoft網站. 安裝後,啟動 Visual Studio。
開啟 Visual Studio 後,您會看到啟動視窗。請在此選擇「創建新專案」選項,以開始設定新的主控台應用程式。
在“建立新專案”視窗中,您會看到各種類型的專案模板。請在搜索框中鍵入“console”以篩選選項,然後從列表中選擇“Console 應用程式”。確保您選擇與您希望使用的程式語言(例如 C#)相對應的模板。
選擇主控台應用程式範本後,點擊「Next」進入專案配置畫面。在這裡,你需要提供一些專案的詳細資訊:
方案名稱: 預設為您的專案名稱,但如果您打算在同一個方案中包含多個專案,可以更改名稱。
填寫所有必要的資訊後,點擊「Create」按鈕。Visual Studio 現在將根據您的規格生成一個新的控制台應用程式專案。此過程可能需要幾分鐘。
為了在您的專案中利用 IronPDF 的功能,您需要先安裝該函式庫。有多種方法可以完成此操作,這些方法適應不同的開發工作流程或偏好。以下是將 IronPDF 函式庫安裝到您的 Visual Studio 專案中的三種常見方法。
Visual Studio 中的 NuGet 套件管理器 UI 提供了一種簡便的方法來瀏覽、選擇和安裝套件。
對於那些喜歡使用命令行工具的人,NuGet 套件管理器控制台是一個功能強大的替代方案。
打開控制台:在 Visual Studio 中,進入“工具”選單,然後導航到“NuGet 套件管理器” > “套件管理器控制台”。
Install-Package IronPdf
此指令指示 NuGet 下載並安裝最新版本的 IronPDF 到您的專案中。
如果您希望手動下載套件或需要特定版本的 IronPDF,NuGet 網站是一個不錯的選擇。
訪問 NuGet 網站: 轉到 nuget.org 並搜索 "IronPDF"。
下載軟體包:從 IronPDF 頁面,選擇您需要的版本並下載 .nupkg 檔案。
打開你的網頁瀏覽器,並前往 Report.NET 的 GitHub 儲存庫,網址為 https://github.com/ritchiecarroll/Report.NET/tree/master。這個頁面包含了最新版本的 Report.NET 與其原始碼一起提供的庫。
在儲存庫頁面上,找到「Code」按鈕並點擊。在下拉選單中,選擇「Download ZIP」以ZIP檔案格式下載整個儲存庫。將此檔案保存到電腦上一個方便的位置並解壓其內容。
解壓縮 ZIP 檔後,您會在提取的檔案中找到 Report.NET 庫的源代碼。要在您的 Visual Studio 專案中使用 Report.NET,請遵循以下步驟:
開啟您的專案:啟動 Visual Studio,並開啟您希望添加 Report.NET 的專案。
手動添加庫:有幾種方法可以將庫包含在您的專案中:
作為編譯好的程序集:如果 GitHub 儲存庫中包含編譯好的 DLL 檔案,您可以簡單地在專案中添加對該 DLL 的引用。在專案的解決方案總管中右鍵點擊“引用”,選擇“添加引用…”,然後瀏覽並選擇該 DLL 檔案。
IronPDF 附帶一套先進功能,旨在輕鬆處理各種 PDF 相關任務。
IronPDF 可以將 HTML 內容,包括 CSS 和 JavaScript,直接渲染成 PDF 文件。這意味著可以將網頁或 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")
同樣地,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")
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")
使用 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")
這個庫可以 提取文字和圖片 從 PDF 檔案中,類似於 Crystal Reports,可以用於索引、搜索或重新利用內容。
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")
您可以 合併多個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")
相反,IronPDF 可以 拆分單一 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")
使用這個庫,設定諸如標題、作者和元數據的文檔屬性非常簡單。這有助於文檔的管理和組織。
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")
IronPDF 可以 生成符合 PDF/A 標準 文件,這些文件是長期存檔和記錄保存所需。
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>
這是我們的 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>
以下是我們可以實現這個邏輯的程式碼片段:
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")
您首先需要一個XSLT樣式表 (style.xslt) 指示如何將 XML 資料結構化為 HTML。 .NET 中的 XslCompiledTransform 類用於加載您的 XSLT 檔案。
利用 XmlReader 加載你的 XML 資料 (data.xml). XmlReader 對此目的非常有效,因為它提供了僅向前的、唯讀的 XML 資料檢視。
轉換後的 HTML 被寫入文件 (output.html) 使用XmlWriter,配置以生成缩进的HTML以提高可读性,并省略XML声明,因为在HTML输出中不需要XML声明。
准备好HTML文件后,IronPDF的ChromePdfRenderer 用于将HTML文档转换为PDF。此渲染器模拟高质量的渲染引擎,确保生成的PDF准确表示HTML内容。
這就是我們使用 XML 和 IronPDF 生成報告的方式。我們生成的輸出PDF文件:
我們也可以以程式方式創建 SAP 互動報告,然後使用 IronPDF 將它們轉換。欲了解更多詳細指南,請參閱本指南。 C# 報告生成.
Report.NET 提供了一套進階功能,可以進行全方位的 PDF 生成和自訂。圖片中列出了一些這些進階功能。我們來詳細探討每一個功能。
此功能使得在 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
透過圖像範例功能,開發人員可以將圖像嵌入到 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
清單佈局管理器提供了向 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
這是指設置和修改 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
從文字生成 PDF 功能展示了該庫在添加和自訂 PDF 文件中文本內容方面的能力。這包括設置文字對齊、行距、顏色,以及應用加粗或斜體等文字效果。
IronPDF 以其廣泛而著稱 詳細文件IronPDF 提供了一個組織良好的文件部分,其中包括安裝指導、教程和 API 參考。這些指南的結構旨在幫助初學者和有經驗的開發人員快速找到所需的信息。對於社群驅動的支持,開發人員可以轉向論壇和社區討論。在這裡,他們可以提出問題、分享經驗並從其他用戶那裡找到答案。
IronPDF 還通過工單系統提供專業支持,工程師可以直接從 IronPDF 團隊獲得幫助。這項服務可能是付費許可的一部分,提供更直接和即時的協助。
報告.NET
Report.NET作為一個開源庫,其文檔和支援方式有所不同。文檔可能不像商業庫那樣詳盡,但足以讓您入門並處理常見任務。該庫的文檔可以在 GitHub 存儲庫內找到,或作為源代碼中的內聯註釋。它通常更具技術性,可能需要一些挖掘才能找到所需的信息。
由於 Report.NET 是一個免費且開源的庫,它不提供正式的專業支持。開發者通常依賴社群的幫助,或者需要聘請專家來處理更深層次的問題。
IronPDF 提供各種 授權模式 適合不同的開發和部署需求,確保能滿足各種規模的項目和組織。概述如下:
Lite License ($749美元)**: 這是最基本的選項,適合在一個地點上從事單個專案的個人開發者。它附帶電子郵件支援,但不涵蓋可免權利金重新發行。
Plus License ($1,499 美元)**: 面向小型團隊,此授權許可支援最多三名開發人員在三個地點上處理三個專案。它加強支援,包括24小時電子郵件和聊天支援,以及電話支援。
除了核心許可證,還有延伸涵蓋選項:
Report.NET 根據 LGPL 授權免費發行。LGPL (較少通用公共許可証) 是一個免費的軟體許可證,允許用戶運行、研究、分享和修改軟體。該許可證確保Report.NET程式庫在開源和專有軟體中均可免費使用,只要未修改LGPL授權部分的程式碼。如果程式碼被修改,那些修改必須在相同的許可證下共享。
當查看 IronPDF 和 Report.NET,我們已經檢查了各種元素,如他們的能力、所提供的功能範圍、易用性、支持服務和授權方式。
IronPDF 提供了一套豐富的功能,使得開發人員不僅可以從 HTML、圖像和文本中創建和編輯 PDF 文件,還可以實現諸如加密、數字簽名和自定義頁眉/頁腳等先進功能。對不同授權方式的支持意味著它可以適應從個人開發者到大型企業的不同規模項目。其全面的文檔和專業的支持結構使其適合需要持續更新和直接協助的項目。IronPDF 還提供 免費試用 IronPDF 的起價是 $749。
Report.NET 相反,是一個簡單的工具,擅長生成 PDF 文檔。它的 LGPL 授權意味著開發人員可以在個人和商業項目中毫無重大限制地使用它。儘管它可能不像 IronPDF 那樣提供結構化的支援,但 Report.NET 的開源性質鼓勵社區的投入和幫助。
您在 IronPDF 和 Report.NET 之間的決定將取決於專案的具體要求。如果您的項目需要詳細的 PDF 創建和操作以及專業支援,那麼 IronPDF 可能是首選。