使用IRON SUITE

從HTML文件在C#中創建PDF

IronPDF 可程式化地將 HTML 轉換為 PDF 文件。

如何在 C# 中建立 PDF - HTML 轉 PDF 範例

本文的完整源代碼可作為 C# HTML 轉 PDF 專案源代碼下載

以下教程將指導您如何使用 IronPDF 來作為 C# PDF 生成器。 它涵蓋了基礎以及許多進階 C# PDF 主題。

HTML 轉 PDF 操作指南

此演示將引導您了解如何使用 IronPDF 的範例。 從 Iron Software 請求更多使用案例演示

該演示包括 Hello World、RenderHtmlAsPdfRenderUrlAsPdf 範例。 所有範例都可以在 IronPDF Demo 解決方案的對應項目下找到。

步驟 1: 安裝

您可以通過 NuGet 安裝 IronPDF。 The package name is IronPDF NuGet Package.

Or you can use the Direct Library Download.

步驟 2:Hello World

一旦您將 IronPDF 安裝並引用到您的專案中,您可以立即通過輸入幾個字串開始使用它:

// Create a new instance of ChromePdfRenderer
var chromePdfRenderer = new ChromePdfRenderer();
// Create a new instance of ChromePdfRenderer
var chromePdfRenderer = new ChromePdfRenderer();
' Create a new instance of ChromePdfRenderer
Dim chromePdfRenderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

然後如果您需要將 HTML 轉換為 PDF:

// Define HTML content to turn into PDF
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";

// Render the HTML string as a PDF
using var pdf = chromePdfRenderer.RenderHtmlAsPdf(html);

// Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
// Define HTML content to turn into PDF
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";

// Render the HTML string as a PDF
using var pdf = chromePdfRenderer.RenderHtmlAsPdf(html);

// Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
' Define HTML content to turn into PDF
Dim html = "<h1>Hello World!</h1><br><p>This is IronPdf.</p>"

' Render the HTML string as a PDF
Dim pdf = chromePdfRenderer.RenderHtmlAsPdf(html)

' Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"))
$vbLabelText   $csharpLabel

或者如果您想將網頁轉換為 PDF 文件:

// URI of the page to turn into PDF
var uri = new Uri("http://www.google.com/ncr");

// Render the webpage as a PDF
using var pdf = chromePdfRenderer.RenderUrlAsPdf(uri);

// Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"));
// URI of the page to turn into PDF
var uri = new Uri("http://www.google.com/ncr");

// Render the webpage as a PDF
using var pdf = chromePdfRenderer.RenderUrlAsPdf(uri);

// Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"));
' URI of the page to turn into PDF
Dim uri As New Uri("http://www.google.com/ncr")

' Render the webpage as a PDF
Dim pdf = chromePdfRenderer.RenderUrlAsPdf(uri)

' Save the resulting PDF to a file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"))
$vbLabelText   $csharpLabel

就是這樣! 相應的結果是:

在 C# 中從 HTML 文件建立 PDF,圖 1:將 HTML 轉換為 PDF 的結果 將 HTML 轉換為 PDF 的結果**

在 C# 中從 HTML 文件建立 PDF,圖 2:將網頁轉換為 PDF 的結果 將網頁轉換為 PDF 的結果

請在 IronPDFDemo.HelloWorld 專案下找到代碼範例。

步驟 3:RenderHtmlAsPdf

範例 1

為了評估更真實的範例,假設需要將 HTML 發票轉換為 PDF。 以下是如何做到這一點的代碼。

注意:您可以在 IronPDFDemo.DemoWebSite 專案 (~/Static/TestInvoice1.html) 下找到發票 HTML。 請注意,發票具有針對 "print" 媒體類型的自定義 CSS。

源發票在瀏覽器中的顯示如下:

在 C# 中從 HTML 文件建立 PDF,圖 4:


要將其轉換為 PDF 文件,使用了類似於前述 HelloWorld 範例的代碼,區別在於源 HTML 文件。

// Read HTML from file
var html = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "TestInvoice1.html"));
var chromePdfRenderer = new ChromePdfRenderer();
using var pdf = chromePdfRenderer.RenderHtmlAsPdf(html);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRendererExample1.Pdf"));
// Read HTML from file
var html = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "TestInvoice1.html"));
var chromePdfRenderer = new ChromePdfRenderer();
using var pdf = chromePdfRenderer.RenderHtmlAsPdf(html);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRendererExample1.Pdf"));
' Read HTML from file
Dim html = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "TestInvoice1.html"))
Dim chromePdfRenderer As New ChromePdfRenderer()
Dim pdf = chromePdfRenderer.RenderHtmlAsPdf(html)
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRendererExample1.Pdf"))
$vbLabelText   $csharpLabel

結果是:

在 C# 中從 HTML 文件建立 PDF,圖 5:從 HTML 生成 PDF 文件 從 HTML 生成 PDF 文件

