如何使用基礎網址和資產編碼

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF 是在 .NET 專案中生成 PDF 文件的有用工具。

這個程式庫的一個常見用途是 "HTML to PDF" 渲染 - 使用 HTML 作為設計語言來渲染 PDF 文件。一個合乎邏輯的問題是:我們如何在 HTML 到 PDF 轉換中使用 CSS 樣式表和圖像檔案


C# NuGet 程式庫用于 PDF

安裝與 NuGet

Install-Package IronPdf
Java PDF JAR

下載 DLL

下載DLL

手動安裝到您的項目中

C# NuGet 程式庫用于 PDF

安裝與 NuGet

Install-Package IronPdf
Java PDF JAR

下載 DLL

下載DLL

手動安裝到您的項目中

立即開始在您的專案中使用IronPDF,並享受免費試用。

第一步:
green arrow pointer

查看 IronPDFNuget 快速安裝和部署。已被下載超過800萬次,它正用C#改變PDF。

C# NuGet 程式庫用于 PDF nuget.org/packages/IronPdf/
Install-Package IronPdf

請考慮安裝 IronPDF DLL 直接下載並手動安裝到您的專案或GAC表單: IronPdf.zip

手動安裝到您的項目中

下載DLL

從 HTML 字串渲染 PDF 及使用圖片和 CSS 資源

在進行 HTML 字串到 PDF 的轉換時,設置 BaseUrlOrPath 參數對於 CSS、JavaScript 文件和圖片等資源非常重要。BaseUrlOrPath 指定了所有資源將相對載入的基礎 URL。

這可以是一個以 'http' 開頭的網頁 URL 來載入遠端資源,也可以是一個本地文件路徑,用於存取磁碟上的資源。正確設置 BaseUrlOrPath 確保在轉換過程中正確載入資源。

:path=/static-assets/pdf/content-code-examples/how-to/base-urls-baseurl.cs
using IronPdf;

// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

string baseUrl = @"C:\site\assets\";
string html = "<img src='icons/iron.png'>";

// Render HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(html, baseUrl);

// Export PDF
pdf.SaveAs("html-with-assets.pdf");
Imports IronPdf

' Instantiate ChromePdfRenderer
Private renderer As New ChromePdfRenderer()

Private baseUrl As String = "C:\site\assets\"
Private html As String = "<img src='icons/iron.png'>"

' Render HTML to PDF
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf(html, baseUrl)

' Export PDF
pdf.SaveAs("html-with-assets.pdf")
VB   C#

MVC 應用程式

在 MVC 應用程式中,指定圖片檔案路徑可能會很具挑戰性。為了確保 IronPDF 能夠找到圖片並在網站上正確顯示,需要正確配置 IronPDF 的 baseUrl 以及 HTML 字串中的 src="" 屬性。

在下列檔案結構設置中

  • baseUrlOrPath 設置為 @"wwwroot/image"
  • src 屬性設置為 "../image/Sample.jpg"
wwwroot
└── image
    ├── Sample.jpg
    └── Sample.png

例如:

:path=/static-assets/pdf/content-code-examples/how-to/base-mvc.cs
// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Render HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf("html.Result", @"wwwroot/image");
' Instantiate ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()

' Render HTML to PDF
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("html.Result", "wwwroot/image")
VB   C#
<img src="../image/Sample.jpg"/>
<img src="../image/Sample.png"/>
<img src="../image/Sample.jpg"/>
<img src="../image/Sample.png"/>
HTML

在繼續之前

無效的檔案路徑格式

以下格式在 Chrome 瀏覽器上瀏覽時運作良好,但在 MVC 應用中指向錯誤的資料夾目錄。如果在 RenderHtmlAsPdf 方法中提供 baseUrlOrPath,這些格式仍與 IronPDF 一起運作:

<img src="image/footer.png"/>  
<img src="./image/footer.png"/>  
<img src="image/footer.png"/>  
<img src="./image/footer.png"/>  
HTML

另一方面,這些格式在 MVC 應用程式中運作良好,但當涉及到檔案路徑時,這些格式在 IronPDF 中就不能很好運作。

<img src="/image/footer.png"/>  
<img src="~/image/footer.png"/>
<img src="/image/footer.png"/>  
<img src="~/image/footer.png"/>
HTML

使用圖像和資產的HTML頁眉和頁尾

當我們將HTML頁眉和頁尾渲染到新的或現有的PDF時,它們被視為獨立的HTML文件,並且不會繼承PDF本身的BaseURL。

我們應該設置一個BaseURL來加載資產:

