在生產環境中測試,無水印。
在任何需要的地方都能運行。
獲得 30 天的全功能產品。
在幾分鐘內上手運行。
試用產品期間完全訪問我們的支援工程團隊
在本文中,我們將仔細研究兩個用於處理 PDF 檔案的受歡迎 C# 函式庫:IronPDF - The .NET PDF Library for C# Developers和Report.NET。 這些工具對於需要透過其 C# 應用程式創建、修改或互動 PDF 文檔的開發人員來說是必不可少的。 這兩個庫都提供了一系列的功能,旨在使處理PDF更輕鬆和高效,但它們的實現方式不同。
IronPDF 和 Report.NET 使開發人員能夠動態生成文件、編輯內容,並從 PDF 中提取文字和圖像。 他們還支持表單處理、添加數位簽章,並確保應用程式能夠在不同平台上處理 PDF,而不丟失文件的完整性。 這意味著無論是何種裝置或操作系統,PDF 都將按預期顯示和運行。
在這次比較中,我們將深入探討每個庫提供的特定功能、它們的運作方式,提供代碼片段以說明它們的使用方式,並討論它們的許可條款。 此比較旨在讓開發人員清楚了解每個函式庫的功能,協助他們決定哪一個最適合他們的專案需求。 讓我們分解IronPDF和Report.NET之間的功能和差異,專注於對開發人員的簡單性和實用見解。
Report.NET 是一個強大的 C# 函式庫,旨在幫助開發人員直接在其 .NET 應用程式中創建、管理和操作 PDF 文件。 此工具以其簡單明瞭的PDF生成和操作方法而聞名,允許從頭開始創建複雜的PDF文件或修改現有文件。 其功能範圍從簡單的文字添加到圖像和形狀的合併,使其成為開發人員在專案中實現 PDF 功能的多用途選擇。
Report.NET 在創建新的 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 Reporting Services 中。 我們可以使用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 App」。確保選擇對應於您希望使用的程式語言的模板,例如 C#。
選擇控制台應用程式範本後,點擊「下一步」以進入專案配置畫面。 在這裡,您需要提供有關您的項目的一些詳細信息:
專案名稱:為您的專案賦予反映其目的的有意義的名稱。
解決方案名稱:預設情況下,這與您的專案名稱相同,但如果您計劃在相同的解決方案中包含多個專案,則可以更改。
![Report .NET 和 IronPDF 的比較:圖 4 - 選擇您想要的 .NET Framework 版本。] 如果您不確定,請選擇最新版本。](/static-assets/pdf/blog/report-net-csharp/report-net-csharp-4.webp)
填寫完所有必要資訊後,按下「創建」按鈕。 Visual Studio 現在將根據您的規格生成一個新的控制台應用程序專案。 此過程可能需要一些時間。
要在您的專案中利用IronPDF的功能,您需要先安裝該庫。有幾種方法可以達成這一目的,每種方法均適合不同的開發流程或偏好。 以下是將 IronPDF 庫安裝到 Visual Studio 專案中的三種常見方法。
Visual Studio 中的 NuGet 套件管理器 UI 提供了一種簡單的方式來瀏覽、選擇和安裝套件。
在 Visual Studio 中,導航到解決方案總管中的專案,右鍵點擊該項目,然後選擇「管理 NuGet 套件...」選項。
點擊「瀏覽」標籤,然後在搜索框中輸入「IronPDF」。
在搜索结果中找到 IronPDF 套件,选中它,然后点击“安装”按钮。 Visual Studio 將自動處理下載和安裝。
對於那些偏好使用命令列工具的人來說,NuGet 套件管理器主控台是一個強大的替代選擇。
打開主控台:在 Visual Studio 中,前往「工具」選單,然後導航到「NuGet 套件管理器」>「套件管理器主控台」。
Install-Package IronPdf
此指令指示 NuGet 下載並安裝最新版本的 IronPDF 到您的專案中。
如果您傾向於手動下載套件或需要特定版本的 IronPDF,NuGet 網站是一個不錯的選擇。
造訪 NuGet 網站:前往 nuget.org,然後搜尋 "IronPDF"。
下載套件:從IronPDF 頁面選擇您需要的版本並下載.nupkg 文件。
打開您的網絡瀏覽器,前往位於 https://github.com/ritchiecarroll/Report.NET/tree/master 的 Report.NET GitHub 存儲庫。 此頁面包含最新版本的Report.NET庫及其源代碼。
在儲存庫頁面上,找到「Code」按鈕並點擊它。 在下拉選單中,選擇“Download ZIP”以將整個儲存庫下載為 ZIP 檔案。將此檔案保存到電腦上方便的位置,然後解壓其內容。
提取 ZIP 檔案後,您將在提取的檔案中找到 Report.NET 庫的源代碼。 在您的 Visual Studio 專案中使用 Report.NET,請遵循以下步驟:
打開您的專案:啟動 Visual Studio 並打開您希望新增 Report.NET 的專案。
手動添加程式庫:有幾種方法可以將程式庫包含在您的專案中:
IronPDF 提供了一套高級功能,旨在輕鬆處理各種與 PDF 相關的任務。
IronPDF 可以將包括 CSS 和 JavaScript 在內的 HTML 內容直接轉換為 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");
同樣地,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");
IronPDF 也能從即時 URL 渲染 PDF。 這使開發人員可以輸入一個網頁地址,而IronPDF會從該URL獲取HTML內容並將其渲染為PDF。
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderUrlAsPdf("http://ironpdf.com");
PDF.SaveAs("UrlToPdf.pdf");
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderUrlAsPdf("http://ironpdf.com");
PDF.SaveAs("UrlToPdf.pdf");
使用 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");
此套件可以從 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");
您可以將多個 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");
相反地,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");
使用此庫,設定文件屬性如標題、作者和中繼資料非常簡單。 這有助於文件管理和組織。
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");
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>
這是我們的 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>
以下是我們可以實現這個邏輯的程式碼片段:
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");
您首先需要一個 XSLT 樣式表(style.xslt),用於指導如何將 XML 數據結構化為 HTML。 .NET 中的 XslCompiledTransform 類用於載入您的 XSLT 文件。
利用XmlReader來載入你的 XML 數據(data.xml)。 XmlReader 對此用途而言非常高效,因為它提供了僅向前、唯讀的 XML 數據檢視。
轉換後的 HTML 被寫入一個文件(output.html),使用XmlWriter配置為生成縮進的 HTML 以提高可讀性,並省略 XML 聲明,因為在 HTML 輸出中不需要。
準備好 HTML 文件後,IronPDF 的 ChromePdfRenderer 隨即用來將 HTML 文件轉換成 PDF。 此渲染器模擬高品質渲染引擎,確保生成的 PDF 精確呈現 HTML 內容。
最後,PDF 文件被保存到檔案系統(Report.pdf)。 此步驟完成了轉換過程,生成了一個從原始 XML 資料派生的 PDF 文件。
這就是我們使用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;
}
}
}
透過圖像範例功能,開發人員可以將圖像嵌入到 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"));
}
}
}
列表佈局管理器提供了一種將列表添加到 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"));
}
}
}
這指的是設置和修改 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"));
}
}
}
PDF 從文本特徵展示了該庫在 PDF 中添加和自訂文本內容的能力。 這包括設定文本對齊、行間距、顏色,以及應用粗體或斜體等文本效果。
IronPDF 以其廣泛且詳細的文件而聞名。 IronPDF 提供了一個組織良好的文件區塊,包括設置說明、教程和 API 參考資料。 這些指南的結構旨在幫助初學者和經驗豐富的開發人員快速找到所需的資訊。 對於社群驅動的支援,開發人員可以求助於論壇和社群討論。 在這裡,他們可以提問、分享經驗,並從其他用戶那裡找到答案。
IronPDF 也提供透過工單系統的專業支援,讓工程師能直接從 IronPDF 團隊獲得幫助。 此服務可能屬於付費授權的一部分,提供更直接和即時的協助。
Report.NET 作為一個開源庫,其文檔和支持採用了不同的方法。 該文件可能不如商業庫的內容廣泛,但足以讓您開始並處理常見任務。 該庫的文檔可在 GitHub 存儲庫中找到,或者作為源代碼中的內聯註釋提供。 這往往較為技術性,可能需要一些深入的探究才能找到所需的資訊。
由於 Report.NET 是一個免費且開放源碼的庫,因此不提供正式的專業支持。 開發人員依賴社群提供幫助,或者可能需要聘請專家來處理更深入的問題。
IronPDF 提供各種授權模式以滿足不同的開發和部署需求,確保能適合各種規模的項目和組織。 以下是概述:
Lite License ($749 USD):這是最基本的選擇,適合個別開發人員在一個地點開發單一專案。 它附帶電子郵件支援,但不包括免版稅再分發。
Plus License ($1,499 USD):適用於小型團隊,此授權支持多達三名開發者在三個地點上進行三個專案的開發。 它加強支援,包括 24 小時電子郵件和聊天,以及電話支援。
專業授權 ($2,999 美元):此授權專為較大型的團隊和專案而設計,可容納多達 10 名開發人員,在 10 個地點上進行 10 個專案的開發。 它包含所有 Plus 支援選項,還增加了螢幕分享支援,以便進行更具互動性的問題解決。
免費試用授權:適合評估用途,此試用授權讓您可以免費試用IronPDF。然而,此授權僅限私人使用,且生成的PDF不應發佈於任何公眾或公司互聯網或內聯網項目。
除了核心授權之外,還有延伸覆蓋的選項:
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 可能是您的首選。