看起來很棒! 請在 IronPDFDemo.RenderHtmlAdPdfDemo 專案下找到代碼範例。

另請查看此問題:如何使用 HTML 文件或字串與位元組數組於 IronPDF

範例 2

本節將幫助自定義來自範例 1 的結果 PDF。例如,它將添加自定義邊距、具有文件標題的頁眉、具有創建日期和頁碼的頁腳,以及標準發票具有的 "print" 媒體類型的自定義 CSS。 為了做到這一點,初始化 ChromePdfRenderOptions 的實例並傳遞給 ChromePdfRenderer 構造函數。

// Configure rendering options with margins, headers, and footers
var pdfRenderingOptions = new ChromePdfRenderOptions()
{
    MarginTop = 50,
    MarginBottom = 50,
    TextHeader = new TextHeaderFooter()
    {
        CenterText = "{pdf-title}",
        DrawDividerLine = true,
        FontSize = 16
    },
    TextFooter = new TextHeaderFooter()
    {
        LeftText = "{date} {time}",
        RightText = "Page {page} of {total-pages}",
        DrawDividerLine = true,
        FontSize = 14
    },
    CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
};

var chromePdfRenderer = new ChromePdfRenderer(pdfRenderingOptions);
// Configure rendering options with margins, headers, and footers
var pdfRenderingOptions = new ChromePdfRenderOptions()
{
    MarginTop = 50,
    MarginBottom = 50,
    TextHeader = new TextHeaderFooter()
    {
        CenterText = "{pdf-title}",
        DrawDividerLine = true,
        FontSize = 16
    },
    TextFooter = new TextHeaderFooter()
    {
        LeftText = "{date} {time}",
        RightText = "Page {page} of {total-pages}",
        DrawDividerLine = true,
        FontSize = 14
    },
    CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
};

var chromePdfRenderer = new ChromePdfRenderer(pdfRenderingOptions);
' Configure rendering options with margins, headers, and footers
Dim pdfRenderingOptions = New ChromePdfRenderOptions() With {
	.MarginTop = 50,
	.MarginBottom = 50,
	.TextHeader = New TextHeaderFooter() With {
		.CenterText = "{pdf-title}",
		.DrawDividerLine = True,
		.FontSize = 16
	},
	.TextFooter = New TextHeaderFooter() With {
		.LeftText = "{date} {time}",
		.RightText = "Page {page} of {total-pages}",
		.DrawDividerLine = True,
		.FontSize = 14
	},
	.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
}

Dim chromePdfRenderer As New ChromePdfRenderer(pdfRenderingOptions)
$vbLabelText   $csharpLabel

提示:而不是在構造函數中作為參數傳遞選項,您可以為 ChromePdfRenderer 實例設置相應字段:

var chromePdfRenderer = new ChromePdfRenderer();
chromePdfRenderer.RenderingOptions = pdfRenderingOptions;
var chromePdfRenderer = new ChromePdfRenderer();
chromePdfRenderer.RenderingOptions = pdfRenderingOptions;
Dim chromePdfRenderer As New ChromePdfRenderer()
chromePdfRenderer.RenderingOptions = pdfRenderingOptions
$vbLabelText   $csharpLabel

注意:頁眉和頁腳功能合併功能,這意味著所有合併字段 ({pdf-title}) 可以用相應數據填充。

其餘的代碼與範例 1 相同。結果是:

在 C# 中從 HTML 文件建立 PDF,圖 6:生成具有頁眉和頁腳的發票 生成具有頁眉和頁腳的發票

自定義邊距、頁眉、頁腳和 "print" 媒體類型的 CSS 現在就緒。 請在 IronPDFDemo.RenderHtmlAdPdfDemo 專案下找到代碼範例。 更多設置信息可以在 IronPDF API 參考 中找到。

步驟 4:RenderUrlAsPdf

設置

若要執行本節中的範例,您需要本地託管 IronPDFDemo.DemoWebSite。 在 IIS Express 中操作方法如下:

  1. 導航至 DemoWebSite
  2. 右鍵點擊 > 設置為啟動專案
  3. 在不調試的情況下開始 (Ctrl+F5)
  4. 導航至您的 {baseurl}/Static/TestInvoice1.html 以確保其正常運行。 這是 URL http://localhost:51169/Static/TestInvoice1.html (如果您未更改對應的專案設置,將與您相同)。

範例 1

在本節中,使用與 HelloWorld 範例相同的代碼將託管的 DemoWebSite 發票轉換為 PDF。 不同之處在於所託管的 URL:

// URL of the hosted invoice webpage
var uri = new Uri("http://localhost:51169/Static/TestInvoice1.html");
var urlToPdf = new ChromePdfRenderer();
using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample1.Pdf"));
// URL of the hosted invoice webpage
var uri = new Uri("http://localhost:51169/Static/TestInvoice1.html");
var urlToPdf = new ChromePdfRenderer();
using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample1.Pdf"));
' URL of the hosted invoice webpage
Dim uri As New Uri("http://localhost:51169/Static/TestInvoice1.html")
Dim urlToPdf = New ChromePdfRenderer()
Dim pdf = urlToPdf.RenderUrlAsPdf(uri)
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample1.Pdf"))
$vbLabelText   $csharpLabel

