IronPDF 和 PDFreactor 的比較
PDF(可攜式文件格式)文件是許多不同工作環境中不可或缺的一部分,它們在製作發票或準備產品文件等任務中經常是必不可少的。 然而,現在市場上有許多不同的PDF工具,您如何知道哪一個適合您呢? 今天,我們將比較PDF庫的功能、支援和授權模式:PDFreactor和IronPDF。
IronPDF和PDFreactor概述
IronPDF是一個強大的.NET程式庫,旨在成為.NET生態系統中所有PDF相關任務的綜合解決方案。 它支援HTML、CSS、JavaScript和各種影像格式,使其非常適應於基於Web的應用程式。 IronPDF具有多種功能,包括PDF生成、編輯、簽名和加密,並與現代.NET框架完全整合,是.NET開發者的一站式PDF解決方案。
另一方面,PDFreactor是一個專業級的HTML到PDF轉換器,在提供高質量的可列印PDF方面表現出色,經常用於轉換如資料驅動的文件、報告或資料表等文件。 它在處理複雜的CSS和JavaScript方面特別強大,確保生成的PDF忠於原始的網頁內容。 它以其能夠輕鬆處理複雜的佈局和樣式而受到高度讚譽,適合需要精確控制PDF輸出的出版和其他行業。
跨平台相容性
IronPDF:
IronPDF支持廣泛的平台,確保您在偏好的環境中工作。 以下是其相容性的概述:
-
.NET版本:
- C#、VB.NET、F#
- .NET Core(8, 7, 6, 5, 和3.1+)
- .NET Standard(2.0+)
- .NET Framework(4.6.2+)
-
應用環境:IronPDF可在Windows、Linux、Mac、Docker、Azure和AWS等環境中工作
-
IDE:支持Microsoft Visual Studio和JetBrains Rider & ReSharper等IDE
- 操作系統和處理器:支持多種不同的操作系統和處理器,包括Windows、Mac、Linux、x64、x86、ARM
欲獲取更多資訊,請存取IronPDF Compatibility。
PDFreactor
-
.NET版本:
- .NET Core 2.1+
- .NET Framework 4.5+
-
支援:HTML5、CSS3、JavaScript、Java、Python、Docker影像、Node.js等。
- 操作系統:可在Windows、Linux和macOS操作系統以及基於雲的系統如AWS和Azure中運行。
關鍵功能比較:IronPDF與PDFreactor中的PDF功能
IronPDF功能
-
HTML到PDF轉換:IronPDF可以處理HTML到PDF的轉換,全面支援現代Web標準,您可以放心,IronPDF將始終如一地從HTML內容返回像素完美的PDF。
-
PDF文件轉換:需要將其他文件格式轉換為PDF? IronPDF支援許多不同文件格式的轉換,包括; DOCX到PDF、RTF到PDF、影像到PDF、URL到PDF,甚至PDF到HTML,同時保持所需的文件結構。
-
安全功能:借助IronPDF,您可以確保任何敏感的PDF文件都因其安全功能而得以保護。 使用IronPDF來加密您的PDF文件,設定密碼,並為您的PDF文件設定權限。
- PDF編輯功能:使用IronPDF,您可以輕鬆地編輯PDF文件。 IronPDF提供的編輯功能包括新增頁眉和頁腳、在PDF頁面上壓印文字和影像、向PDF新增自定義浮水印、處理PDF表單以及合併PDF文件。
有關IronPDF提供的功能的詳細資訊,請存取IronPDF Features。
PDFreactor功能
-
HTML到PDF轉換:PDFreactor Web服務專注於伺服器端的HTML到PDF轉換,通常用於動態資料驅動的文件(如發票、表單、報告等)的轉換以及複雜和高質量PDF的電子分發。
-
互動支援:由於支援JavaScript,PDFreactor支援嵌入互動元素,如按鈕和表單,這些元素在PDF中可以保留其功能。
- 高級版面設計:PDFreactor提供高級版面和設計功能,如對頁面佈局的控制、多列支援、向PDF新增元素、縮放和變換元素、新增頁眉和頁腳以及可自定義的頁面大小和方向。
選擇HTML到PDF程式庫時,對Bootstrap和現代CSS框架的支援是關鍵的考量。
從現代Web應用程式生成PDF時,Bootstrap和CSS框架支援是必不可少的。 能夠直接將Bootstrap風格的網頁轉換為PDF而無需修改程式碼,保證設計一致性並顯著減少開發時間。
IronPDF:完整的Bootstrap與CSS框架支援
- Bootstrap 5:完全的flexbox版面引擎、CSS Grid、實用類別和所有元件系統
- Bootstrap 4:完整的卡片元件、導覽元素、flex實用工具和響應斷點
- Tailwind CSS: 所有實用優先類別準確渲染於瀏覽器中
- Foundation:完整的網格系統和元件庫支援
- 現代CSS3:Flexbox,CSS Grid,自訂屬性,動畫,過渡和變換
實際驗證:IronPDF成功地渲染了Bootstrap首頁和所有官方範例,達到像素級準確度。
程式碼範例:訂單跟踪儀表板
using IronPdf;
// Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here";
var renderer = new ChromePdfRenderer();
string bootstrapTracking = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h1 class='mb-4'>Order Tracking - #ORD-2025-0428</h1>
<div class='row g-4 mb-4'>
<div class='col-md-4'>
<div class='card text-center bg-primary text-white h-100'>
<div class='card-body'>
<h3>Order Placed</h3>
<p class='mb-0'>April 20, 2025</p>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card text-center bg-info text-white h-100'>
<div class='card-body'>
<h3>Processing</h3>
<p class='mb-0'>April 21, 2025</p>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card text-center bg-light h-100'>
<div class='card-body'>
<h3 class='text-muted'>Delivered</h3>
<p class='mb-0 text-muted'>Est. April 25, 2025</p>
</div>
</div>
</div>
</div>
<div class='card shadow-sm mb-4'>
<div class='card-header bg-white'>
<h5 class='mb-0'>Shipping Timeline</h5>
</div>
<div class='card-body'>
<ul class='list-group list-group-flush'>
<li class='list-group-item d-flex'>
<span class='badge bg-success me-3'>✓</span>
<div class='flex-grow-1'>
<strong>Order Confirmed</strong>
<p class='mb-0 text-muted'>April 20, 2025 at 2:30 PM</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-success me-3'>✓</span>
<div class='flex-grow-1'>
<strong>Payment Processed</strong>
<p class='mb-0 text-muted'>April 20, 2025 at 2:35 PM</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-success me-3'>✓</span>
<div class='flex-grow-1'>
<strong>Order Shipped</strong>
<p class='mb-0 text-muted'>April 21, 2025 at 9:00 AM</p>
<small class='text-muted'>Tracking: TRK-9876543210</small>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-primary me-3'>→</span>
<div class='flex-grow-1'>
<strong>In Transit</strong>
<p class='mb-0 text-primary'>Currently en route to delivery location</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-secondary me-3'>○</span>
<div class='flex-grow-1'>
<strong>Out for Delivery</strong>
<p class='mb-0 text-muted'>Pending</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-secondary me-3'>○</span>
<div class='flex-grow-1'>
<strong>Delivered</strong>
<p class='mb-0 text-muted'>Est. April 25, 2025</p>
</div>
</li>
</ul>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Order Details</h5>
</div>
<div class='card-body'>
<div class='table-responsive'>
<table class='table mb-0'>
<thead class='table-light'>
<tr>
<th>Item</th>
<th>Quantity</th>
<th class='text-end'>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Premium Widget Pro</strong></td>
<td>2</td>
<td class='text-end'>$199.98</td>
</tr>
<tr>
<td><strong>Standard Gadget</strong></td>
<td>1</td>
<td class='text-end'>$49.99</td>
</tr>
<tr>
<td colspan='2'><strong>Subtotal</strong></td>
<td class='text-end'><strong>$249.97</strong></td>
</tr>
<tr>
<td colspan='2'>Shipping</td>
<td class='text-end'>$12.50</td>
</tr>
<tr class='table-primary'>
<td colspan='2'><strong>Total</strong></td>
<td class='text-end'><strong>$262.47</strong></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapTracking);
pdf.SaveAs("order-tracking.pdf");
using IronPdf;
// Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here";
var renderer = new ChromePdfRenderer();
string bootstrapTracking = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h1 class='mb-4'>Order Tracking - #ORD-2025-0428</h1>
<div class='row g-4 mb-4'>
<div class='col-md-4'>
<div class='card text-center bg-primary text-white h-100'>
<div class='card-body'>
<h3>Order Placed</h3>
<p class='mb-0'>April 20, 2025</p>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card text-center bg-info text-white h-100'>
<div class='card-body'>
<h3>Processing</h3>
<p class='mb-0'>April 21, 2025</p>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card text-center bg-light h-100'>
<div class='card-body'>
<h3 class='text-muted'>Delivered</h3>
<p class='mb-0 text-muted'>Est. April 25, 2025</p>
</div>
</div>
</div>
</div>
<div class='card shadow-sm mb-4'>
<div class='card-header bg-white'>
<h5 class='mb-0'>Shipping Timeline</h5>
</div>
<div class='card-body'>
<ul class='list-group list-group-flush'>
<li class='list-group-item d-flex'>
<span class='badge bg-success me-3'>✓</span>
<div class='flex-grow-1'>
<strong>Order Confirmed</strong>
<p class='mb-0 text-muted'>April 20, 2025 at 2:30 PM</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-success me-3'>✓</span>
<div class='flex-grow-1'>
<strong>Payment Processed</strong>
<p class='mb-0 text-muted'>April 20, 2025 at 2:35 PM</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-success me-3'>✓</span>
<div class='flex-grow-1'>
<strong>Order Shipped</strong>
<p class='mb-0 text-muted'>April 21, 2025 at 9:00 AM</p>
<small class='text-muted'>Tracking: TRK-9876543210</small>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-primary me-3'>→</span>
<div class='flex-grow-1'>
<strong>In Transit</strong>
<p class='mb-0 text-primary'>Currently en route to delivery location</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-secondary me-3'>○</span>
<div class='flex-grow-1'>
<strong>Out for Delivery</strong>
<p class='mb-0 text-muted'>Pending</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-secondary me-3'>○</span>
<div class='flex-grow-1'>
<strong>Delivered</strong>
<p class='mb-0 text-muted'>Est. April 25, 2025</p>
</div>
</li>
</ul>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Order Details</h5>
</div>
<div class='card-body'>
<div class='table-responsive'>
<table class='table mb-0'>
<thead class='table-light'>
<tr>
<th>Item</th>
<th>Quantity</th>
<th class='text-end'>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Premium Widget Pro</strong></td>
<td>2</td>
<td class='text-end'>$199.98</td>
</tr>
<tr>
<td><strong>Standard Gadget</strong></td>
<td>1</td>
<td class='text-end'>$49.99</td>
</tr>
<tr>
<td colspan='2'><strong>Subtotal</strong></td>
<td class='text-end'><strong>$249.97</strong></td>
</tr>
<tr>
<td colspan='2'>Shipping</td>
<td class='text-end'>$12.50</td>
</tr>
<tr class='table-primary'>
<td colspan='2'><strong>Total</strong></td>
<td class='text-end'><strong>$262.47</strong></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapTracking);
pdf.SaveAs("order-tracking.pdf");
Imports IronPdf
' Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here"
Dim renderer As New ChromePdfRenderer()
Dim bootstrapTracking As String = "
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h1 class='mb-4'>Order Tracking - #ORD-2025-0428</h1>
<div class='row g-4 mb-4'>
<div class='col-md-4'>
<div class='card text-center bg-primary text-white h-100'>
<div class='card-body'>
<h3>Order Placed</h3>
<p class='mb-0'>April 20, 2025</p>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card text-center bg-info text-white h-100'>
<div class='card-body'>
<h3>Processing</h3>
<p class='mb-0'>April 21, 2025</p>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card text-center bg-light h-100'>
<div class='card-body'>
<h3 class='text-muted'>Delivered</h3>
<p class='mb-0 text-muted'>Est. April 25, 2025</p>
</div>
</div>
</div>
</div>
<div class='card shadow-sm mb-4'>
<div class='card-header bg-white'>
<h5 class='mb-0'>Shipping Timeline</h5>
</div>
<div class='card-body'>
<ul class='list-group list-group-flush'>
<li class='list-group-item d-flex'>
<span class='badge bg-success me-3'>✓</span>
<div class='flex-grow-1'>
<strong>Order Confirmed</strong>
<p class='mb-0 text-muted'>April 20, 2025 at 2:30 PM</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-success me-3'>✓</span>
<div class='flex-grow-1'>
<strong>Payment Processed</strong>
<p class='mb-0 text-muted'>April 20, 2025 at 2:35 PM</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-success me-3'>✓</span>
<div class='flex-grow-1'>
<strong>Order Shipped</strong>
<p class='mb-0 text-muted'>April 21, 2025 at 9:00 AM</p>
<small class='text-muted'>Tracking: TRK-9876543210</small>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-primary me-3'>→</span>
<div class='flex-grow-1'>
<strong>In Transit</strong>
<p class='mb-0 text-primary'>Currently en route to delivery location</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-secondary me-3'>○</span>
<div class='flex-grow-1'>
<strong>Out for Delivery</strong>
<p class='mb-0 text-muted'>Pending</p>
</div>
</li>
<li class='list-group-item d-flex'>
<span class='badge bg-secondary me-3'>○</span>
<div class='flex-grow-1'>
<strong>Delivered</strong>
<p class='mb-0 text-muted'>Est. April 25, 2025</p>
</div>
</li>
</ul>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Order Details</h5>
</div>
<div class='card-body'>
<div class='table-responsive'>
<table class='table mb-0'>
<thead class='table-light'>
<tr>
<th>Item</th>
<th>Quantity</th>
<th class='text-end'>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Premium Widget Pro</strong></td>
<td>2</td>
<td class='text-end'>$199.98</td>
</tr>
<tr>
<td><strong>Standard Gadget</strong></td>
<td>1</td>
<td class='text-end'>$49.99</td>
</tr>
<tr>
<td colspan='2'><strong>Subtotal</strong></td>
<td class='text-end'><strong>$249.97</strong></td>
</tr>
<tr>
<td colspan='2'>Shipping</td>
<td class='text-end'>$12.50</td>
</tr>
<tr class='table-primary'>
<td colspan='2'><strong>Total</strong></td>
<td class='text-end'><strong>$262.47</strong></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapTracking)
pdf.SaveAs("order-tracking.pdf")
輸出:使用Bootstrap 5的網格系統、卡片元件、徽章、列表群組、響應式表格和flexbox佈局製作的專業訂單跟踪PDF,所有的顏色準確度和間距都完美無誤。
PDFreactor:良好的Bootstrap支援與Java依賴性
PDFreactor使用Prince XML引擎提供穩固的Bootstrap支援,但伴隨著架構考量:
- 良好的Bootstrap 4/5支援:Prince XML合理地處理現代框架
- Java需求:PDFreactor在Java上運行,增加了.NET應用程式的部署複雜性
- 基於伺服器的架構:需要專用的伺服器基礎架構
- 授權模型:按伺服器授權,而不是按開發者
開發影響:雖然PDFreactor有效地處理了Bootstrap,但Java依賴性和伺服器需求增加了.NET團隊的操作複雜性,需要額外的基礎架構管理和跨平台協調。
有關Bootstrap框架綜合指導和CSS3渲染能力的完整資訊,請參閱Bootstrap與Flexbox CSS指南。
IronPDF與PDFreactor之間的關鍵功能比較
現在,讓我們更深入地了解當您在處理PDF文件時可能面臨的一些常見用例。 在本節中,我們將這些用例取出並比較IronPDF與PDFreactor如何處理它們。
HTML到PDF轉換
IronPDF:
using IronPdf;
// Enable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: images, CSS and JavaScript.
// An optional BasePath 'c:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"c:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
using IronPdf;
// Enable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: images, CSS and JavaScript.
// An optional BasePath 'c:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"c:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
Imports IronPdf
' Enable local disk access or cross-origin requests
Installation.EnableWebSecurity = True
' Instantiate Renderer
Dim renderer = New ChromePdfRenderer()
' Create a PDF from an HTML string using C#
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
' Export to a file or Stream
pdf.SaveAs("output.pdf")
' Advanced Example with HTML Assets
' Load external html assets: images, CSS and JavaScript.
' An optional BasePath 'c:\site\assets\' is set as the file location to load assets from
Dim myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", "c:\site\assets\")
myAdvancedPdf.SaveAs("html-with-assets.pdf")
PDFreactor:
using System.IO;
using RealObjects.PDFreactor.Webservice.Client;
PDFreactor pdfReactor = new PDFreactor("https://cloud.pdfreactor.com/service/rest") {
Timeout = 0
};
var config = new Configuration
{
Document = "http://www.pdfreactor.com/product/samples/textbook/textbook.html"
};
Result data = pdfReactor.Convert(config);
BinaryWriter binWriter = new BinaryWriter(new FileStream("test.pdf",
FileMode.Create,
FileAccess.Write));
binWriter.Write(data.Document);
binWriter.Close();
using System.IO;
using RealObjects.PDFreactor.Webservice.Client;
PDFreactor pdfReactor = new PDFreactor("https://cloud.pdfreactor.com/service/rest") {
Timeout = 0
};
var config = new Configuration
{
Document = "http://www.pdfreactor.com/product/samples/textbook/textbook.html"
};
Result data = pdfReactor.Convert(config);
BinaryWriter binWriter = new BinaryWriter(new FileStream("test.pdf",
FileMode.Create,
FileAccess.Write));
binWriter.Write(data.Document);
binWriter.Close();
Imports System.IO
Imports RealObjects.PDFreactor.Webservice.Client
Private pdfReactor As New PDFreactor("https://cloud.pdfreactor.com/service/rest") With {.Timeout = 0}
Private config = New Configuration With {.Document = "http://www.pdfreactor.com/product/samples/textbook/textbook.html"}
Private data As Result = pdfReactor.Convert(config)
Private binWriter As New BinaryWriter(New FileStream("test.pdf", FileMode.Create, FileAccess.Write))
binWriter.Write(data.Document)
binWriter.Close()
IronPDF得益於其ChromePdfRenderer的使用及其對現代網頁標準的支援,提供了高保真的PDF文件。 使用 IronPDF 進行 HTML 到 PDF 轉換 時,您將能夠從 HTML 文件、網頁等建立像素完美的 PDF。 當然,PDFreactor以其HTML到PDF的轉換能力而自豪,並提供高質量的PDF文件,但它採用的是更具手動性的方式,需要更多的程式碼行。
有關使用 IronPDF 進行 HTML 到 PDF 轉換的更多範例,請存取 IronPDF HTML 至 PDF。
加密 PDF 文件
IronPDF:
using IronPdf;
using System;
// Open an Encrypted File, alternatively create a new PDF from Html
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");
// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;
// Edit file security settings
// The following code makes a PDF read only and will disallow copy & paste and printing
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
using IronPdf;
using System;
// Open an Encrypted File, alternatively create a new PDF from Html
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");
// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;
// Edit file security settings
// The following code makes a PDF read only and will disallow copy & paste and printing
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
Imports IronPdf
Imports System
' Open an Encrypted File, alternatively create a new PDF from Html
Private pdf = PdfDocument.FromFile("encrypted.pdf", "password")
' Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto"
pdf.MetaData.Keywords = "SEO, Friendly"
pdf.MetaData.ModifiedDate = DateTime.Now
' Edit file security settings
' The following code makes a PDF read only and will disallow copy & paste and printing
pdf.SecuritySettings.RemovePasswordsAndEncryption()
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key")
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserFormData = False
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights
' Change or set the document encryption password
pdf.Password = "my-password"
pdf.SaveAs("secured.pdf")
PDFreactor:
由於PDFreactor主要被稱為HTML到PDF的轉換工具,它不提供內建的PDF加密支援。
IronPDF以清晰的C#方法簡化了PDF加密,並提供了一個直接但功能強大的工具,供您加密PDF。 使用IronPDF,您將完全控制整個過程,甚至到設置安全設置。 而使用PDFreactor,您需要找到第三方程式庫來處理PDF加密任務,因為PDFreactor目前不支援。
更多加密範例,請存取IronPDF的相關如何指導。
編輯PDF內容
IronPDF:
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("novel.pdf");
// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");
pdf.SaveAs("redacted.pdf");
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("novel.pdf");
// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");
pdf.SaveAs("redacted.pdf");
Imports IronPdf
Private pdf As PdfDocument = PdfDocument.FromFile("novel.pdf")
' Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are")
pdf.SaveAs("redacted.pdf")
PDFreactor:
PDFreactor不直接支援修訂,因其功能集更傾向於從HTML內容生成和設計這些PDF文件。
IronPDF為您提供簡潔且易於使用的修訂工具,讓您只需幾行程式碼即可在PDF文件中修訂內容。 然而,PDFreactor不提供任何內建的修訂工具。
簽署PDF
IronPDF:
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");
// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
// Create PdfSignature object
var sig = new PdfSignature(cert);
// Sign PDF document
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");
// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
// Create PdfSignature object
var sig = new PdfSignature(cert);
// Sign PDF document
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>foo</h1>")
' Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
Private cert As New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)
' Create PdfSignature object
Private sig = New PdfSignature(cert)
' Sign PDF document
pdf.Sign(sig)
pdf.SaveAs("signed.pdf")
PDFreactor:
PDFreactor不直接支援電子簽名。
IronPDF的數位簽名功能為您提供一個自動簽署PDF的簡單方法。 而PDFreactor不提供任何支援來將電子簽名應用於您的PDF文件。
欲了解更多有關如何將數位簽名應用於PDF文件,請存取IronPDF的相關如何指導。
將浮水印應用到 PDF 頁面
IronPDF:
using IronPdf;
// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
using IronPdf;
// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
Imports IronPdf
' Stamps a Watermark onto a new or existing PDF
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/")
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center)
pdf.SaveAs("C:\Path\To\Watermarked.pdf")
PDFreactor:
PDFreactor不直接支援水印。
IronPDF內建的水印工具利用HTML和CSS,為您的PDF頁面應用水印提供了簡單的方法,同時讓您完全控制整個過程,只需幾行程式碼即可完成。
想看看更多IronPDF的水印工具嗎? 請參閱我們有用的相關指南!
在PDF文件上蓋章圖像和文字
IronPDF:
using IronPdf;
using IronPdf.Editing;
using System;
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");
// Create text stamper
TextStamper textStamper = new TextStamper()
{
Text = "Text Stamper!",
FontFamily = "Bungee Spice",
UseGoogleFont = true,
FontSize = 30,
IsBold = true,
IsItalic = true,
VerticalAlignment = VerticalAlignment.Top,
};
// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");
// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("/img/svgs/iron-pdf-logo.svg"))
{
VerticalAlignment = VerticalAlignment.Top,
};
// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
using IronPdf;
using IronPdf.Editing;
using System;
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");
// Create text stamper
TextStamper textStamper = new TextStamper()
{
Text = "Text Stamper!",
FontFamily = "Bungee Spice",
UseGoogleFont = true,
FontSize = 30,
IsBold = true,
IsItalic = true,
VerticalAlignment = VerticalAlignment.Top,
};
// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");
// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("/img/svgs/iron-pdf-logo.svg"))
{
VerticalAlignment = VerticalAlignment.Top,
};
// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
Imports IronPdf
Imports IronPdf.Editing
Imports System
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>")
' Create text stamper
Private textStamper As New TextStamper() With {
.Text = "Text Stamper!",
.FontFamily = "Bungee Spice",
.UseGoogleFont = True,
.FontSize = 30,
.IsBold = True,
.IsItalic = True,
.VerticalAlignment = VerticalAlignment.Top
}
' Stamp the text stamper
pdf.ApplyStamp(textStamper)
pdf.SaveAs("stampText.pdf")
' Create image stamper
Dim imageStamper As New ImageStamper(New Uri("/img/svgs/iron-pdf-logo.svg")) With {.VerticalAlignment = VerticalAlignment.Top}
' Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0)
pdf.SaveAs("stampImage.pdf")
PDFreactor:
PDFreactor不直接支援蓋章
IronPDF提供了一個強大的工具來將文字和圖像蓋章到您的PDF文件上。 其方式與HTML和CSS相似,您將對蓋章過程有完全的控制。 然而,PDFreactor不提供任何內建的蓋章工具。
如果您想了解更多有關IronPDF的圖像和文字蓋章工具,請務必存取我們的相關指南。
DOCX到PDF轉換
IronPDF:
using IronPdf;
// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();
// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");
// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
using IronPdf;
// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();
// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");
// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
Imports IronPdf
' Instantiate Renderer
Private renderer As New DocxToPdfRenderer()
' Render from DOCX file
Private pdf As PdfDocument = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx")
' Save the PDF
pdf.SaveAs("pdfFromDocx.pdf")
PDFreactor:
PDFreactor不支援直接將DOCX轉換為PDF,因其主要關注HTML到PDF的轉換。
使用IronPDF,您可以使用其簡潔、易用的DOCX轉換工具轉換您的DOCX文件。 使用PDFreactor時,您需要安裝一個DOCX到PDF的轉換程式庫來處理轉換,因為PDFreactor不支援這種轉換。
如需更詳細了解IronPDF的DOCX到PDF轉換工具,請存取有用的相關指南。
功能比較總結