:path=/static-assets/pdf/content-code-examples/how-to/base-header-footer.cs
using IronPdf;
using System;

// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Add header
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    MaxHeight = 20,
    HtmlFragment = "<img src='logo.png'>",
    BaseUrl = new Uri(@"C:\assets\images\").AbsoluteUri
};
Imports IronPdf
Imports System

' Instantiate ChromePdfRenderer
Private renderer As New ChromePdfRenderer()

' Add header
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
	.MaxHeight = 20,
	.HtmlFragment = "<img src='logo.png'>",
	.BaseUrl = (New Uri("C:\assets\images\")).AbsoluteUri
}
VB   C#

使用 CSS、JS 和影像資產將 HTML 文件轉換為 PDF

將 HTML 文件渲染為 PDF 時,所有資產將被假定為該文件的本地資產。

:path=/static-assets/pdf/content-code-examples/how-to/base-html-file.cs
using IronPdf;

// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Render HTML file to PDF
PdfDocument pdf = renderer.RenderHtmlFileAsPdf("C:\\Assets\\TestInvoice1.html");

// Export PDF
pdf.SaveAs("Invoice.pdf");
Imports IronPdf

' Instantiate ChromePdfRenderer
Private renderer As New ChromePdfRenderer()

' Render HTML file to PDF
Private pdf As PdfDocument = renderer.RenderHtmlFileAsPdf("C:\Assets\TestInvoice1.html")

' Export PDF
pdf.SaveAs("Invoice.pdf")
VB   C#

在上面的例子中,所有的 JS、CSS 和圖像文件將從磁碟上的 C:\Assets 資料夾載入——和 HTML 文件所在的目錄相同。

為了方便起見,你可以使用 ChromePdfRenderOptions.CustomCssUrl 如果您希望指定一個額外的樣式表,且該樣式表僅用於 .NET PDF 渲染。示例:

:path=/static-assets/pdf/content-code-examples/how-to/base-html-file-baseurl.cs
using IronPdf;

// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Set additional CSS url
renderer.RenderingOptions.CustomCssUrl = "./style.css";

// Render HTML file to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");

// Export PDF
pdf.SaveAs("tryCss.pdf");
Imports IronPdf

' Instantiate ChromePdfRenderer
Private renderer As New ChromePdfRenderer()

' Set additional CSS url
renderer.RenderingOptions.CustomCssUrl = "./style.css"

' Render HTML file to PDF
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")

' Export PDF
pdf.SaveAs("tryCss.pdf")
VB   C#

請注意
ChromePdfRenderOptions.CustomCssUrl 屬性目前僅在使用 RenderHtmlAsPdf 方法從 HTML 字符串渲染為 PDF 文檔時功能有效。

圖像資產編碼

圖像資產可以直接編碼到 HTML 文件或字符串中,這有助於避免找不到圖像的某些令人沮喪的問題。為了做到這一點,我們可以利用 base64:

  1. 首先通過讀取圖像文件或通過網絡請求接收圖像來獲取圖像的二進制數據。

  2. 使用 Microsoft .NET 中的 Convert.ToBase64String 方法將二進制數據轉換為 base64。

  3. 在 HTML 中構建圖像標籤時,在 base64 數據前面使用 "data:image/svg+xml;base64,"。您可能已經注意到,在 base64 數據之前指定了圖像類型。請訪問 MDN 網路文件 有關圖像格式類型的更多資訊。
:path=/static-assets/pdf/content-code-examples/how-to/add-images-to-pdfs-base64-image.cs
using IronPdf;
using System;
using System.IO;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Import image file binary data
byte[] binaryData = File.ReadAllBytes("ironpdf-logo-text-dotnet.svg");

// Convert the binary data to base 64
string imgDataUri = Convert.ToBase64String(binaryData);

// Embed in HTML
string html = $"<img src='data:image/svg+xml;base64,{imgDataUri}'>";

// Convert HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

// Export the PDF
pdf.SaveAs("embedImageBase64.pdf");
Imports IronPdf
Imports System
Imports System.IO

Private renderer As New ChromePdfRenderer()

' Import image file binary data
Private binaryData() As Byte = File.ReadAllBytes("ironpdf-logo-text-dotnet.svg")

' Convert the binary data to base 64
Private imgDataUri As String = Convert.ToBase64String(binaryData)

' Embed in HTML
Private html As String = $"<img src='data:image/svg+xml;base64,{imgDataUri}'>"

' Convert HTML to PDF
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)

' Export the PDF
pdf.SaveAs("embedImageBase64.pdf")
VB   C#