結果是:

在 C# 中從 HTML 文件建立 PDF,圖 7:將託管的網站生成為 PDF 將託管的網站生成為 PDF

這很棒,外觀符合預期。 請在 IronPDFDemo.RenderUrlAsPdfDemo 專案中找到代碼範例。

範例 2

許多網站往往受限於身份認證方法。 本節在過程中使用提供的用戶名和密碼來呈現具有一些自定義選項的 PDF 檔案:自定義邊距、具有文件標題的頁眉、具有創建日期和頁碼的頁腳,和 "print" 媒體類型的自定義 CSS。 此發票的 URL 位於 http://localhost:51169/Invoice

訪問 http://localhost:51169/Invoice 導致出現 "需要身份核實" 表單:

在 C# 中從 HTML 文件建立 PDF,圖 8:需要身份核實表單 需要身份核實表單

注意:憑證為 "testUser"/"testPassword"。

那麼如何繞過身份認證? 通過設置 HttpLoginCredentials

// URL of the protected invoice webpage
var uri = new Uri("http://localhost:51169/Invoice");

// Configure renderer with login credentials to bypass authentication
var urlToPdf = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions()
    {
        MarginTop = 50,
        MarginBottom = 50,
        TextHeader = new TextHeaderFooter()
        {
            CenterText = "{pdf-title}",
            DrawDividerLine = true,
            FontSize = 16
        },
        TextFooter = new TextHeaderFooter()
        {
            LeftText = "{date} {time}",
            RightText = "Page {page} of {total-pages}",
            DrawDividerLine = true,
            FontSize = 14
        },
        CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
    },

    // Set login credentials to bypass basic authentication
    LoginCredentials = new HttpLoginCredentials()
    {
        NetworkUsername = "testUser",
        NetworkPassword = "testPassword"
    }
};

using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample2.Pdf"));
// URL of the protected invoice webpage
var uri = new Uri("http://localhost:51169/Invoice");

// Configure renderer with login credentials to bypass authentication
var urlToPdf = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions()
    {
        MarginTop = 50,
        MarginBottom = 50,
        TextHeader = new TextHeaderFooter()
        {
            CenterText = "{pdf-title}",
            DrawDividerLine = true,
            FontSize = 16
        },
        TextFooter = new TextHeaderFooter()
        {
            LeftText = "{date} {time}",
            RightText = "Page {page} of {total-pages}",
            DrawDividerLine = true,
            FontSize = 14
        },
        CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
    },

    // Set login credentials to bypass basic authentication
    LoginCredentials = new HttpLoginCredentials()
    {
        NetworkUsername = "testUser",
        NetworkPassword = "testPassword"
    }
};

using var pdf = urlToPdf.RenderUrlAsPdf(uri);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample2.Pdf"));
' URL of the protected invoice webpage
Dim uri As New Uri("http://localhost:51169/Invoice")

' Configure renderer with login credentials to bypass authentication
Dim urlToPdf = New ChromePdfRenderer With {
	.RenderingOptions = New ChromePdfRenderOptions() With {
		.MarginTop = 50,
		.MarginBottom = 50,
		.TextHeader = New TextHeaderFooter() With {
			.CenterText = "{pdf-title}",
			.DrawDividerLine = True,
			.FontSize = 16
		},
		.TextFooter = New TextHeaderFooter() With {
			.LeftText = "{date} {time}",
			.RightText = "Page {page} of {total-pages}",
			.DrawDividerLine = True,
			.FontSize = 14
		},
		.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
	},
	.LoginCredentials = New HttpLoginCredentials() With {
		.NetworkUsername = "testUser",
		.NetworkPassword = "testPassword"
	}
}

Dim pdf = urlToPdf.RenderUrlAsPdf(uri)
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdfExample2.Pdf"))
$vbLabelText   $csharpLabel

注意:使用與 ChromePdfRenderer 範例 2 相同的自定義設置。

結果是:

在 C# 中從 HTML 文件建立 PDF,圖 9:使用憑證將 HTML 網站生成為 PDF 文件 使用憑證將 HTML 網站生成為 PDF 文件

一切準備就緒。 請在 IronPDFDemo.RenderUrlAsPdfDemo 專案中找到代碼範例。 如果您想知道沒有 HttpLoginCredentials的結果會是怎樣,請注意如下:

在 C# 中從 HTML 文件建立 PDF,圖 10:在沒有憑證的情況下生成空 PDF 文件 在沒有憑證的情況下生成空 PDF 文件

另請參閱 Jean 的 .NET HTML 轉 PDF 教程

此外,IronPDF 還可以以不同方式與 PDF 互動: