如何使用基本 URL 和資產編碼
IronPDF 是一個在 .NET 專案中生成 PDF 文件的實用工具。
這個程式庫的一個常見用途是“HTML 轉 PDF”渲染 - 使用 HTML 作為渲染 PDF 文件的設計語言。 一個合乎邏輯的問題是:我們如何在 HTML 到 PDF 轉換中使用 CSS 樣式表和圖像文件?
如何使用 HTML 與 CSS 及圖片
從 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")
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")
<img src="../image/Sample.jpg"/>
<img src="../image/Sample.png"/>
<img src="../image/Sample.jpg"/>
<img src="../image/Sample.png"/>
在繼續之前
檔案路徑格式無法運作
以下格式在 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"/>
另一方面,這些格式在 MVC 應用程式中運作良好,但當涉及到檔案路徑時,這些格式在 IronPDF 中就不能很好運作。
<img src="/image/footer.png"/>
<img src="~/image/footer.png"/>
<img src="/image/footer.png"/>
<img src="~/image/footer.png"/>
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
}
具有 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")
在上述範例中,所有 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")
請注意
圖像資產編碼
圖像資產可以直接編碼到HTML文件或字符串中,這有助於避免找不到圖像等令人沮喪的問題。 為了做到這一點,我們可以利用 base64 的使用:
首先通過讀取圖像文件或通過網絡請求獲取圖像的二進位數據。
在 Microsoft .NET 中使用
Convert.ToBase64String
方法將二進位數據轉換為 base64。- 在HTML中使用"data:image/svg+xml;base64,"之前構建圖片標籤。 您可能已經注意到,在base64數據之前已指定圖像類型。 訪問MDN Web Docs 圖像類型和格式有關圖像格式類型的更多資訊。
: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")