欲查看詳細程式碼範例,請存取IronPDF程式碼範例頁面。
定價與授權:IronPDF vs. PDFreactor
IronPDF
IronPDF 有不同的等級和額外功能來購買許可證。 開發者也可以購買Iron Suite,這將使您以兩個產品的價格獲得Iron Software的所有產品。 如果您還沒準備好購買許可證,IronPDF 提供持續 30 天的免費試用。
- 永久授權:提供一系列永久授權,具體取決於您的團隊規模、專案需求和地點數量。 每種授權型別都附有電子郵件支援。
- Lite License:此授權的費用為$999,支援一個開發者、一個地點和一個專案。
- Plus License:支援三個開發者、三個地點和三個專案,這是從輕量授權升級到下一步的選擇,費用為$1,499。 Plus授權除了基本的電子郵件支援外,還提供聊天支援和電話支援。
- Professional License:此授權適合較大的團隊,支援十個開發者、十個地點和十個專案,費用為$2,399。 它提供與上一層級相同的聯絡支援渠道,但也提供螢幕共享支援。
- 免版稅再分發:IronPDF授權還提供免版稅再分發的保障,額外費用為$2,399
- 不間斷產品支援:IronPDF提供持續的產品更新、安全功能升級、及來自其工程團隊的支援,費用為每年$2,399,享有5年保障。
- Iron Suite:費用為$2,998,您可以獲得所有Iron Software產品,包括IronPDF、IronOCR、IronWord、IronXL、IronBarcode、IronQR、IronZIP、IronPrint和IronWebscraper。

