# HTML 轉 PDF 在 C# .NET 中
作為 IronPDF 的開發者,我們知道 HTML 轉 PDF 的轉換需要產生準確、高品質的結果以滿足客戶的期望。本 C# 教程將指導您為您的應用程式、專案和網站構建一個 HTML 轉 PDF 的轉換器。我們將開發一個 C# HTML 轉 PDF 的轉換器,IronPDF 生成的輸出 PDF 文件將與 Google Chrome 網頁瀏覽器生成的 PDF 完全一致。
```cs
:title=Get started making PDFs now!
IronPdf.ChromePdfRenderer
.StaticRenderHtmlAsPdf("<p>Hello World</p>")
.SaveAs("pixelperfect.pdf");
```
<hr class="separator" />
<p class="main-content__segment-title">概覽</p>
<div class="hsg-featured-snippet">
<h2>如何在 C# 中將 HTML 轉換為 PDF</h2>
<img class="featured-snippet__image featured-snippet__image--float-right featured-snippet__image--html-pdf" src="/static-assets/pdf/images/html-to-pdf-converter-in-csharp.png" alt="如何在 C# 中將 HTML 轉換為 PDF" />
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronPdf/">下載並安裝 HTML 轉 PDF C# 庫</a></li>
<li><a href="#anchor-create-a-pdf-with-an-html-string-in-c-net">使用 HTML 字串創建 PDF</a></li>
<li><a href="#anchor-create-a-pdf-with-an-html-string-in-c-net">使用 RenderHtmlAsPdf 方法將 HTML 字串轉換為 PDF</a></li>
<li><a href="#anchor-export-a-pdf-using-existing-url">使用現有 URL 匯出 PDF</a></li>
<li><a href="#anchor-generate-a-pdf-from-a-html-page">從 HTML 頁面生成 PDF</a></li>
<li><a href="#anchor-add-custom-headers-and-footers">添加自定義頁眉和頁腳</a></li>
<li>調用 SaveAs 將 PDF 文件保存到電腦</li>
<li><a href="#anchor-c-html-to-pdf-conversion-settings">更多</a></li>
</ol>
</div>
<br class="main-article__clear-both" />
## C# 和 VB.NET 的 HTML 轉 PDF 轉換器
在 .NET 中以程式化方式創建 PDF 文件可能是一項令人沮喪的任務。PDF 文件格式的設計更多是為了打印機而不是開發者。而且 C# 沒有內建許多適合的庫或功能來生成 PDF,許多庫需要額外的設置,並且在需要多行代碼來完成簡單任務時會造成進一步的挫折。
我們在本教程中將使用的 C# HTML 轉 PDF 轉換工具是 Iron Software 的 IronPDF,一個非常受歡迎的 C# PDF 生成和編輯庫。該庫具有完整的 PDF 編輯和生成功能,開箱即用,能夠以最少的代碼行數完成您需要的工作,並且擁有 [其 50 多個功能的出色文檔](/features/)。IronPDF 的突出之處在於它支持 **.NET 10, .NET 9, .NET 8, .NET 7, .NET 6, 和 .NET 5**,.NET Core, .NET Standard, 和 .NET Framework 在 Windows, macOS, Linux, Docker, Azure, 和 AWS 上。
使用 C# 和 IronPDF,"<a href="/how-to/create-new-pdfs/">生成 PDF 文件</a>" 或 "<a href="/examples/using-html-to-create-a-pdf/">HTML 轉 PDF 轉換</a>" 的邏輯是簡單明了的。由於 IronPDF 的先進 Chrome 渲染器,大多數或所有的 PDF 文件設計和佈局將使用現有的 HTML 資產。
這種使用 HTML5 在 .NET 中動態生成 PDF 的方法在控制台應用程式、Windows Forms 應用程式、WPF 以及網站和 MVC 中同樣有效。
**IronPDF 還支持使用 Chrome 調試您的 HTML 以獲得像素完美的 PDF。可以在 <a href="/how-to/pixel-perfect-html-to-pdf/">這裡</a>找到設置此功能的教程。**
IronPDF 在 .NET 生態系統內外有多種語言版本。
- [F# 指南](/get-started/fsharp-pdf-library-html-to-pdf/)
- [VB.NET 指南](/get-started/vb-net-pdf/)
- [Python](/python/tutorials/html-to-pdf/)
- [Java](/java/tutorials/html-to-pdf/)
- [Node.js](/nodejs/tutorials/html-to-pdf/)
IronPDF 在開發中是免費的;部署到生產環境並移除試用水印需要許可證密鑰。您可以在 [這裡購買許可證](/licensing/) 或註冊 <a class='js-modal-open' data-modal-id='trial-license'>免費 30 天試用密鑰</a>。
<hr class="separator" />
<p class="main-content__segment-title">步驟 1</p>
## 下載並安裝 HTML 轉 PDF C# 庫
### Visual Studio - NuGet 套件管理器
在 Visual Studio 中,右鍵單擊您的專案解決方案資源管理器並選擇 `Manage NuGet Packages...`,然後只需搜索 IronPDF 並將最新版本安裝到您的解決方案中... 點擊 OK 以確認任何彈出對話框。這在 VB.NET 專案中同樣有效。
```shell
:ProductInstall
```
### NuGet 網站上的 IronPDF
要全面了解 IronPDF 的功能、兼容性和下載,請查看 NuGet 官方網站上的 IronPDF:<a class="js-modal-open" href="https://www.nuget.org/packages/IronPdf" target="_blank" data-modal-id="trial-license-after-download">https://www.nuget.org/packages/IronPdf</a>
### 通過 DLL 安裝
另一個選擇是直接安裝 IronPDF DLL。IronPDF 可以從 <a class="js-modal-open" href="/packages/IronPdf.zip" data-modal-id="trial-license-after-download">https://ironpdf.com/packages/IronPdf.zip</a> 下載並手動安裝到專案或 GAC。
<hr class="separator" />
<p class="main-content__segment-title">如何教程</p>
## 在 C# .NET 中使用 HTML 字串創建 PDF
**如何:將 HTML 字串轉換為 PDF?** 在 C# 中*創建新的 PDF 文件*是一項非常高效且有益的技能。
我們可以簡單地使用 [ChromePdfRenderer.RenderHtmlAsPdf](/object-reference/api/IronPdf.ChromePdfRenderer.html) 方法將任何 HTML (HTML5) 字串轉換為 PDF。**C# HTML 轉 PDF 渲染**是由隨 IronPDF NuGet 套件一起提供的完整功能的 Google Chromium 引擎進行的。
```csharp
using IronPdf;
// ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engine
var renderer = new ChromePdfRenderer();
// Render an HTML string. The result is a PdfDocument held in memory
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Write the PDF to disk
pdf.SaveAs("pixel-perfect.pdf");
```
`RenderHtmlAsPdf` 完全支持 HTML5、CSS3、JavaScript 和圖像。如果這些資產位於硬碟上,我們可能需要將 `RenderHtmlAsPdf` 的第二個參數設置為包含資產的目錄。此方法返回一個 **PdfDocument** 對象,這是一個用於保存 PDF 信息的類。
### IronPDF 將精確渲染您的 HTML 如同在 Chrome 中顯示的一樣
我們有一個完整的教程,專門用於讓您設置 Chrome 進行完整的 HTML 調試,以確保當您選擇渲染時,您在編輯 HTML、CSS 和 JavaScript 時所看到的更改與 IronPDF 的輸出 PDF 完全一致。請在這裡找到教程:[如何在 Chrome 中調試 HTML 以創建像素完美的 PDF](/how-to/pixel-perfect-html-to-pdf/)。
**基礎 URL 路徑** (`BaseUrlOrPath` 參數):
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// The second argument is the base path. Relative URLs in the HTML (the image
// below, but also stylesheets, scripts and fonts) are resolved against it.
var pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", @"C:\MyProject\Assets\");
pdf.SaveAs(@"C:\MyProject\Assets\output.pdf");
```
所有引用的 CSS 樣式表、圖像和 JavaScript 文件將相對於該基礎路徑,並可以保持在一個整潔且合乎邏輯的結構中。當然,您也可以選擇在線引用圖像、樣式表和資產,包括網頁字體如 Google Fonts 甚至 jQuery。
<hr class="separator" />
## 使用現有 URL 匯出 PDF | URL 轉 PDF
使用 C# 將現有 URL 渲染為 PDF 是非常高效且直觀的。這也允許團隊將 PDF 設計和後端 PDF 渲染工作分配給多個團隊。
讓我們在以下示例中渲染 Wikipedia.com 的一個頁面:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a live web page straight from its URL
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
// The PDF is written next to the executable
pdf.SaveAs("wikipedia.pdf");
```
您會注意到,我們的 C# 代碼生成的 PDF 中保留了超鏈接甚至 HTML 表單。
在渲染現有網頁時,我們可能希望應用一些技巧:
### 打印和屏幕 CSS
CSS 媒體類型允許頁面攜帶單獨的打印和屏幕樣式。我們可以指示 IronPDF 渲染 "Print" CSS,這通常更簡單。默認情況下將渲染 "Screen" CSS 樣式,這與您在瀏覽器中看到的相匹配。
```csharp
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Choose which CSS media type the page is rendered with.
// Screen (the default) renders the page as a browser displays it;
// Print applies the page's @media print rules instead.
// renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
```
主文章:[像素完美 HTML 轉 PDF 比較](/how-to/pixel-perfect-html-to-pdf/#decide-to-use-css-media-type-print-or-screen)。
### JavaScript
IronPDF 支持 JavaScript、jQuery 甚至 AJAX。我們可能需要指示 [IronPDF **等待** JS 或 ajax](/how-to/javascript-to-pdf/) 完成運行後再渲染我們網頁的快照。
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Let the page's JavaScript run before the snapshot is taken
renderer.RenderingOptions.EnableJavaScript = true;
// Give scripts and AJAX calls 500 milliseconds to finish before rendering.
// For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait
// for a signal instead of a fixed delay.
renderer.RenderingOptions.WaitFor.RenderDelay(500);
```
我們可以通過渲染 [d3.js chord-diagram 文檔頁面](https://d3js.org/d3-chord) 來演示 JavaScript 支持,其圖表在頁面加載時由 JavaScript 繪製:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// The chart is drawn by JavaScript, so let it run and give it a moment to finish
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);
// Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScript
var pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord");
pdf.SaveAs("chart.pdf");
```
### 響應式 CSS
使用響應式 CSS 在 .NET 中將 HTML 轉換為 PDF 是為在瀏覽器中查看而設計的。IronPDF 不會在您的服務器操作系統中打開一個真正的瀏覽器窗口。沒有瀏覽器視口,響應式佈局可能會回退到其最窄的斷點。
我們建議使用 **Print** css 媒體類型來解決此問題。打印 CSS 通常不應該是響應式的。
```csharp
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Responsive layouts are designed for a browser viewport, so render the page's
// print stylesheet instead of its screen stylesheet
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
```
<hr class="separator" />
## 從 HTML 頁面生成 PDF
我們還可以將硬碟上的任何 HTML 頁面渲染為 PDF。所有相對資產如 CSS、圖像和 js 將被渲染,就像文件是使用 **file://** 協議打開的一樣。
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render an HTML file from disk. Relative CSS, image and script paths
// resolve against the file's own folder, as if opened with file://
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
```
此方法的優勢在於允許開發者在開發過程中在瀏覽器中測試 HTML 內容。我們推薦使用 Chrome,因為它是 IronPDF 的渲染引擎所基於的網頁瀏覽器。
要將 [XML 轉換為 PDF,您可以使用 XSLT 模板將 XML 內容打印到 PDF](/how-to/xml-to-pdf/)。
<hr class="separator" />
## 添加自定義頁眉和頁腳
頁眉和頁腳可以在渲染時添加到 PDF 中,或者使用 IronPDF 添加到現有的 PDF 文件中。
使用 IronPDF,頁眉和頁腳可以使用 *`TextHeaderFooter`* 類包含簡單的文本內容,或者使用 *`HtmlHeaderFooter`* 類包含圖像和豐富的 HTML 內容。
```csharp
using IronPdf;
using IronPdf.Rendering;
// Create a PDF from an existing HTML file with rendering options set up front
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
// Margins are in millimeters
MarginTop = 50,
MarginBottom = 50,
// Render the page's print stylesheet
CssMediaType = PdfCssMediaType.Print,
// Plain-text header: the document title, centered, above a divider line
TextHeader = new TextHeaderFooter
{
CenterText = "{pdf-title}",
DrawDividerLine = true,
FontSize = 16
},
// Plain-text footer: date and time on the left, page numbers on the right
TextFooter = new TextHeaderFooter
{
LeftText = "{date} {time}",
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true,
FontSize = 14
}
}
};
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
// Open the result in the default PDF viewer
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = "Invoice.pdf",
UseShellExecute = true
});
```
在以下如何文章中探索所有渲染選項:[如何使用渲染選項](/how-to/rendering-options/)。
### HTML 頁眉和頁腳
`HtmlHeaderFooter` 類允許使用 HTML5 內容生成豐富的頁眉和頁腳,這些內容甚至可以包括圖像和樣式表。
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// An HTML footer can carry markup, styles and images.
// {page} and {total-pages} are filled in for every page.
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"
};
```
### PDF 頁眉和頁腳中的動態數據
我們可以使用佔位符將內容 "郵件合併" 到頁眉和頁腳的文本甚至 HTML 中,例如:
- `{page}` 表示當前頁碼
- `{total-pages}` 表示 PDF 的總頁數
- `{url}` 表示從網頁渲染的 PDF 的 URL
- `{date}` 表示今天的日期
- `{time}` 表示當前時間
- `{html-title}` 表示渲染的 HTML 文檔的 `<title>`
- `{pdf-title}` 表示文檔標題,可以通過 ChromePdfRenderOptions 設置
<hr class="separator" />
## C# HTML 轉 PDF 轉換設置
我們的用戶和客戶可能期望 PDF 內容以多種方式呈現。
`ChromePdfRenderer` 類包含一個 **RenderingOptions** 屬性,可用於設置這些選項。
例如,我們可能希望選擇只接受 "`print`" 樣式的 CSS3 指令:
```csharp
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Render the page's @media print CSS rather than its screen styles
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf");
```
我們還可能希望更改打印邊距的大小,以在頁面上創建更多的空白,以便為大型頁眉或頁腳留出空間,甚至為商業印刷的宣傳冊或海報設置零邊距:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Page margins in millimeters. Larger margins leave room for headers and
// footers; set them to 0 for edge-to-edge brochures and posters.
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
```
我們可能希望開啟或關閉 HTML 元素的背景圖像:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Include CSS background colors and images in the PDF (set false to drop them)
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
var pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>");
pdf.SaveAs("output.pdf");
```
還可以將我們的輸出 PDF 設置為在任何虛擬紙張尺寸上渲染 - 包括縱向和橫向尺寸,甚至可以設置為毫米或英寸的自定義尺寸。
```csharp
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Standard paper sizes and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Or a custom size, in millimeters or inches
// renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297);
// renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
```
在以下如何文章中探索所有渲染選項:"[如何使用渲染選項](/how-to/rendering-options/)。"
<hr class="separator" />
## 應用 HTML 模板
對於互聯網和網站開發者來說,模板化或 "批量創建" PDF 是一個常見的需求。
與其模板化 PDF 文件本身,使用 IronPDF 我們可以使用現有的、經過驗證的技術來模板化我們的 HTML。當 HTML 模板與查詢字串或數據庫中的數據結合時,我們最終得到一個動態生成的 PDF 文件。
在最簡單的情況下,使用 C# 的 String.Format 方法對於基本示例是有效的。
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Insert a value into an HTML template with string.Format
string html = string.Format("<h1>Hello {0}!</h1>", "World");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Hello.pdf");
```
如果 HTML 文件較長,我們通常可以使用任意佔位符如 `[[NAME]]`,然後用真實數據替換它們。
以下示例將創建 3 個 PDF,每個 PDF 都個性化為一個用戶。
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// A template with a placeholder to replace
var htmlTemplate = "<p>[[NAME]]</p>";
var names = new[] { "John", "James", "Jenny" };
// One personalized PDF per name
foreach (var name in names)
{
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
pdf.SaveAs(name + ".pdf");
}
```
### 使用 Handlebars.NET 進行高級模板化
將 C# 數據與 HTML 合併以生成 PDF 的一種複雜方法是使用 Handlebars 模板語言。
Handlebars 使得從 C# 對象和類實例(包括數據庫記錄)創建動態 HTML 成為可能。Handlebars 特別有效,當查詢可能返回未知數量的行時,例如在生成發票時。
我們必須首先將一個額外的 NuGet 套件添加到我們的專案中:[https://www.nuget.org/packages/Handlebars.NET/](https://www.nuget.org/packages/Handlebars.NET/)
```csharp
using HandlebarsDotNet;
// A Handlebars template with two placeholders
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile it once, then fill it with any object that has matching properties
var template = Handlebars.Compile(source);
var data = new { title = "My new post", body = "This is my first post!" };
string html = template(data);
// html now contains:
//
// <div class="entry">
// <h1>My new post</h1>
// <div class="body">
// This is my first post!
// </div>
// </div>
```
要渲染此 HTML,我們可以簡單地使用 `RenderHtmlAsPdf` 方法。
```csharp
using HandlebarsDotNet;
using IronPdf;
// Fill the Handlebars template, then render the resulting HTML
var template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>");
string html = template(new { title = "My new post", body = "This is my first post!" });
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Handlebars.pdf");
```
您可以從 [GitHub](https://github.com/Handlebars-Net/Handlebars.Net) 瞭解有關 Handlebars 模板語言及其 C# 實現的更多信息。
### 使用 HTML5 添加分頁符
在 PDF 文件中,分頁是一個常見的需求。開發者需要控制 PDF 頁面的開始和結束位置,以獲得整潔、可讀的佈局。
最簡單的方法是使用一個不太為人所知的 CSS 技巧,這將在任何打印的 HTML 文件中渲染一個分頁符。
```html
<div style='page-break-after: always;'> </div>
```
提供的 HTML 可以工作,但並不是最佳實踐。我們建議像以下示例一樣調整媒體屬性。這是一種整潔的方式來佈局多頁 HTML 內容。因為 IronPDF 默認使用 `screen` 媒體類型渲染,當 `RenderingOptions.CssMediaType` 設置為 `PdfCssMediaType.Print` 時,`media="print"` 樣式表才會被應用(見上面的 [轉換設置](#anchor-c-html-to-pdf-conversion-settings))。
```html
<!DOCTYPE html>
<html>
<head>
<style type="text/css" media="print">
.page {
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>This is Page 1</h1>
</div>
<div class="page">
<h1>This is Page 2</h1>
</div>
<div class="page">
<h1>This is Page 3</h1>
</div>
</body>
</html>
```
該如何指南概述了更多 [分頁符的提示和技巧](/how-to/html-to-pdf-page-breaks/)。
<hr class="separator" />
## 為 PDF 附加封面頁
IronPDF 使合併 PDF 文件變得簡單。這種技術最常見的用法是為現有渲染的 PDF 文件添加封面頁或背面頁。
為此,我們首先渲染一個封面頁,然後使用 `PdfDocument.Merge()` 靜態方法將兩個文件合併。
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// The document body, rendered from a web page
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");
// Prepend an existing PDF as the cover page. Merge returns a new document.
var cover = PdfDocument.FromFile("CoverPage.pdf");
var pdfMerged = PdfDocument.Merge(cover, pdf);
pdfMerged.SaveAs("Combined.pdf");
```
完整的代碼示例可以在這裡找到:[PDF 封面頁代碼示例](/examples/pdf-cover-page/)。
<hr class="separator" />
## 添加水印
IronPDF 支持的最後一個 [C# PDF](/use-case/csharp-pdf/) 功能是為文件添加水印。這可以用來在每頁添加一個通知,表明文件是 "機密" 或 "樣本"。
```csharp
using IronPdf;
using IronPdf.Editing;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.
// The watermark is HTML, so any markup, styling or image can be used.
pdf.ApplyWatermark(
"<h2 style='color:red; font-size:50px'>SAMPLE</h2>",
rotation: 30,
opacity: 50,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
```
完整的代碼示例可以在這裡找到:[PDF 水印代碼示例](/examples/pdf-watermarking/)。
<hr class="separator" />
## 下載 C# 源代碼
本教程的完整 **免費 HTML 轉 PDF 轉換器 C# 源代碼** 可作為壓縮的 Visual Studio 2022 專案文件下載。它將使用其渲染引擎在 C# 中生成 PDF 文件對象。
[下載本教程作為 Visual Studio 專案](/tutorials/html-to-pdf/downloads/CSharp-Html-To-Pdf-Tutorial.zip)
免費下載包含創建 PDF 從 HTML 所需的一切 - 包括工作中的 C# PDF 代碼示例代碼:
1. 使用 C# 將 HTML 字串轉換為 PDF
2. 在 C# 中將 HTML 文件轉換為 PDF(支持 CSS、JavaScript 和圖像)
3. 使用 URL 的 C# HTML 轉 PDF("URL 轉 PDF")
4. C# PDF 編輯和設置示例
5. 將 JavaScript 畫布圖表如 d3.js 渲染為 PDF
6. PDF 庫用於 C#
### 類參考
開發者可能還對 `IronPdf.PdfDocument` 類參考感興趣:
[https://ironpdf.com/object-reference/api/IronPdf.PdfDocument.html](https://ironpdf.com/object-reference/api/IronPdf.PdfDocument.html)
此對象模型顯示了 PDF 文件如何可以:
- 加密和密碼保護
- 編輯或用新 HTML 內容 "蓋章"
- 使用前景和背景圖像增強
- 在頁面或文件級別合併、連接、截斷和拼接
- 解析以提取純文本和圖像,或使用 IronOCR 套件進行 OCR 處理
<hr class="separator" />
## Blazor HTML 轉 PDF
將 HTML 轉 PDF 功能添加到您的 Blazor 服務器很簡單,只需:
1. 創建一個新的 Blazor 服務器專案或使用現有的專案
2. 使用 NuGet 將 IronPDF 庫添加到您的專案中
3. 添加一個新的 Razor 組件或使用現有的組件
4. 添加一個 `InputTextArea` 並將其鏈接到 IronPDF
5. 讓 IronPDF 處理其餘部分並部署
欲了解更多閱讀,請繼續閱讀 [完整的分步指南](/how-to/blazor-tutorial/) 以 [在 Blazor 應用程式中將 HTML 轉換為 PDF](/how-to/blazor-tutorial/)。
<img src="/static-assets/pdf/tutorials/blazor-tutorial/blazor-tutorial-3.webp" alt="使用 IronPDF 從 Blazor 服務器頁面生成的 PDF" />
<hr class="separator" />
## 與其他 PDF 庫比較
IronPDF 是一個強大且功能齊全的 PDF 庫,專為現代 .NET 開發者量身定制。憑藉先進的 Chromium 引擎提供的原生 HTML 轉 PDF 轉換、直觀的 API 和定期更新,它簡化了開發,同時確保高品質的結果。讓我們仔細看看它與其他工具的比較:
### PDFSharp
- **核心功能**:PDFsharp 是一個用於在托管代碼中創建和編輯 PDF 文件的開源(MIT)庫。它沒有 HTML 渲染引擎,因此將網頁內容轉換為 PDF 需要單獨的第三方渲染器。
- **現代標準**:IronPDF 利用現代網絡技術,包括 HTML、CSS 和 JavaScript,通過其基於 Chromium 的引擎,確保 PDF 保持現代的外觀和感覺。
- **支持與更新**:PDFsharp 是開源的,每幾個月發布一次版本,其維護者單獨出售商業支持。IronPDF 每月發布版本和安全補丁,每個許可證都包括專業的工程支持,這對於企業應用程式來說很重要。
### wkhtmltopdf
- **集成的便利性**:wkhtmltopdf 是一個命令行工具,帶有 C 庫;沒有官方的 .NET 套件,因此從 .NET 使用它意味著啟動本地二進制文件(或通過第三方包裝器如 DinkToPdf 調用它)並為您部署到的每個平台提供該二進制文件。
- **渲染技術**:wkhtmltopdf 使用 QtWebKit 渲染,這是一個 Qt 在 2015 年棄用並在 Qt 5.6 中刪除的 WebKit 分支,因此現代 JavaScript 和 CSS 功能不受支持,特別是在動態、內容豐富的網站上。IronPDF 的 Chromium 引擎渲染當前的網絡標準。
- **持續開發**:wkhtmltopdf 的最後一個版本是 2020 年 6 月的 0.12.6,其 GitHub 存儲庫在 2023 年 1 月被存檔,因此沒有供應商支持。IronPDF 繼續隨著每月更新和專門的客戶服務而發展。
### iTextSharp
- **HTML-to-PDF 渲染**:iText 通過其獨立的 pdfHTML 附加組件轉換 HTML,這是一個 CSS 佈局引擎而非瀏覽器,且舊版 iTextSharp 5 現在僅接收安全修復。IronPDF 在核心包中嵌入了 Chromium 引擎來渲染 HTML,無需附加組件。
- **開發者體驗**:iText 的 API 在 PDF 對象和佈局元素層面運作,這很強大,但意味著日常任務需要更多代碼。IronPDF 提供了一個乾淨且直觀的 C# API,簡化了編碼並加速了項目交付。
- **維護與支持**:免費使用 iText 需遵循 AGPL,供應商支持僅限於商業許可證,且 iTextSharp 5.x 除了安全修復外已經停止更新。IronPDF 包含專業支持和每月更新,隨每個許可證提供。
### Aspose.PDF
- **轉換質量**:Aspose.PDF 使用其自己的佈局引擎而非瀏覽器來轉換 HTML。其文檔通過首先使用 `HttpClient` 獲取 HTML 到流中,然後通過 `HtmlLoadOptions` 傳遞給 `Document`,而不是直接從 URL 渲染。在我們下面的 r/nfl 測試中,輸出幾乎是空的:社區標誌、一個標題和一些空框。IronPDF 的 Chromium 引擎直接渲染 URL,包括 JavaScript。
- **API 可用性**:Aspose.PDF 的 API 可能冗長,而 IronPDF 專注於提供開發者友好的體驗,最大限度地減少設置時間並提高生產力。
- **輸出保真度**:由於 IronPDF 使用 Chromium 渲染,PDF 與 Chrome 顯示的相同 HTML 相匹配,這使得設計和調試對於高容量 PDF 生成來說是可預測的。
### Syncfusion PDF
- **API 複雜性**:Syncfusion PDF 是一個功能強大的庫,具有更大的 API 表面需要學習。相比之下,IronPDF 提供了一個簡單的 API 以便快速集成。
- **渲染引擎**:Syncfusion 的 HTML 轉換器現在使用 Chromium Blink 引擎;其舊的 WebKit 和 Internet Explorer 引擎在 Essential Studio 2022 Volume 3 中被標記為過時。在我們下面的 r/nfl 測試中,Syncfusion 的輸出保留了主提要,但丟失了導航和社區面板,而 IronPDF 的 Chromium 引擎渲染了整個頁面。
- **超越轉換**:IronPDF 的包還涵蓋數字簽名、註釋、表單填寫和條碼蓋章,因此同一個庫處理文檔工作流程的其餘部分。
### 渲染比較
為了比較這些庫的 HTML-to-PDF 轉換質量,我們使用了一個 Reddit 社區頁面,r/nfl,其中包含動態內容、實時更新、現代 CSS 和基於 JavaScript 的元素:
`https://www.reddit.com/r/nfl/`

以下是每個庫使用默認設置單次運行的結果。Syncfusion 和 Aspose.PDF 作為評估版本運行,這就是為什麼它們的輸出帶有評估水印(*點擊每個圖像以查看放大版本*):
<div class="competitors-section__wrapper">
<div class="competitors__card half">
<p class="competitors__header">IronPDF</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-2.webp"
alt="IronPDF 將 r/nfl Reddit 頁面從 HTML 轉換為 PDF 的輸出"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-2.webp" />
<small><strong>格式良好且視覺準確的 PDF,保留了動態內容和現代樣式。</strong></small>
</div>
<div class="competitors__card half">
<p class="competitors__header">SyncFusion</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-3.webp"
alt="Syncfusion 將 r/nfl Reddit 頁面從 HTML 轉換為 PDF 的輸出"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-3.webp" />
<small><strong>使用試用版本轉換。主提要、帖子內容和樣式以狹窄的單列佈局顯示,但左側導航和右側社區面板被丟棄。</strong></small>
</div>
</div>
<div class="competitors-section__wrapper">
<div class="competitors__card half">
<p class="competitors__header">Aspose.PDF</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-4.webp"
alt="Aspose.PDF 將 r/nfl Reddit 頁面從 HTML 轉換為 PDF 的輸出"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-4.webp" />
<small><strong>評估版本;需要先下載 HTML(Aspose.PDF 從流而非 URL 加載 HTML)。輸出幾乎是空的:社區標誌、一個標題和一些空框。</strong></small>
</div>
<div class="competitors__card half">
<p class="competitors__header">Wkhtmltopdf</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-5.webp"
alt="wkhtmltopdf 將 r/nfl Reddit 頁面從 HTML 轉換為 PDF 的輸出"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-5.webp" />
<small><strong>wkhtmltopdf 完成了轉換,但結果是頁面的文本和圖像,沒有其佈局、樣式、動態元素或交互性。這使得 wkhtmltopdf 不適合現代動態網頁。</strong></small>
</div>
</div>
[{i:(PDFsharp 沒有 HTML 渲染引擎,而 iText 僅通過其獨立的 pdfHTML 附加組件轉換 HTML,因此兩者均未包含在此瀏覽器渲染測試中。)}]
### 結論
對於尋求現代且可靠的 PDF 解決方案的 .NET 開發者來說,IronPDF 是一個強有力的選擇。其基於 Chromium 的 HTML-to-PDF 轉換、易用性、定期更新和廣泛的功能集使其成為首選。無論您是在處理小型項目還是大型企業應用,IronPDF 都能提高生產力,同時避免使用過時或不受支持的庫所帶來的風險。IronPDF 專為商業應用設計,確保您的項目使用的是一個維護良好且受支持的庫。
在我們的實際動態網頁測試中,IronPDF 產生了最完整和準確的渲染。Syncfusion 丟失了導航和社區面板。Aspose.PDF 需要先下載 HTML,卻幾乎沒有渲染頁面。wkhtmltopdf 生成了文本和圖像,但沒有頁面的樣式,對於現代網站來說不合適。
對於現代 HTML-to-PDF 工作流程,渲染準確性和小而可讀的 API 的結合使 IronPDF 脫穎而出。
**體驗 IronPDF 的全功能套件,輕鬆將動態、重 CSS 的 HTML 轉換為 PDF。立即使用我們的[免費試用](trial-license)進行測試。**
<hr class="separator" />
## 觀看 C# 中的 HTML to PDF 教學視頻
<a name="video"></a>
使用 PDF 文檔,您可以訪問以下鏈接以了解如何[設置 Chrome 在瀏覽器中打開 PDF 而不是下載它們](https://support.google.com/chrome/answer/114662)。
!!!--LIBRARY_GET_STARTED_WITH_PRODUCT_TRIAL_EXTENDED_BLOCK--!!!
作為 IronPDF 的開發者,我們知道 HTML 轉 PDF 的轉換需要產生準確、高品質的結果以滿足客戶的期望。本 C# 教程將指導您為您的應用程式、專案和網站構建一個 HTML 轉 PDF 的轉換器。我們將開發一個 C# HTML 轉 PDF 的轉換器,IronPDF 生成的輸出 PDF 文件將與 Google Chrome 網頁瀏覽器生成的 PDF 完全一致。
如何:將 HTML 字串轉換為 PDF? 在 C# 中創建新的 PDF 文件是一項非常高效且有益的技能。
我們可以簡單地使用 ChromePdfRenderer.RenderHtmlAsPdf 方法將任何 HTML (HTML5) 字串轉換為 PDF。C# HTML 轉 PDF 渲染是由隨 IronPDF NuGet 套件一起提供的完整功能的 Google Chromium 引擎進行的。
using IronPdf;// ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome enginevar renderer = new ChromePdfRenderer();// Render an HTML string. The result is a PdfDocument held in memoryvar pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");// Write the PDF to diskpdf.SaveAs("pixel-perfect.pdf");
using IronPdf;
// ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engine
var renderer = new ChromePdfRenderer();
// Render an HTML string. The result is a PdfDocument held in memory
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Write the PDF to disk
pdf.SaveAs("pixel-perfect.pdf");
ImportsIronPdf' ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engineDim renderer = New ChromePdfRenderer()' Render an HTML string. The result is a PdfDocument held in memoryDim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")' Write the PDF to diskpdf.SaveAs("pixel-perfect.pdf")
Imports IronPdf
' ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engine
Dim renderer = New ChromePdfRenderer()
' Render an HTML string. The result is a PdfDocument held in memory
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")
' Write the PDF to disk
pdf.SaveAs("pixel-perfect.pdf")
RenderHtmlAsPdf 完全支持 HTML5、CSS3、JavaScript 和圖像。如果這些資產位於硬碟上,我們可能需要將 RenderHtmlAsPdf 的第二個參數設置為包含資產的目錄。此方法返回一個 PdfDocument 對象,這是一個用於保存 PDF 信息的類。
IronPDF 將精確渲染您的 HTML 如同在 Chrome 中顯示的一樣
我們有一個完整的教程,專門用於讓您設置 Chrome 進行完整的 HTML 調試,以確保當您選擇渲染時,您在編輯 HTML、CSS 和 JavaScript 時所看到的更改與 IronPDF 的輸出 PDF 完全一致。請在這裡找到教程:如何在 Chrome 中調試 HTML 以創建像素完美的 PDF。
基礎 URL 路徑 (BaseUrlOrPath 參數):
using IronPdf;var renderer = new ChromePdfRenderer();// The second argument is the base path. Relative URLs in the HTML (the image// below, but also stylesheets, scripts and fonts) are resolved against it.var pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", @"C:\MyProject\Assets\");pdf.SaveAs(@"C:\MyProject\Assets\output.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The second argument is the base path. Relative URLs in the HTML (the image
// below, but also stylesheets, scripts and fonts) are resolved against it.
var pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", @"C:\MyProject\Assets\");
pdf.SaveAs(@"C:\MyProject\Assets\output.pdf");
Dim renderer = New ChromePdfRenderer()' The second argument is the base path. Relative URLs in the HTML (the image' below, but also stylesheets, scripts and fonts) are resolved against it.Dim pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", "C:\MyProject\Assets\")pdf.SaveAs("C:\MyProject\Assets\output.pdf")
Dim renderer = New ChromePdfRenderer()
' The second argument is the base path. Relative URLs in the HTML (the image
' below, but also stylesheets, scripts and fonts) are resolved against it.
Dim pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", "C:\MyProject\Assets\")
pdf.SaveAs("C:\MyProject\Assets\output.pdf")
所有引用的 CSS 樣式表、圖像和 JavaScript 文件將相對於該基礎路徑,並可以保持在一個整潔且合乎邏輯的結構中。當然,您也可以選擇在線引用圖像、樣式表和資產,包括網頁字體如 Google Fonts 甚至 jQuery。
使用現有 URL 匯出 PDF | URL 轉 PDF
使用 C# 將現有 URL 渲染為 PDF 是非常高效且直觀的。這也允許團隊將 PDF 設計和後端 PDF 渲染工作分配給多個團隊。
讓我們在以下示例中渲染 Wikipedia.com 的一個頁面:
using IronPdf;var renderer = new ChromePdfRenderer();// Render a live web page straight from its URLvar pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");// The PDF is written next to the executablepdf.SaveAs("wikipedia.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a live web page straight from its URL
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
// The PDF is written next to the executable
pdf.SaveAs("wikipedia.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Render a live web page straight from its URLDim pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")' The PDF is written next to the executablepdf.SaveAs("wikipedia.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Render a live web page straight from its URL
Dim pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")
' The PDF is written next to the executable
pdf.SaveAs("wikipedia.pdf")
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Choose which CSS media type the page is rendered with.// Screen (the default) renders the page as a browser displays it;// Print applies the page's @media print rules instead.// renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Choose which CSS media type the page is rendered with.
// Screen (the default) renders the page as a browser displays it;
// Print applies the page's @media print rules instead.
// renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Choose which CSS media type the page is rendered with.' Screen (the default) renders the page as a browser displays it;' Print applies the page's @media print rules instead.' renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screenrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Choose which CSS media type the page is rendered with.
' Screen (the default) renders the page as a browser displays it;
' Print applies the page's @media print rules instead.
' renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
using IronPdf;var renderer = new ChromePdfRenderer();// Let the page's JavaScript run before the snapshot is takenrenderer.RenderingOptions.EnableJavaScript = true;// Give scripts and AJAX calls 500 milliseconds to finish before rendering.// For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait// for a signal instead of a fixed delay.renderer.RenderingOptions.WaitFor.RenderDelay(500);
using IronPdf;
var renderer = new ChromePdfRenderer();
// Let the page's JavaScript run before the snapshot is taken
renderer.RenderingOptions.EnableJavaScript = true;
// Give scripts and AJAX calls 500 milliseconds to finish before rendering.
// For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait
// for a signal instead of a fixed delay.
renderer.RenderingOptions.WaitFor.RenderDelay(500);
Dim renderer = New ChromePdfRenderer()' Let the page's JavaScript run before the snapshot is takenrenderer.RenderingOptions.EnableJavaScript = True' Give scripts and AJAX calls 500 milliseconds to finish before rendering.' For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait' for a signal instead of a fixed delay.renderer.RenderingOptions.WaitFor.RenderDelay(500)
Dim renderer = New ChromePdfRenderer()
' Let the page's JavaScript run before the snapshot is taken
renderer.RenderingOptions.EnableJavaScript = True
' Give scripts and AJAX calls 500 milliseconds to finish before rendering.
' For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait
' for a signal instead of a fixed delay.
renderer.RenderingOptions.WaitFor.RenderDelay(500)
using IronPdf;var renderer = new ChromePdfRenderer();// The chart is drawn by JavaScript, so let it run and give it a moment to finishrenderer.RenderingOptions.EnableJavaScript = true;renderer.RenderingOptions.WaitFor.RenderDelay(500);// Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScriptvar pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord");pdf.SaveAs("chart.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The chart is drawn by JavaScript, so let it run and give it a moment to finish
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);
// Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScript
var pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord");
pdf.SaveAs("chart.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' The chart is drawn by JavaScript, so let it run and give it a moment to finishrenderer.RenderingOptions.EnableJavaScript = Truerenderer.RenderingOptions.WaitFor.RenderDelay(500)' Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScriptDim pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord")pdf.SaveAs("chart.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' The chart is drawn by JavaScript, so let it run and give it a moment to finish
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(500)
' Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScript
Dim pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord")
pdf.SaveAs("chart.pdf")
響應式 CSS
使用響應式 CSS 在 .NET 中將 HTML 轉換為 PDF!響應式網頁 是為在瀏覽器中查看而設計的。IronPDF 不會在您的服務器操作系統中打開一個真正的瀏覽器窗口。沒有瀏覽器視口,響應式佈局可能會回退到其最窄的斷點。
我們建議使用 Print css 媒體類型來解決此問題。打印 CSS 通常不應該是響應式的。
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Responsive layouts are designed for a browser viewport, so render the page's// print stylesheet instead of its screen stylesheetrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Responsive layouts are designed for a browser viewport, so render the page's
// print stylesheet instead of its screen stylesheet
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
ImportsIronPdfImportsIronPdf.RenderingDim renderer As New ChromePdfRenderer()' Responsive layouts are designed for a browser viewport, so render the page's' print stylesheet instead of its screen stylesheetrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer As New ChromePdfRenderer()
' Responsive layouts are designed for a browser viewport, so render the page's
' print stylesheet instead of its screen stylesheet
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
從 HTML 頁面生成 PDF
我們還可以將硬碟上的任何 HTML 頁面渲染為 PDF。所有相對資產如 CSS、圖像和 js 將被渲染,就像文件是使用 file:// 協議打開的一樣。
using IronPdf;var renderer = new ChromePdfRenderer();// Render an HTML file from disk. Relative CSS, image and script paths// resolve against the file's own folder, as if opened with file://var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");pdf.SaveAs("Invoice.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render an HTML file from disk. Relative CSS, image and script paths
// resolve against the file's own folder, as if opened with file://
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
Dim renderer = New ChromePdfRenderer()' Render an HTML file from disk. Relative CSS, image and script paths' resolve against the file's own folder, as if opened with file://Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")pdf.SaveAs("Invoice.pdf")
Dim renderer = New ChromePdfRenderer()
' Render an HTML file from disk. Relative CSS, image and script paths
' resolve against the file's own folder, as if opened with file://
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
pdf.SaveAs("Invoice.pdf")
此方法的優勢在於允許開發者在開發過程中在瀏覽器中測試 HTML 內容。我們推薦使用 Chrome,因為它是 IronPDF 的渲染引擎所基於的網頁瀏覽器。
使用 IronPDF,頁眉和頁腳可以使用 TextHeaderFooter 類包含簡單的文本內容,或者使用 HtmlHeaderFooter 類包含圖像和豐富的 HTML 內容。
using IronPdf;using IronPdf.Rendering;// Create a PDF from an existing HTML file with rendering options set up frontvar renderer = new ChromePdfRenderer{RenderingOptions = new ChromePdfRenderOptions { // Margins are in millimetersMarginTop = 50,MarginBottom = 50, // Render the page's print stylesheetCssMediaType = PdfCssMediaType.Print, // Plain-text header: the document title, centered, above a divider lineTextHeader = new TextHeaderFooter {CenterText = "{pdf-title}",DrawDividerLine = true,FontSize = 16 }, // Plain-text footer: date and time on the left, page numbers on the rightTextFooter = new TextHeaderFooter {LeftText = "{date} {time}",RightText = "Page {page} of {total-pages}",DrawDividerLine = true,FontSize = 14 } }};var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");pdf.SaveAs("Invoice.pdf");// Open the result in the default PDF viewerSystem.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo{FileName = "Invoice.pdf",UseShellExecute = true});
using IronPdf;
using IronPdf.Rendering;
// Create a PDF from an existing HTML file with rendering options set up front
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
// Margins are in millimeters
MarginTop = 50,
MarginBottom = 50,
// Render the page's print stylesheet
CssMediaType = PdfCssMediaType.Print,
// Plain-text header: the document title, centered, above a divider line
TextHeader = new TextHeaderFooter
{
CenterText = "{pdf-title}",
DrawDividerLine = true,
FontSize = 16
},
// Plain-text footer: date and time on the left, page numbers on the right
TextFooter = new TextHeaderFooter
{
LeftText = "{date} {time}",
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true,
FontSize = 14
}
}
};
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
// Open the result in the default PDF viewer
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = "Invoice.pdf",
UseShellExecute = true
});
ImportsIronPdfImportsIronPdf.Rendering' Create a PDF from an existing HTML file with rendering options set up frontDim renderer = New ChromePdfRendererWith { .RenderingOptions = New ChromePdfRenderOptionsWith { ' Margins are in millimeters .MarginTop = 50, .MarginBottom = 50, ' Render the page's print stylesheet .CssMediaType = PdfCssMediaType.Print, ' Plain-text header: the document title, centered, above a divider line .TextHeader = New TextHeaderFooterWith { .CenterText = "{pdf-title}", .DrawDividerLine = True, .FontSize = 16 }, ' Plain-text footer: date and time on the left, page numbers on the right .TextFooter = New TextHeaderFooterWith { .LeftText = "{date} {time}", .RightText = "Page {page} of {total-pages}", .DrawDividerLine = True, .FontSize = 14 } }}Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")pdf.SaveAs("Invoice.pdf")' Open the result in the default PDF viewerSystem.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfoWith { .FileName = "Invoice.pdf", .UseShellExecute = True})
Imports IronPdf
Imports IronPdf.Rendering
' Create a PDF from an existing HTML file with rendering options set up front
Dim renderer = New ChromePdfRenderer With {
.RenderingOptions = New ChromePdfRenderOptions With {
' Margins are in millimeters
.MarginTop = 50,
.MarginBottom = 50,
' Render the page's print stylesheet
.CssMediaType = PdfCssMediaType.Print,
' Plain-text header: the document title, centered, above a divider line
.TextHeader = New TextHeaderFooter With {
.CenterText = "{pdf-title}",
.DrawDividerLine = True,
.FontSize = 16
},
' Plain-text footer: date and time on the left, page numbers on the right
.TextFooter = New TextHeaderFooter With {
.LeftText = "{date} {time}",
.RightText = "Page {page} of {total-pages}",
.DrawDividerLine = True,
.FontSize = 14
}
}
}
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
pdf.SaveAs("Invoice.pdf")
' Open the result in the default PDF viewer
System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo With {
.FileName = "Invoice.pdf",
.UseShellExecute = True
})
using IronPdf;var renderer = new ChromePdfRenderer();// An HTML footer can carry markup, styles and images.// {page} and {total-pages} are filled in for every page.renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter{HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"};
using IronPdf;
var renderer = new ChromePdfRenderer();
// An HTML footer can carry markup, styles and images.
// {page} and {total-pages} are filled in for every page.
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"
};
Dim renderer = New ChromePdfRenderer()' An HTML footer can carry markup, styles and images.' {page} and {total-pages} are filled in for every page.renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooterWith { .HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"}
Dim renderer = New ChromePdfRenderer()
' An HTML footer can carry markup, styles and images.
' {page} and {total-pages} are filled in for every page.
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"
}
PDF 頁眉和頁腳中的動態數據
我們可以使用佔位符將內容 "郵件合併" 到頁眉和頁腳的文本甚至 HTML 中,例如:
{page} 表示當前頁碼
{total-pages} 表示 PDF 的總頁數
{url} 表示從網頁渲染的 PDF 的 URL
{date} 表示今天的日期
{time} 表示當前時間
{html-title} 表示渲染的 HTML 文檔的 <title>
{pdf-title} 表示文檔標題,可以通過 ChromePdfRenderOptions 設置
C# HTML 轉 PDF 轉換設置
我們的用戶和客戶可能期望 PDF 內容以多種方式呈現。 ChromePdfRenderer 類包含一個 RenderingOptions 屬性,可用於設置這些選項。
例如,我們可能希望選擇只接受 "print" 樣式的 CSS3 指令:
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Render the page's @media print CSS rather than its screen stylesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf");
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Render the page's @media print CSS rather than its screen styles
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf");
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Render the page's @media print CSS rather than its screen stylesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Printrenderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf")
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Render the page's @media print CSS rather than its screen styles
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf")
using IronPdf;var renderer = new ChromePdfRenderer();// Page margins in millimeters. Larger margins leave room for headers and// footers; set them to 0 for edge-to-edge brochures and posters.renderer.RenderingOptions.MarginTop = 50;renderer.RenderingOptions.MarginBottom = 50;renderer.RenderingOptions.MarginLeft = 20;renderer.RenderingOptions.MarginRight = 20;
using IronPdf;
var renderer = new ChromePdfRenderer();
// Page margins in millimeters. Larger margins leave room for headers and
// footers; set them to 0 for edge-to-edge brochures and posters.
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Page margins in millimeters. Larger margins leave room for headers and' footers; set them to 0 for edge-to-edge brochures and posters.renderer.RenderingOptions.MarginTop = 50renderer.RenderingOptions.MarginBottom = 50renderer.RenderingOptions.MarginLeft = 20renderer.RenderingOptions.MarginRight = 20
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Page margins in millimeters. Larger margins leave room for headers and
' footers; set them to 0 for edge-to-edge brochures and posters.
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
我們可能希望開啟或關閉 HTML 元素的背景圖像:
using IronPdf;var renderer = new ChromePdfRenderer();// Include CSS background colors and images in the PDF (set false to drop them)renderer.RenderingOptions.PrintHtmlBackgrounds = true;var pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>");pdf.SaveAs("output.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Include CSS background colors and images in the PDF (set false to drop them)
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
var pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>");
pdf.SaveAs("output.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Include CSS background colors and images in the PDF (set false to drop them)renderer.RenderingOptions.PrintHtmlBackgrounds = TrueDim pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>")pdf.SaveAs("output.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Include CSS background colors and images in the PDF (set false to drop them)
renderer.RenderingOptions.PrintHtmlBackgrounds = True
Dim pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>")
pdf.SaveAs("output.pdf")
還可以將我們的輸出 PDF 設置為在任何虛擬紙張尺寸上渲染 - 包括縱向和橫向尺寸,甚至可以設置為毫米或英寸的自定義尺寸。
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Standard paper sizes and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4;renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;// Or a custom size, in millimeters or inches// renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297);// renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Standard paper sizes and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Or a custom size, in millimeters or inches
// renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297);
// renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Standard paper sizes and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape' Or a custom size, in millimeters or inches' renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297)' renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11)
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Standard paper sizes and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
' Or a custom size, in millimeters or inches
' renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297)
' renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11)
與其模板化 PDF 文件本身,使用 IronPDF 我們可以使用現有的、經過驗證的技術來模板化我們的 HTML。當 HTML 模板與查詢字串或數據庫中的數據結合時,我們最終得到一個動態生成的 PDF 文件。
在最簡單的情況下,使用 C# 的 String.Format 方法對於基本示例是有效的。
using IronPdf;var renderer = new ChromePdfRenderer();// Insert a value into an HTML template with string.Formatstring html = string.Format("<h1>Hello {0}!</h1>", "World");var pdf = renderer.RenderHtmlAsPdf(html);pdf.SaveAs("Hello.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Insert a value into an HTML template with string.Format
string html = string.Format("<h1>Hello {0}!</h1>", "World");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Hello.pdf");
Dim renderer As New ChromePdfRenderer()' Insert a value into an HTML template with string.FormatDim html AsString = String.Format("<h1>Hello {0}!</h1>", "World")Dim pdf = renderer.RenderHtmlAsPdf(html)pdf.SaveAs("Hello.pdf")
Dim renderer As New ChromePdfRenderer()
' Insert a value into an HTML template with string.Format
Dim html As String = String.Format("<h1>Hello {0}!</h1>", "World")
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("Hello.pdf")
如果 HTML 文件較長,我們通常可以使用任意佔位符如 [[NAME]],然後用真實數據替換它們。
以下示例將創建 3 個 PDF,每個 PDF 都個性化為一個用戶。
using IronPdf;var renderer = new ChromePdfRenderer();// A template with a placeholder to replacevar htmlTemplate = "<p>[[NAME]]</p>";var names = new[] { "John", "James", "Jenny" };// One personalized PDF per nameforeach (var name in names){ var htmlInstance = htmlTemplate.Replace("[[NAME]]", name); var pdf = renderer.RenderHtmlAsPdf(htmlInstance); pdf.SaveAs(name + ".pdf");}
using IronPdf;
var renderer = new ChromePdfRenderer();
// A template with a placeholder to replace
var htmlTemplate = "<p>[[NAME]]</p>";
var names = new[] { "John", "James", "Jenny" };
// One personalized PDF per name
foreach (var name in names)
{
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
pdf.SaveAs(name + ".pdf");
}
ImportsIronPdfDim renderer = New ChromePdfRenderer()' A template with a placeholder to replaceDim htmlTemplate = "<p>[[NAME]]</p>"Dim names = New String() {"John", "James", "Jenny"}' One personalized PDF per nameFor Each name In names Dim htmlInstance = htmlTemplate.Replace("[[NAME]]", name) Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance) pdf.SaveAs(name & ".pdf")Next
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' A template with a placeholder to replace
Dim htmlTemplate = "<p>[[NAME]]</p>"
Dim names = New String() {"John", "James", "Jenny"}
' One personalized PDF per name
For Each name In names
Dim htmlInstance = htmlTemplate.Replace("[[NAME]]", name)
Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance)
pdf.SaveAs(name & ".pdf")
Next
使用 Handlebars.NET 進行高級模板化
將 C# 數據與 HTML 合併以生成 PDF 的一種複雜方法是使用 Handlebars 模板語言。
Handlebars 使得從 C# 對象和類實例(包括數據庫記錄)創建動態 HTML 成為可能。Handlebars 特別有效,當查詢可能返回未知數量的行時,例如在生成發票時。
using HandlebarsDotNet;// A Handlebars template with two placeholdersvar source = @"<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>";// Compile it once, then fill it with any object that has matching propertiesvar template = Handlebars.Compile(source);var data = new { title = "My new post", body = "This is my first post!" };string html = template(data);// html now contains://// <div class="entry">// <h1>My new post</h1>// <div class="body">// This is my first post!// </div>// </div>
using HandlebarsDotNet;
// A Handlebars template with two placeholders
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile it once, then fill it with any object that has matching properties
var template = Handlebars.Compile(source);
var data = new { title = "My new post", body = "This is my first post!" };
string html = template(data);
// html now contains:
//
// <div class="entry">
// <h1>My new post</h1>
// <div class="body">
// This is my first post!
// </div>
// </div>
ImportsHandlebarsDotNet' A Handlebars template with two placeholdersDim source = "<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>"' Compile it once, then fill it with any object that has matching propertiesDim template = Handlebars.Compile(source)Dim data = New With {.title = "My new post", .body = "This is my first post!"}Dim html AsString = template(data)' html now contains:'' <div class="entry">' <h1>My new post</h1>' <div class="body">' This is my first post!' </div>' </div>
Imports HandlebarsDotNet
' A Handlebars template with two placeholders
Dim source = "<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>"
' Compile it once, then fill it with any object that has matching properties
Dim template = Handlebars.Compile(source)
Dim data = New With {.title = "My new post", .body = "This is my first post!"}
Dim html As String = template(data)
' html now contains:
'
' <div class="entry">
' <h1>My new post</h1>
' <div class="body">
' This is my first post!
' </div>
' </div>
要渲染此 HTML,我們可以簡單地使用 RenderHtmlAsPdf 方法。
using HandlebarsDotNet;using IronPdf;// Fill the Handlebars template, then render the resulting HTMLvar template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>");string html = template(new { title = "My new post", body = "This is my first post!" });var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf(html);pdf.SaveAs("Handlebars.pdf");
using HandlebarsDotNet;
using IronPdf;
// Fill the Handlebars template, then render the resulting HTML
var template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>");
string html = template(new { title = "My new post", body = "This is my first post!" });
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Handlebars.pdf");
ImportsHandlebarsDotNetImportsIronPdf' Fill the Handlebars template, then render the resulting HTMLDim template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>")Dim html AsString = template(New With {.title = "My new post", .body = "This is my first post!"})Dim renderer = New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf(html)pdf.SaveAs("Handlebars.pdf")
Imports HandlebarsDotNet
Imports IronPdf
' Fill the Handlebars template, then render the resulting HTML
Dim template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>")
Dim html As String = template(New With {.title = "My new post", .body = "This is my first post!"})
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("Handlebars.pdf")
using IronPdf;var renderer = new ChromePdfRenderer();// The document body, rendered from a web pagevar pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");// Prepend an existing PDF as the cover page. Merge returns a new document.var cover = PdfDocument.FromFile("CoverPage.pdf");var pdfMerged = PdfDocument.Merge(cover, pdf);pdfMerged.SaveAs("Combined.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The document body, rendered from a web page
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");
// Prepend an existing PDF as the cover page. Merge returns a new document.
var cover = PdfDocument.FromFile("CoverPage.pdf");
var pdfMerged = PdfDocument.Merge(cover, pdf);
pdfMerged.SaveAs("Combined.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' The document body, rendered from a web pageDim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/")' Prepend an existing PDF as the cover page. Merge returns a new document.Dim cover = PdfDocument.FromFile("CoverPage.pdf")Dim pdfMerged = PdfDocument.Merge(cover, pdf)pdfMerged.SaveAs("Combined.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' The document body, rendered from a web page
Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/")
' Prepend an existing PDF as the cover page. Merge returns a new document.
Dim cover = PdfDocument.FromFile("CoverPage.pdf")
Dim pdfMerged = PdfDocument.Merge(cover, pdf)
pdfMerged.SaveAs("Combined.pdf")
IronPDF 支持的最後一個 C# PDF 功能是為文件添加水印。這可以用來在每頁添加一個通知,表明文件是 "機密" 或 "樣本"。
using IronPdf;using IronPdf.Editing;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");// Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.// The watermark is HTML, so any markup, styling or image can be used.pdf.ApplyWatermark( "<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation: 30, opacity: 50, verticalAlignment: VerticalAlignment.Middle, horizontalAlignment: HorizontalAlignment.Center);pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
using IronPdf;
using IronPdf.Editing;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.
// The watermark is HTML, so any markup, styling or image can be used.
pdf.ApplyWatermark(
"<h2 style='color:red; font-size:50px'>SAMPLE</h2>",
rotation: 30,
opacity: 50,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
ImportsIronPdfImportsIronPdf.EditingDim renderer = New ChromePdfRenderer()Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")' Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.' The watermark is HTML, so any markup, styling or image can be used.pdf.ApplyWatermark("<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation:=30, opacity:=50, verticalAlignment:=VerticalAlignment.Middle, horizontalAlignment:=HorizontalAlignment.Center)pdf.SaveAs("C:\Path\To\Watermarked.pdf")
Imports IronPdf
Imports IronPdf.Editing
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
' Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.
' The watermark is HTML, so any markup, styling or image can be used.
pdf.ApplyWatermark("<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation:=30, opacity:=50, verticalAlignment:=VerticalAlignment.Middle, horizontalAlignment:=HorizontalAlignment.Center)
pdf.SaveAs("C:\Path\To\Watermarked.pdf")