IronPDF vs PDFShift:C# HTML 到 PDF API 比較
IronPDF 提供可靠的本地 C# 程式庫,永久授權從 $999 起,而 PDFShift 提供按次計費的雲端 API。 對於每月處理超過 500 份 PDF 的初創公司而言,IronPDF 更具成本效益,提供更好的資料隱私和脫機功能。
可攜式文件格式 (PDF) 是用於在單一文件中表示文字、連結、圖形等內容的標準。 在 C# 中操控 PDF 需要專門的.NET 應用程式的 PDF 程式庫。 本文比較兩種不同的 API 用於 PDF 生成,分析它們的性能、功能和授權。 建立 .NET 應用程式時,開發者需要具有處理複雜 HTML 佈局的PDF 生成能力,CSS 樣式和 JavaScript 呈現。
討論的 PDF API 包括:
- IronPDF
- PDFShift
什麼是IronPDF?
IronPDF 是一個完整的HTML 到 PDF 轉換的 API,專為 .NET 和 .NET Core 開發而設計。 該程式庫能夠轉換 HTML 網站,並提供廣泛的 PDF 操控功能。 IronPDF 使開發者能夠在 .NET 環境中建立、修改和從 PDF 文件中提取內容。 該程式庫簡化了從 HTML 頁面生成 PDF,並支持 MVC 應用程式的CSHTML 到 PDF 轉換和Razor 頁面。
PDF 可以被編輯、蓋章,並通過標題和頁腳得到改進。 該程式庫簡化了閱讀 PDF 文字和提取影像。 IronPDF 使用一個適用於 HTML 到 PDF 呈現的.NET Chromium 引擎。 此引擎保證了像素完美渲染,並支持包括JavaScript 到 PDF 轉換的現代網頁技術。 Chrome 渲染引擎的里程碑標誌著渲染準確性和性能優化的一個重要進步。
IronPDF 提供什麼功能?
有哪些 PDF 轉換選項可用?
Create PDFs from HTML, HTML Strings, MVC views, Web Forms, and URLs. Also supports Markdown, XML, and RTF conversions. 轉換功能包括DOCX 到 PDF 和影像到 PDF 轉換。 對於網路應用程式,IronPDF 處理ASPX 頁面轉換並支持無頭 CSHTML 呈現。
PDF 影像處理如何運作?
從 PDF 建立影像和從影像建立 PDF。 包括影像提取、多種格式和PDF 列印。 支持SVG 圖形和Azure Blob Storage 影像。 該程式庫處理多幀 TIFF 轉換,並提供高品質的 PDF 到影像轉換。 對於記憶體高效的處理,請使用帶有 MemoryStream 的光柵化。
包含哪些檔案 I/O 功能?
IronPDF 提供128 位元加密、密碼保護和數位簽名。 包括HSM 簽名和PDF/A 標準合規。 PDF/A 里程碑擴大了對包含PDF/A-3 和 ZUGFeRD在內的歸檔格式的支持。 其他安全功能包括清理 PDF和管理修訂歷史。
我如何編輯 PDF?
IronPDF 提供浮水印、頁面管理、背景、前景和完整的PDF 操控。 包括繪畫、批註 和表單管理。 進階編輯包括文字替換、塗黑 和改變 PDF 頁面。 PDFium DOM 里程碑改善了對複雜 PDF 結構的處理。
我如何從 PDF 中提取內容?
直接從 PDF 提取嵌入文字。 對於影像嵌入文字,請使用 IronOCR。 PDF DOM 物件提供程式化的 PDF 結構存取。 進階提取包括閱讀 PDF 文字和管理字型。 對於文字分析,請使用 OpenAI 整合以進行智慧文件處理。
標頭和頁腳如何運作?
標頭和頁腳可以在建立過程中或向現有的 PDF 新增。 支持動態文字和 HTML 標頭與頁碼。 進階選項包括在特定頁面上新增標頭和管理頁面斷行。 渲染選項提供對佈局和紙張尺寸的精細控制。
有哪些平台相容?
IronPDF 支持 C# 相容的作業系統和框架:
- Windows and Windows Server
- Linux 發行版
- macOS Intel and Apple Silicon
- .NET Core 2.1+, .NET 6 & 5
- .NET Standard 2.0 相容性
- Microsoft Azure and Azure Functions
- AWS and AWS Lambda
- Docker containers
- Android and Blazor
相容性里程碑擴展了平台支持。 有關部署指導,請參見 IronPDF 和 IIS 和 部署問題排除。
什麼是 PDFShift?
PDFShift 是一個 HTML 到 PDF 轉換 API,通過雲端服務提供快速轉換。 該 API 提供並行轉換、非同步查詢、原始 HTML 支持等。 PDFShift 支持 Ruby、Python、JavaScript、Node 和 PHP。對於VB.NET 或 F# 開發者,IronPDF 提供原生支持,而 PDFShift 需要 HTTP 整合。 要與其他雲端服務進行比較,請參閱 Aspose 與 IronPDF 和 Syncfusion 與 IronPDF。
PDFShift 能夠實現自定義標頭/頁腳、CSS 應用和文件加密。 然而,該服務缺少PDF 壓縮、線性化或PDF/UA 合規等進階操控功能。 對於企業需求,請查看安全 CVE 披露和Kerberos 認證。
PDFShift 提供什麼功能?
平行轉換如何運作?
PDFShift 支持平行轉換以進行同時文件處理。 有關類似功能,請參見 IronPDF 的非同步和多執行緒指南。 IronPDF 提供平行 PDF 生成範例和多執行緒生成,並附有性能基準。 異步範例演示了批處理優化。
有哪些標頭和頁腳選項可用?
可以使用頁碼和 CSS/JavaScript 建立自定義標頭/頁腳。 IronPDF 提供包括重複表格標頭和自定義 HTML 標頭的進階選項。 傳統的文字標頭提供簡單的實現,而HTML 標頭使得複雜佈局成為可能。 對於動態內容,請使用JavaScript 訊息監聽器。
我可以轉換原始 HTML 而不公開頁面嗎?
PDFShift 轉換原始 HTML 而無需公開頁面。 IronPDF 提供類似的功能,具有基礎 URL 配置和DataURI 嵌入。 嵌入影像 base64 範例顯示自含式 HTML 轉換。 為了進行安全轉換,使用自定義日誌和HTTP 請求標頭。
PDF 的質量如何?
PDFShift 快速建立高保真 PDF。 IronPDF 的Chrome 渲染引擎生成與瀏覽器輸出匹配的像素完美 PDF。 像素完美教程解釋了質量優化。 對於具體需求,配置視口設置和渲染延遲。
非同步請求如何工作?
簡單整合的轉換完成即時通知。 IronPDF 提供完整非同步支援與批處理範例。 異步 PDF 生成範例顯示性能改進。 對於大規模處理,請參見記憶體管理和性能協助。
如何在Visual Studio中建立新專案?
打開 Visual Studio 並選擇檔案 > 新專案 > 控制台應用程式。 此範例使用控制台應用。 有關設置說明,請參見安裝概述和快速入門指南。 其他專案範本包括Blazor 教程和MAUI PDF 瀏覽。 對於排除設置問題,請參見快速故障排除指南。
輸入專案名稱和路徑。 點擊建立。 選擇所需的 .NET Framework:
Visual Studio 生成應用結構並打開 program.cs 以進行程式碼輸入:
如何安裝IronPDF程式庫?
以四種方式安裝 IronPDF:
- Visual Studio NuGet 包管理器
- Visual Studio 命令行
- 從 NuGet 直接下載
- 從 IronPDF 直接下載
對於替代方法,請參見Windows 安裝指南或高級 NuGet 安裝。 平台特定指南包括Linux 設置、macOS 安裝和Docker 部署。 對於大小受限的環境,使用IronPDF Slim。
如何使用 Visual Studio NuGet 包管理器?
Visual Studio 提供NuGet 包管理器進行直接安裝:
在包管理器中搜尋 "IronPDF":
選擇 IronPDF 並安裝包。 對於小型部署,請考慮IronPDF Slim。 若遇到問題,請參見無法部署 NuGet 包和部署異常。
如何使用 Visual Studio 命令行?
Go to Tools > NuGet Package Manager > Package Manager Console:
在控制台中輸入:
Install-Package IronPdf
包下載並安裝。 對於平台特定安裝,請參見Linux,macOS,或Docker 部署。 對於相依錯誤,請檢查Chrome 相依性和Pdfium 相依性。
我可以直接從 NuGet 網頁下載嗎?
直接下載 NuGet 包:
- 瀏覽到 NuGet IronPDF 頁面
- 選擇下載包
- 雙擊自動安裝
- 重新載入方案
有關包管理,請參見IronPDF 運行時文件夾指南。 如果遇到版本衝突,請查看程式集版本不匹配和ClickOnce 相容性。
我可以直接從 IronPDF 網頁下載嗎?
從 IronPDF 下載頁下載。 下載後:
- 在方案窗口中右擊專案
- 選擇參照並瀏覽到文件
- 點擊OK
有關授權設置,請參見使用授權金鑰和應用授權。 其他配置選項包括在 Web.config 中設置授權 和管理授權擴展。
PDFShift 有何運作方式?
PDFShift 通過 API 遠程操作。 使用 C# RestClient 提交 POST 請求並進行 API 金鑰認證。 伺服器處理請求並通過 HTTP 返回 PDF。對於本地處理,IronPDF 的原生引擎提供更好的性能和安全性。 與原生引擎與遠程引擎選項比較。 對於 API 替代方案,請查看Apryse 與 IronPDF和iText 與 IronPDF。
我如何將 HTML 轉換為 PDF?
兩個工具都提供HTML 轉換,方法不同。 IronPDF 提供包括HTML ZIP 文件和自定義渲染等擴展選項。 建立 PDF 教程涵蓋完整的生成方法。 對於進階場景,探索JavaScript 渲染和響應式 CSS 處理。
如何使用 IronPDF 從 URL 建立 PDF?
從 URL 建立 PDF 只需三行。 此程式碼範例顯示了 IronPDF 如何允許開發人員實現URL 到 PDF 轉換:
using IronPdf;
var Renderer = new IronPdf.ChromePdfRenderer();
// Configure render options for better results
Renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
Renderer.RenderingOptions.MarginTop = 25;
Renderer.RenderingOptions.MarginBottom = 25;
// Create a PDF from a URL or local file path
using var pdf = Renderer.RenderUrlAsPdf("___PROTECTED_URL_68___");
// Export to a file or Stream
pdf.SaveAs("url.pdf");
using IronPdf;
var Renderer = new IronPdf.ChromePdfRenderer();
// Configure render options for better results
Renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
Renderer.RenderingOptions.MarginTop = 25;
Renderer.RenderingOptions.MarginBottom = 25;
// Create a PDF from a URL or local file path
using var pdf = Renderer.RenderUrlAsPdf("___PROTECTED_URL_68___");
// Export to a file or Stream
pdf.SaveAs("url.pdf");
Imports IronPdf
Dim Renderer = New IronPdf.ChromePdfRenderer()
' Configure render options for better results
Renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4
Renderer.RenderingOptions.MarginTop = 25
Renderer.RenderingOptions.MarginBottom = 25
' Create a PDF from a URL or local file path
Using pdf = Renderer.RenderUrlAsPdf("___PROTECTED_URL_68___")
' Export to a file or Stream
pdf.SaveAs("url.pdf")
End Using
對於帶驗證的頁面,請參見TLS 網站登錄。 對於 JavaScript 網站,使用WaitFor 延遲和自定義 JavaScript。 進階選項包括渲染延遲和JavaScript 到 PDF 轉換。 對於性能優化,請參見初始渲染緩慢解決方案。
輸出:
如何使用 IronPDF 將 HTML 轉換為 PDF?
using IronPdf;
var pdf = new ChromePdfRenderer();
// Add custom CSS for better formatting
pdf.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
pdf.RenderingOptions.EnableJavaScript = true;
// Include web fonts and icons
pdf.RenderingOptions.WaitFor.FontsLoaded();
PdfDocument doc = pdf.RenderHtmlAsPdf("<h1>This is a heading</h1>");
doc.SaveAs("FirstPDFDocument.pdf");
using IronPdf;
var pdf = new ChromePdfRenderer();
// Add custom CSS for better formatting
pdf.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
pdf.RenderingOptions.EnableJavaScript = true;
// Include web fonts and icons
pdf.RenderingOptions.WaitFor.FontsLoaded();
PdfDocument doc = pdf.RenderHtmlAsPdf("<h1>This is a heading</h1>");
doc.SaveAs("FirstPDFDocument.pdf");
Imports IronPdf
Dim pdf = New ChromePdfRenderer()
' Add custom CSS for better formatting
pdf.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
pdf.RenderingOptions.EnableJavaScript = True
' Include web fonts and icons
pdf.RenderingOptions.WaitFor.FontsLoaded()
Dim doc As PdfDocument = pdf.RenderHtmlAsPdf("<h1>This is a heading</h1>")
doc.SaveAs("FirstPDFDocument.pdf")
對於複雜的 HTML,使用基礎 URL來設置相對路徑。 新增網頁字型和圖標以提高排版效果。 額外的格式選項包括自定義字型和國際語言。 對於字型除錯,請參見字型管理和字型字間距問題。
如何使用 PDFShift 從 URL 建立 PDF?
using PDFShift 轉換 URL 需要 POST 請求:
using System;
using RestSharp;
using RestSharp.Authenticators;
using System.IO;
namespace PDFShiftExample
{
class Program
{
static void Main(string[] args)
{
var client = new RestClient("___PROTECTED_URL_69___");
client.Authenticator = new HttpBasicAuthenticator("api", "your_api_key");
var request = new RestRequest(Method.POST);
var json = new
{
source = "___PROTECTED_URL_70___",
// Additional options
landscape = false,
use_print = false
};
request.AddJsonBody(json);
var response = client.Execute(request);
if (!response.IsSuccessful)
{
// Handle the unsuccessful response
Console.WriteLine($"Error: {response.StatusCode} - {response.ErrorMessage}");
}
else
{
File.WriteAllBytes("result.pdf", response.RawBytes);
}
}
}
}
using System;
using RestSharp;
using RestSharp.Authenticators;
using System.IO;
namespace PDFShiftExample
{
class Program
{
static void Main(string[] args)
{
var client = new RestClient("___PROTECTED_URL_69___");
client.Authenticator = new HttpBasicAuthenticator("api", "your_api_key");
var request = new RestRequest(Method.POST);
var json = new
{
source = "___PROTECTED_URL_70___",
// Additional options
landscape = false,
use_print = false
};
request.AddJsonBody(json);
var response = client.Execute(request);
if (!response.IsSuccessful)
{
// Handle the unsuccessful response
Console.WriteLine($"Error: {response.StatusCode} - {response.ErrorMessage}");
}
else
{
File.WriteAllBytes("result.pdf", response.RawBytes);
}
}
}
}
Imports System
Imports RestSharp
Imports RestSharp.Authenticators
Imports System.IO
Namespace PDFShiftExample
Module Program
Sub Main(args As String())
Dim client = New RestClient("___PROTECTED_URL_69___")
client.Authenticator = New HttpBasicAuthenticator("api", "your_api_key")
Dim request = New RestRequest(Method.POST)
Dim json = New With {
.source = "___PROTECTED_URL_70___",
.landscape = False,
.use_print = False
}
request.AddJsonBody(json)
Dim response = client.Execute(request)
If Not response.IsSuccessful Then
' Handle the unsuccessful response
Console.WriteLine($"Error: {response.StatusCode} - {response.ErrorMessage}")
Else
File.WriteAllBytes("result.pdf", response.RawBytes)
End If
End Sub
End Module
End Namespace
如何使用 PDFShift 將 HTML 轉換為 PDF?
PDFShift 提供 HTML 到 PDF 轉換:
using System;
using System.IO;
using RestSharp;
using RestSharp.Authenticators;
namespace PDFShiftExample
{
class Program
{
static void Main(string[] args)
{
var client = new RestClient("___PROTECTED_URL_71___");
client.Authenticator = new HttpBasicAuthenticator("api", "your_api_key");
var request = new RestRequest(Method.POST);
string documentContent = File.ReadAllText("document.html");
var json = new
{
source = documentContent,
// Additional formatting options
margin = "20px",
format = "A4"
};
request.AddJsonBody(json);
var response = client.Execute(request);
if (!response.IsSuccessful)
{
// Handle the unsuccessful response
Console.WriteLine($"Error: {response.StatusCode}");
}
else
{
File.WriteAllBytes("result.pdf", response.RawBytes);
}
}
}
}
using System;
using System.IO;
using RestSharp;
using RestSharp.Authenticators;
namespace PDFShiftExample
{
class Program
{
static void Main(string[] args)
{
var client = new RestClient("___PROTECTED_URL_71___");
client.Authenticator = new HttpBasicAuthenticator("api", "your_api_key");
var request = new RestRequest(Method.POST);
string documentContent = File.ReadAllText("document.html");
var json = new
{
source = documentContent,
// Additional formatting options
margin = "20px",
format = "A4"
};
request.AddJsonBody(json);
var response = client.Execute(request);
if (!response.IsSuccessful)
{
// Handle the unsuccessful response
Console.WriteLine($"Error: {response.StatusCode}");
}
else
{
File.WriteAllBytes("result.pdf", response.RawBytes);
}
}
}
}
Imports System
Imports System.IO
Imports RestSharp
Imports RestSharp.Authenticators
Module PDFShiftExample
Sub Main()
Dim client = New RestClient("___PROTECTED_URL_71___")
client.Authenticator = New HttpBasicAuthenticator("api", "your_api_key")
Dim request = New RestRequest(Method.POST)
Dim documentContent As String = File.ReadAllText("document.html")
Dim json = New With {
.source = documentContent,
.margin = "20px",
.format = "A4"
}
request.AddJsonBody(json)
Dim response = client.Execute(request)
If Not response.IsSuccessful Then
' Handle the unsuccessful response
Console.WriteLine($"Error: {response.StatusCode}")
Else
File.WriteAllBytes("result.pdf", response.RawBytes)
End If
End Sub
End Module
如何新增自定義標頭和頁腳?
標頭和頁腳通過在頁面上提供一致的資訊來改善 PDF 文件。 IronPDF 和 PDFShift 都支持此功能。 對於進階場景,請參考向頁面新增標頭和頁面中斷控制。 頁碼和頁面中斷範例顯示了完整的實現。 對於佈局控制,請探索自定義邊距和PDF 頁面方向。
如何使用 IronPDF 新增標頭和頁腳?
IronPDF 提供兩種方法來實現標頭和頁腳:
TextHeaderFooter:此方法使用基於文字的標頭,帶有動態資料。
HtmlHeaderFooter:此方法允許使用模板生成的 HTML 標頭和頁腳。
using IronPdf;
var Renderer = new IronPdf.ChromePdfRenderer();
// Configure text header with merge fields
Renderer.RenderingOptions.FirstPageNumber = 1; // use 2 if a cover page will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
Renderer.RenderingOptions.TextHeader.CenterText = "{url}";
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica;
Renderer.RenderingOptions.TextHeader.FontSize = 12;
// Add HTML footer with page numbers
Renderer.RenderingOptions.HtmlFooter = new IronPdf.HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages}</div>",
Height = 25,
DrawDividerLine = true
};
// Apply custom margins
Renderer.RenderingOptions.MarginTop = 40;
Renderer.RenderingOptions.MarginBottom = 40;
var pdf = Renderer.RenderHtmlAsPdf("<h1>Document with Headers</h1>");
pdf.SaveAs("headers-footers.pdf");
using IronPdf;
var Renderer = new IronPdf.ChromePdfRenderer();
// Configure text header with merge fields
Renderer.RenderingOptions.FirstPageNumber = 1; // use 2 if a cover page will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
Renderer.RenderingOptions.TextHeader.CenterText = "{url}";
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica;
Renderer.RenderingOptions.TextHeader.FontSize = 12;
// Add HTML footer with page numbers
Renderer.RenderingOptions.HtmlFooter = new IronPdf.HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages}</div>",
Height = 25,
DrawDividerLine = true
};
// Apply custom margins
Renderer.RenderingOptions.MarginTop = 40;
Renderer.RenderingOptions.MarginBottom = 40;
var pdf = Renderer.RenderHtmlAsPdf("<h1>Document with Headers</h1>");
pdf.SaveAs("headers-footers.pdf");
Imports IronPdf
Dim Renderer = New IronPdf.ChromePdfRenderer()
' Configure text header with merge fields
Renderer.RenderingOptions.FirstPageNumber = 1 ' use 2 if a cover page will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = True
Renderer.RenderingOptions.TextHeader.CenterText = "{url}"
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica
Renderer.RenderingOptions.TextHeader.FontSize = 12
' Add HTML footer with page numbers
Renderer.RenderingOptions.HtmlFooter = New IronPdf.HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages}</div>",
.Height = 25,
.DrawDividerLine = True
}
' Apply custom margins
Renderer.RenderingOptions.MarginTop = 40
Renderer.RenderingOptions.MarginBottom = 40
Dim pdf = Renderer.RenderHtmlAsPdf("<h1>Document with Headers</h1>")
pdf.SaveAs("headers-footers.pdf")
如何使用PDFShift新增頁眉和頁腳?
PDFShift允許客製化文件的頁眉和頁腳以進行識別或品牌化:
using System;
using RestSharp;
using RestSharp.Authenticators;
using System.IO;
namespace PDFShiftExample
{
class Program
{
static void Main(string[] args)
{
var client = new RestClient("___PROTECTED_URL_72___");
client.Authenticator = new HttpBasicAuthenticator("api", "your_api_key");
var request = new RestRequest(Method.POST);
var json = new
{
source = "___PROTECTED_URL_73___",
footer = new {
source = "<div style=\"font-size: 12px\">Page {{page}} of {{total}}</div>",
spacing = "50px"
},
header = new {
source = "<div>Company Name</div>",
spacing = "30px"
}
};
request.AddJsonBody(json);
var response = client.Execute(request);
if (!response.IsSuccessful)
{
// Handle the unsuccessful response
}
else
{
File.WriteAllBytes("result.pdf", response.RawBytes);
}
}
}
}
using System;
using RestSharp;
using RestSharp.Authenticators;
using System.IO;
namespace PDFShiftExample
{
class Program
{
static void Main(string[] args)
{
var client = new RestClient("___PROTECTED_URL_72___");
client.Authenticator = new HttpBasicAuthenticator("api", "your_api_key");
var request = new RestRequest(Method.POST);
var json = new
{
source = "___PROTECTED_URL_73___",
footer = new {
source = "<div style=\"font-size: 12px\">Page {{page}} of {{total}}</div>",
spacing = "50px"
},
header = new {
source = "<div>Company Name</div>",
spacing = "30px"
}
};
request.AddJsonBody(json);
var response = client.Execute(request);
if (!response.IsSuccessful)
{
// Handle the unsuccessful response
}
else
{
File.WriteAllBytes("result.pdf", response.RawBytes);
}
}
}
}
Imports System
Imports RestSharp
Imports RestSharp.Authenticators
Imports System.IO
Namespace PDFShiftExample
Class Program
Shared Sub Main(ByVal args As String())
Dim client = New RestClient("___PROTECTED_URL_72___")
client.Authenticator = New HttpBasicAuthenticator("api", "your_api_key")
Dim request = New RestRequest(Method.POST)
Dim json = New With {
.source = "___PROTECTED_URL_73___",
.footer = New With {
.source = "<div style=""font-size: 12px"">Page {{page}} of {{total}}</div>",
.spacing = "50px"
},
.header = New With {
.source = "<div>Company Name</div>",
.spacing = "30px"
}
}
request.AddJsonBody(json)
Dim response = client.Execute(request)
If Not response.IsSuccessful Then
' Handle the unsuccessful response
Else
File.WriteAllBytes("result.pdf", response.RawBytes)
End If
End Sub
End Class
End Namespace
如何將水印新增到PDF中?
在PDF上新增浮水印可增加文件的品牌化和安全性。 IronPDF和PDFShift均支持浮水印新增。 如需其他選項,請參閱文字和圖像蓋章及蓋上新內容。 PDF浮水印範例展示了進階技術。 批次處理時,請使用高效的HTML蓋章。
如何使用IronPDF新增浮水印?
IronPDF允許使用HTML在PDF上新增浮水印。 浮水印可以包含透明度、旋轉和超連結。 範例請參閱PDF浮水印範例。 對於多個章印,請考慮高效的HTML蓋章。 其他選項包括背景和前景範例及繪製文字和位圖。
using IronPdf;
var Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("___PROTECTED_URL_74___");
// Add text watermark with opacity and rotation
Pdf.WatermarkAllPages("<h2 style='color:red'>SAMPLE</h2>",
IronPdf.Editing.WaterMarkLocation.MiddleCenter,
50, // opacity
-45, // rotation
"___PROTECTED_URL_75___");
// Add image watermark
Pdf.ApplyWatermark("<img src='logo.png' style='width:200px'>",
30, // opacity
IronPdf.Editing.VerticalAlignment.Top,
IronPdf.Editing.HorizontalAlignment.Right);
Pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
using IronPdf;
var Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("___PROTECTED_URL_74___");
// Add text watermark with opacity and rotation
Pdf.WatermarkAllPages("<h2 style='color:red'>SAMPLE</h2>",
IronPdf.Editing.WaterMarkLocation.MiddleCenter,
50, // opacity
-45, // rotation
"___PROTECTED_URL_75___");
// Add image watermark
Pdf.ApplyWatermark("<img src='logo.png' style='width:200px'>",
30, // opacity
IronPdf.Editing.VerticalAlignment.Top,
IronPdf.Editing.HorizontalAlignment.Right);
Pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
Imports IronPdf
Dim Renderer As New IronPdf.ChromePdfRenderer()
Using Pdf = Renderer.RenderUrlAsPdf("___PROTECTED_URL_74___")
' Add text watermark with opacity and rotation
Pdf.WatermarkAllPages("<h2 style='color:red'>SAMPLE</h2>",
IronPdf.Editing.WaterMarkLocation.MiddleCenter,
50, ' opacity
-45, ' rotation
"___PROTECTED_URL_75___")
' Add image watermark
Pdf.ApplyWatermark("<img src='logo.png' style='width:200px'>",
30, ' opacity
IronPdf.Editing.VerticalAlignment.Top,
IronPdf.Editing.HorizontalAlignment.Right)
Pdf.SaveAs("C:\Path\To\Watermarked.pdf")
End Using
對於進階的浮水印,請結合背景與前景或自訂蓋章使用。 附件封面頁範例展示了文件品牌化。 要精確控制,請使用旋轉文字和縮放PDF物件。
如何使用PDFShift新增浮水印?
PDFShift允許在文件上新增浮水印以供識別用途:
using System;
using RestSharp;
using RestSharp.Authenticators;
using System.IO;
namespace PDFShiftExample
{
class Program
{
static void Main(string[] args)
{
var client = new RestClient("___PROTECTED_URL_76___");
client.Authenticator = new HttpBasicAuthenticator("api", "your_api_key");
var request = new RestRequest(Method.POST);
var json = new
{
source = "___PROTECTED_URL_77___",
watermark = new {
image = "___PROTECTED_URL_78___",
offset_x = 50,
offset_y = "100px",
rotate = 45,
opacity = 0.5
}
};
request.AddJsonBody(json);
var response = client.Execute(request);
if (!response.IsSuccessful)
{
// Handle the unsuccessful response
}
else
{
File.WriteAllBytes("result.pdf", response.RawBytes);
}
}
}
}
using System;
using RestSharp;
using RestSharp.Authenticators;
using System.IO;
namespace PDFShiftExample
{
class Program
{
static void Main(string[] args)
{
var client = new RestClient("___PROTECTED_URL_76___");
client.Authenticator = new HttpBasicAuthenticator("api", "your_api_key");
var request = new RestRequest(Method.POST);
var json = new
{
source = "___PROTECTED_URL_77___",
watermark = new {
image = "___PROTECTED_URL_78___",
offset_x = 50,
offset_y = "100px",
rotate = 45,
opacity = 0.5
}
};
request.AddJsonBody(json);
var response = client.Execute(request);
if (!response.IsSuccessful)
{
// Handle the unsuccessful response
}
else
{
File.WriteAllBytes("result.pdf", response.RawBytes);
}
}
}
}
Imports System
Imports RestSharp
Imports RestSharp.Authenticators
Imports System.IO
Namespace PDFShiftExample
Module Program
Sub Main(args As String())
Dim client = New RestClient("___PROTECTED_URL_76___")
client.Authenticator = New HttpBasicAuthenticator("api", "your_api_key")
Dim request = New RestRequest(Method.POST)
Dim json = New With {
.source = "___PROTECTED_URL_77___",
.watermark = New With {
.image = "___PROTECTED_URL_78___",
.offset_x = 50,
.offset_y = "100px",
.rotate = 45,
.opacity = 0.5
}
}
request.AddJsonBody(json)
Dim response = client.Execute(request)
If Not response.IsSuccessful Then
' Handle the unsuccessful response
Else
File.WriteAllBytes("result.pdf", response.RawBytes)
End If
End Sub
End Module
End Namespace
這些工具對Bootstrap和現代CSS的支持如何?
現代網頁開發依賴於CSS框架以實現響應式設計,而PDF程式庫必須準確地轉換這些框架。 請參閱Bootstrap及Flex CSS指南。 如需響應式設計,請檢查視窗及縮放設置和自訂紙張尺寸。 自訂PDF紙張尺寸範例顯示了精確的尺寸。 對於佈局控制,探索適合紙張和縮放以及響應式HTML至PDF。
IronPDF是否支持Bootstrap和現代CSS框架?
IronPDF的Chrome渲染引擎提供廣泛的CSS框架支持:
- Bootstrap 5:完整的Flexbox和CSS Grid,具有響應性的工具
- Bootstrap 4:完整的卡片系統、導航、表單元件
- Tailwind CSS: 所有實用類和響應式修飾符
- Foundation: 全面支持網格和組件系統
- 現代 CSS3: Flexbox、Grid、自定義屬性、動畫、變形
驗證:Bootstrap首頁和模板準確轉換。 請參閱渲染選項指南。 IronPDF支持Angular轉PDF和其他框架。 額外的框架支持包括JavaScript圖表和WebGL渲染。 要進行優化,請使用HTML渲染設置和像素完美格式化。
程式碼範例:使用Bootstrap的聯繫表單
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure for improve Bootstrap rendering
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Screen;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 500; // Allow JS to execute
renderer.RenderingOptions.ViewPortWidth = 1200; // Desktop viewport
string bootstrapContact = @"
<!DOCTYPE html>
<html>
<head>
<link href='___PROTECTED_URL_79___ rel='stylesheet'>
<style>
@media print {
.no-print { display: none; }
}
</style>
</head>
<body>
<div class='container my-5'>
<div class='row justify-content-center'>
<div class='col-lg-8'>
<div class='card shadow'>
<div class='card-header bg-primary text-white'>
<h2 class='mb-0'>Contact Us</h2>
</div>
<div class='card-body'>
<form>
<div class='row g-3'>
<div class='col-md-6'>
<label class='form-label'>First Name</label>
<input type='text' class='form-control' placeholder='John'>
</div>
<div class='col-md-6'>
<label class='form-label'>Last Name</label>
<input type='text' class='form-control' placeholder='Doe'>
</div>
</div>
<div class='mt-3'>
<label class='form-label'>Email Address</label>
<div class='input-group'>
<span class='input-group-text'>@</span>
<input type='email' class='form-control' placeholder='john.doe@example.com'>
</div>
</div>
<div class='mt-3'>
<label class='form-label'>Subject</label>
<select class='form-select'>
<option>General Inquiry</option>
<option>Technical Support</option>
<option>Sales Question</option>
<option>Partnership Opportunity</option>
</select>
</div>
<div class='mt-3'>
<label class='form-label'>Message</label>
<textarea class='form-control' rows='5' placeholder='Your message here...'></textarea>
</div>
<div class='d-flex justify-content-between align-items-center mt-4'>
<div class='form-check'>
<input class='form-check-input' type='checkbox' id='newsletter'>
<label class='form-check-label' for='newsletter'>
Subscribe to newsletter
</label>
</div>
<button type='submit' class='btn btn-primary px-4'>Submit</button>
</div>
</form>
</div>
</div>
<div class='alert alert-info mt-4 d-flex align-items-center' role='alert'>
<svg class='bi flex-shrink-0 me-2' width='24' height='24'></svg>
<div>We typically respond within 24 hours during business days.</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapContact);
pdf.SaveAs("contact-form.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure for improve Bootstrap rendering
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Screen;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 500; // Allow JS to execute
renderer.RenderingOptions.ViewPortWidth = 1200; // Desktop viewport
string bootstrapContact = @"
<!DOCTYPE html>
<html>
<head>
<link href='___PROTECTED_URL_79___ rel='stylesheet'>
<style>
@media print {
.no-print { display: none; }
}
</style>
</head>
<body>
<div class='container my-5'>
<div class='row justify-content-center'>
<div class='col-lg-8'>
<div class='card shadow'>
<div class='card-header bg-primary text-white'>
<h2 class='mb-0'>Contact Us</h2>
</div>
<div class='card-body'>
<form>
<div class='row g-3'>
<div class='col-md-6'>
<label class='form-label'>First Name</label>
<input type='text' class='form-control' placeholder='John'>
</div>
<div class='col-md-6'>
<label class='form-label'>Last Name</label>
<input type='text' class='form-control' placeholder='Doe'>
</div>
</div>
<div class='mt-3'>
<label class='form-label'>Email Address</label>
<div class='input-group'>
<span class='input-group-text'>@</span>
<input type='email' class='form-control' placeholder='john.doe@example.com'>
</div>
</div>
<div class='mt-3'>
<label class='form-label'>Subject</label>
<select class='form-select'>
<option>General Inquiry</option>
<option>Technical Support</option>
<option>Sales Question</option>
<option>Partnership Opportunity</option>
</select>
</div>
<div class='mt-3'>
<label class='form-label'>Message</label>
<textarea class='form-control' rows='5' placeholder='Your message here...'></textarea>
</div>
<div class='d-flex justify-content-between align-items-center mt-4'>
<div class='form-check'>
<input class='form-check-input' type='checkbox' id='newsletter'>
<label class='form-check-label' for='newsletter'>
Subscribe to newsletter
</label>
</div>
<button type='submit' class='btn btn-primary px-4'>Submit</button>
</div>
</form>
</div>
</div>
<div class='alert alert-info mt-4 d-flex align-items-center' role='alert'>
<svg class='bi flex-shrink-0 me-2' width='24' height='24'></svg>
<div>We typically respond within 24 hours during business days.</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapContact);
pdf.SaveAs("contact-form.pdf");
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Configure for improve Bootstrap rendering
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Screen
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.RenderDelay = 500 ' Allow JS to execute
renderer.RenderingOptions.ViewPortWidth = 1200 ' Desktop viewport
Dim bootstrapContact As String = "
<!DOCTYPE html>
<html>
<head>
<link href='___PROTECTED_URL_79___ rel='stylesheet'>
<style>
@media print {
.no-print { display: none; }
}
</style>
</head>
<body>
<div class='container my-5'>
<div class='row justify-content-center'>
<div class='col-lg-8'>
<div class='card shadow'>
<div class='card-header bg-primary text-white'>
<h2 class='mb-0'>Contact Us</h2>
</div>
<div class='card-body'>
<form>
<div class='row g-3'>
<div class='col-md-6'>
<label class='form-label'>First Name</label>
<input type='text' class='form-control' placeholder='John'>
</div>
<div class='col-md-6'>
<label class='form-label'>Last Name</label>
<input type='text' class='form-control' placeholder='Doe'>
</div>
</div>
<div class='mt-3'>
<label class='form-label'>Email Address</label>
<div class='input-group'>
<span class='input-group-text'>@</span>
<input type='email' class='form-control' placeholder='john.doe@example.com'>
</div>
</div>
<div class='mt-3'>
<label class='form-label'>Subject</label>
<select class='form-select'>
<option>General Inquiry</option>
<option>Technical Support</option>
<option>Sales Question</option>
<option>Partnership Opportunity</option>
</select>
</div>
<div class='mt-3'>
<label class='form-label'>Message</label>
<textarea class='form-control' rows='5' placeholder='Your message here...'></textarea>
</div>
<div class='d-flex justify-content-between align-items-center mt-4'>
<div class='form-check'>
<input class='form-check-input' type='checkbox' id='newsletter'>
<label class='form-check-label' for='newsletter'>
Subscribe to newsletter
</label>
</div>
<button type='submit' class='btn btn-primary px-4'>Submit</button>
</div>
</form>
</div>
</div>
<div class='alert alert-info mt-4 d-flex align-items-center' role='alert'>
<svg class='bi flex-shrink-0 me-2' width='24' height='24'></svg>
<div>We typically respond within 24 hours during business days.</div>
</div>
</div>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapContact)
pdf.SaveAs("contact-form.pdf")
輸出:一個專業的聯繫表單,具有Bootstrap的表單控件、網格佈局、卡片樣式和輸入組—都準確在PDF中呈現。
如需查看更多範例,請參閱渲染圖表和WebGL網站。 在HTML中新增條形碼範例展示了額外的HTML元素。 要優化性能,請使用PDF資產和性能指南以及軟體包大小管理。
PDFShift是否支持Bootstrap和現代CSS?
- 雲API:所有轉換均通過HTTP API調用至PDFShift伺服器
- Bootstrap支持:通常能夠很好地支持Bootstrap 4/5佈局
- CSS3支持:良好的Flexbox和現代CSS渲染
- 需要互聯網:無法離線生成PDF
- 按文件定價:按轉換收費,而不是按開發者授權
PDFShift的關鍵考量:
- 外部依賴:所有PDF生成都需要互聯網和外部API的可用性
- 資料隱私:HTML內容被發送到第三方伺服器進行處理
- 高量成本:按文件定價在規模化使用時可能變得昂貴
- 延遲:網路往返增加了每次轉換的延遲
- 無離線功能:無法在氣隙或離線環境中工作
開發影響:雖然PDFShift很好地處理Bootstrap,但雲架構引入了運營折衷:
- 持續的按文件成本與IronPDF的一次性開發者授權相比
- 外部服務依賴與本地內部處理相比
- 處理敏感內容時的数据考量
- 互連網連接需求與離線能力相比
開發影響:雲架構帶來了運營上的考量:
- 持續的按文件成本與一次性授權相比
- 外部依賴與本地處理控制相比
- 對敏感內容的資料處理要求
- 互聯網連接的前提條件
對於高量應用或敏感資料,IronPDF的本地處理提供了更好的控制和價值。 考慮使用平行生成和多執行緒以提升性能。 多執行緒範例展示了並行處理。 雲端替代方案請參閱Azure部署和AWS Lambda整合。
請參閱Bootstrap及Flexbox CSS指南和HTML渲染設置。 現代CSS支持請查看國際語言和CMYK及元資料可見性。
有哪些授權選項?
IronPDF提供免費開發授權。 輕量化方案從$999起,無隱藏費用。 方案包含SaaS和OEM再分發。 所有授權均享有30天退款保證、一年的支援與升級,且有效於開發、測試、佈署與投產下,並具有永久授權。 請參閱IronPDF的定價和授權。 關於授權管理,請參閱應用授權金鑰和授權金鑰配置。 授權金鑰指南涵蓋了所有配置方法。 對於授權疑難排解,請參閱無法連接至授權伺服器和使用聲明。
PDFShift提供五個套件,每月或每年使用點數購買:
- 免費:每月50點數
- 初創:每月500點數($9)或每年6,000點數($99)
- 提高:每月2,500點數($24)或每年30,000點數($240)
- 成長:每月5,000點數($39)或每年60,000點數($390)
- 商業:每月25,000點數($99)
文件大小限制:免費1MB,付費套件5MB。
請造訪PDFShift定價頁面。
我應選擇哪一個PDF API?
IronPDF對獨立開發者免費,並提供廣泛的PDF修改及轉換功能。 IronPDF提供卓越的編輯和格式工具。 該程式庫將HTML轉換為向量PDF以供商業印刷,提供清晰、高質量的輸出。 請查看Iron Software授權資訊。 如需額外功能,請探索組織PDF、簽署和保護PDF以及PDF轉換選項。 完整功能列表涵蓋了所有功能。 如需企业功能,請查看數位簽章範例和加密與解密。
PDFShift 是一種基於雲端的HTML轉PDF API,提供簡單的端點和多語言支持。 PDFShift通過伺服器請求處理並發轉換。 然而,該服務缺乏進階功能,如PDF表單建立、PDF合併、文字替換或元資料編輯。 表單處理比較,請參閱表單資料範例和填寫及編輯表單。 如需文件組織,請檢查合併PDF範例和拆分PDF頁面。
IronPDF授權為開發者授權制且一次性購買。 PDFShift採用按月或按年的點數授權制,需持續訂閱。 IronPDF支持OEM和SaaS分發; PDFShift不支持。 關於授權管理,請參閱IronPDF擴展和升級選項。 變更日誌追蹤所有產品更新。 如需支援選項,請參閱工程支援請求指南和最佳支援實踐。
比較兩種工具:IronPDF提供大幅超越多的功能。 PDFShift僅提供有限的PDF操作功能。 IronPDF在三行中將URL轉換為PDF,而PDFShift需要更多的程式碼複雜性。 IronPDF能快速簡單地整合到.NET專案中。 PDFShift的雲端系統依賴於RestSharp和外部API,增加了整合的複雜性。 如需疑難排解資源,請參閱快速疑難排解指南和工程支援。 其他資源包括Azure日誌文件和AWS日誌文件。 如需部署指導,請查看Azure部署疑難排解和在本機上除錯Azure功能。
Iron Software以兩個工具的價格提供五個工具。 Iron Suite包括:
- IronBarcode - 條碼生成和閱讀
- IronXL - 無需Office即可操作Excel文件
- IronOCR - 進階OCR進行文字提取
- IronPDF - 完整的PDF操作程式庫
- IronWebScraper - 網路爬蟲與資料提取
造訪Iron Suite頁面以探索Iron Suite。如需更多Iron Software產品,請探索IronSecureDoc文件以滿足文件安全需求。 產品演示展示了真實世界的應用場景。 如需競爭分析,請檢閱QuestPDF與IronPDF比較。 里程碑頁面突顯了自2015年以來的主要成就。
常見問題
如何在C#中將HTML轉換為PDF?
您可以使用IronPDF的RenderHtmlAsPdf方法將HTML字串轉換成PDF。也可以使用RenderHtmlFileAsPdf將HTML文件轉換為PDF。
使用IronPDF進行PDF操作的好處是什麼?
IronPDF 提供了一組強大的 PDF 操作功能,包括從多種格式建立 PDF、圖像提取、加密、編輯功能,以及與多個平台(如 Windows、Linux 和像 Azure 和 AWS 的雲服務)的相容性。
PDFShift 的主要功能是什麼?
PDFShift 是一個基於雲端的 API,支持快速 HTML 到 PDF 的轉換,具有並行轉換、自定義標題、異步請求及多種程式語言的相容性。
IronPDF 和 PDFShift 在授權上有何不同?
IronPDF 提供了一種基於開發者的授權,一次性購買並享有30天退款保證。相對而言,PDFShift 使用基於信用額的授權系統,並提供月度和年度計劃。
IronPDF 能用於雲端環境嗎?
是的,IronPDF 支援像 Microsoft Azure 和 AWS 這樣的雲端環境,使其在不同的部署場景中具有多樣性。
如何使用 IronPDF 新增 PDF 的頁眉和頁腳?
IronPDF 允許您使用其內建方法為 PDFs 新增頁眉和頁腳,這些方法可以被自定義以包括文字、圖片或頁碼。
IronPDF 支援哪些平台?
IronPDF 支援幾乎所有與 C# 相容的操作系統和框架,包括 Windows、Linux、.NET Core,還可以在雲環境中使用。
如何在我的 Visual Studio 專案中安裝 IronPDF?
IronPDF 可以通過 Visual Studio NuGet Package Manager、Visual Studio 指令行或直接從 NuGet 或 IronPDF 網頁下載來安裝。
可以使用 IronPDF 從PDF中提取圖像嗎?
是的,IronPDF 提供了從 PDF 提取圖像的功能,允許開發者在原始文件外部操控和重用圖像。