PDFreactor
-
CPU License:這是PDFreactor的基礎費用,價格為$2,950,最多支援4個CPU程式碼,並包含第一年的支援和維護。
- 附加:除了其授權外,PDFreactor還提供附加,如; 點陣影像輸出附加、一年支援和維護的延展,以及CPU授權升級。
文件和支援:IronPDF vs. PDFreactor
IronPDF
IronPDF在提供廣泛的文件和支援方面表現出色:
- 全面的文件:涵蓋所有功能的廣泛且使用者友好型文件。
- 24/5支持:提供活躍的工程師支援。
- 影片教程:提供循序漸進的YouTube影片指南。
- 社區論壇:活躍的社區以提供額外支持。
- 定期更新:每月產品更新以確保最新功能和安全補丁。
欲了解更多資訊,請查看IronPDF的詳盡文件,並存取Iron Software YouTube Channel。
PDFreactor
- 詳細文件:涵蓋HTML到PDF轉換的所有方面。
- 電子郵件支援:可供技術和授權問題的查詢。
- 社群論壇:與其他使用者和開發者互動。
- 知識庫:可以存取文章和疑難解答指南。
- 專業服務:提供對複雜實現的付費支援。
結論
在HTML到PDF轉換方面,IronPDF和PDFreactor均為強大競爭者,二者都完全有能力從HTML內容建立PDF文件。 然而,如果您尋找一款能夠處理更多複雜任務的PDF工具,如加密、水印和轉換其他型別文件到PDF,IronPDF是您的最佳選擇。
憑藉其豐富的功能集,與現代.NET框架的相容性,及優秀的支援,IronPDF是一款值得您擁有的強大工具。 PDFreactor雖然在其利基市場中頗有實力,但缺乏IronPDF所提供的一些高級功能和靈活性。
您可以嘗試30天免費試用來查看他們提供的功能。
常見問題
如何在C#中將HTML轉換為PDF?
您可以使用IronPDF的RenderHtmlAsPdf方法將HTML字串轉換成PDF。也可以使用RenderHtmlFileAsPdf將HTML文件轉換為PDF。
IronPDF和PDFreactor之間的主要差異是什麼?
IronPDF提供了廣泛的功能,如PDF生成、編輯、簽署和加密,以及對HTML、CSS、JavaScript和各種圖像格式的強大支援。PDFreactor專注於高品質的HTML到PDF轉換,擅長處理複雜的CSS和JavaScript以製作適合列印的PDF。
IronPDF可以用在多個平台上嗎?
是的,IronPDF支援多個平台,包括Windows、Linux、macOS、Docker、Azure和AWS。它與各種.NET版本相容,如.NET Core、.NET Standard和.NET Framework。
IronPDF可以為PDF文件新增數位簽名嗎?
是的,IronPDF提供了一種簡單的方法來使用其數位簽名功能對PDF進行數位簽名。
支持IronPDF使用者的選項有哪些?
IronPDF提供了全面的支援,包括廣泛的文件說明、24/5工程師支援、影片教程、社區論壇和定期更新以協助使用者。
IronPDF提供哪些型別的授權?
IronPDF提供了各種授權選項,包括永久授權和套件選項,以及電子郵件支援和免版稅再分發等優勢。
IronPDF如何處理PDF中的複雜CSS和JavaScript?
IronPDF支援PDF中的複雜CSS和JavaScript,非常適合生成具有複雜設計和互動元素的網頁文件。
使用IronPDF是否可以加密PDF文件?
是的,IronPDF提供內建的PDF加密支援,讓您可以使用強密碼保護來保障您的文件安全。
除了HTML之外,IronPDF具有哪些轉換能力?
IronPDF支援將各種文件格式轉換為PDF,如DOCX、RTF和圖像,同時保持所需的文件結構。
IronPDF可以對PDF文件加上浮水印和印章嗎?
是的,IronPDF允許使用者使用HTML和CSS將浮水印和印章新增到PDF文件上,完全控制其外觀。



