使用 IRONPDF

從 HTML 文件在 C# 中建立 PDF

已更新 2024年1月20日
分享:

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

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

一個這種技術的簡單範例可以是 下載和查看這整篇文章的原始碼可用於C#作為 C# HTML 轉 PDF 專案原碼下載以下教程將引導您完成使用 IronPDF 的過程 PDF生成器C#. 它涵蓋了基礎知識以及許多高級的 C# PDF 主題。

HTML 轉 PDF 操作指南

這個演示將帶您通過一些如何使用 IronPDF 的示例。 請隨時要求任何其他使用案例演示演示包括 Hello World RenderHtmlAsPdfRenderUrlAsPdf 範例。所有範例都可以在 IronPDF Demo 解決方案中的相應專案下找到。

第一步:安裝

您可以通過 NuGet 安裝 IronPDF。套件名稱是 IronPDF或者您可以使用 直接連結下載資料庫.

第 2 步:Hello World

一旦你在專案裡安裝並引用 IronPDF,就可以立刻使用它,只需輸入幾個字串:

var ChromePdfRenderer = new ChromePdfRenderer();  // new instance of ChromePdfRenderer
var ChromePdfRenderer = new ChromePdfRenderer();  // new instance of ChromePdfRenderer
Dim ChromePdfRenderer As New ChromePdfRenderer() ' new instance of ChromePdfRenderer
VB   C#

那麼如果你需要將 HTML 轉換為 PDF

// html to turn into pdf
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";
// turn html to pdf
using var pdf = ChromePdfRenderer.RenderHtmlAsPdf(html);
// save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
// html to turn into pdf
var html = @"<h1>Hello World!</h1><br><p>This is IronPdf.</p>";
// turn html to pdf
using var pdf = ChromePdfRenderer.RenderHtmlAsPdf(html);
// save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"));
' html to turn into pdf
Dim html = "<h1>Hello World!</h1><br><p>This is IronPdf.</p>"
' turn html to pdf
Dim pdf = ChromePdfRenderer.RenderHtmlAsPdf(html)
' save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "ChromePdfRenderer.Pdf"))
VB   C#

或者如果你想將網頁轉換成 PDF 文件

// uri of the page to turn into pdf
var uri = new Uri("http://www.google.com/ncr");
// turn page into pdf
pdf = ChromePdfRenderer.RenderUrlAsPdf(uri);
// save resulting pdf into 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");
// turn page into pdf
pdf = ChromePdfRenderer.RenderUrlAsPdf(uri);
// save resulting pdf into 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")
' turn page into pdf
pdf = ChromePdfRenderer.RenderUrlAsPdf(uri)
' save resulting pdf into file
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "UrlToPdf.Pdf"))
VB   C#

就是這樣!

相應的結果是:

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

將 HTML 轉換為 PDF的結果

使用 C# 從 HTML 檔案建立 PDF,圖 2:將網頁轉換成 PDF 的結果

將網頁轉換為 PDF 的結果

請在 IronPDFDemo.HelloWorld 專案中找到代碼示例。

步驟 3:RenderHtmlAsPdf

示例 1

為了評估一個更實際的例子,假設有一個 HTML 發票需要轉換為 PDF。以下是如何實現的代碼。

注意: 你可以在 IronPDFDemo.DemoWebSite 項目中找到發票的 HTML。 (~/Static/TestInvoice1.html)請注意,該發票具有針對「打印」媒體類型的自定義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"))
VB   C#

結果是:

從HTML文件中用C#創建PDF,圖5:從HTML生成PDF文件

從 HTML 生成 PDF 文件

看起來很棒! 請找到IronPDFDemo.RenderHtmlAdPdfDemo專案中的程式碼示例。

也請查看此問題於 如何在 IronPDF 中使用帶有字節數組的 HTML 文件或字串

範例 2

本節將幫助自訂範例 1 中產生的 PDF。例如,它將添加自訂邊距、具有文件標題的頁首、包含創建日期和頁碼的頁尾,以及一些標準發票使用的自訂 "print" 媒體類型 CSS。為此,需要初始化 ChromePdfRenderOptions 的實例並將其傳遞到 ChromePdfRenderer 構造函數中。

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);
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);
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)
VB   C#

提示:與其在構造函數中傳遞參數,不如設定 ChromePdfRenderer 實例的相應欄位:

var chromePdfRenderer = new ChromePdfRenderer();
chromePdfRenderer.RenderingOptions = pdfRenderingOptions;
var chromePdfRenderer = new ChromePdfRenderer();
chromePdfRenderer.RenderingOptions = pdfRenderingOptions;
Dim chromePdfRenderer As New ChromePdfRenderer()
chromePdfRenderer.RenderingOptions = pdfRenderingOptions
VB   C#

注意:頁首和頁尾功能合併功能,這意味著所有合併欄位 ({頁面}, {總頁數}, {網址}, {日期}, {時間}, {html-標題}, {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)

    1. 導航到您的 {基本網址}/Static/TestInvoice1.html 以確保它正常運作。這是 URL http://localhost:51169/Static/TestInvoice1.html (如果您不更改相应的項目設定,對您來說也會是相同的情况。).

範例 1

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

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"));
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"));
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"))
VB   C#

結果是:

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

將托管的網站生成為 PDF

這非常棒,看起來也符合預期。請在 IronPDFDemo.RenderUrlAsPdfDemo 項目中查看代碼範例。

示例2

許多網站通常受到一種身份驗證方法的保護。本節在使用過程中使用提供的用戶名和密碼來渲染具有一些自定義的PDF文件:自定義邊距、包含文件標題的頁眉、包含創建日期和頁面的頁腳,以及適用於“打印”媒體類型的自定義CSS。發票的URL在http://localhost:51169/Invoice.

訪問 http://localhost:51169/Invoice會出現「需要身份驗證」表單:

從 HTML 文件創建 PDF(C#);圖 8:需要身份驗證表單

需要驗證的表單

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

那麼如何繞過驗證?通過設置 HttpLoginCredentials

var uri = new Uri("http://localhost:51169/Invoice");
var urlToPdf = new ChromePdfRenderer
{
    PrintOptions = new ChromePdfRenderer()
    {
        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
    },
    // setting 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"));
var uri = new Uri("http://localhost:51169/Invoice");
var urlToPdf = new ChromePdfRenderer
{
    PrintOptions = new ChromePdfRenderer()
    {
        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
    },
    // setting 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"));
Dim uri As New Uri("http://localhost:51169/Invoice")
Dim urlToPdf = New ChromePdfRenderer With {
	.PrintOptions = New ChromePdfRenderer() 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"))
VB   C#

注意: 這裡使用的自定義設置與 ChromePdfRenderer Example2 相同。

結果是:

從 HTML 檔案在 C# 中建立 PDF,第 9 圖:生成具有憑證的 HTML 網站為 PDF 檔案

生成具有憑證的 HTML 網站至PDF文件

一切就緒。請在 IronPDFDemo.RenderUrlAsPdfDemo 專案下找到代碼範例。如果您好奇結果在沒有 HttpLoginCredentials 的情況下會是怎樣,請參閱下方:

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

生成無憑證的空 PDF 文件

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

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

< 上一頁
在C#生成PDF檔案
下一個 >
如何使用 C# 和 IronPDF 在 ASP.NET 中檢視 PDF 檔案

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >