將 HTML 字串轉換為 PDF 時,為資產如 CSS、JavaScript 檔案和影像設置 BaseUrlOrPath 參數。 BaseUrlOrPath 指定從該基礎 URL 載入所有資產。 CustomCssUrl
這可以是一個以 'http' 開頭的網路 URL 來載入遠端資產,或是一個本地檔案路徑來存取磁碟上的資產。 正確設定 BaseUrlOrPath 可確保在轉換過程中正確載入資產。 如需有關 HTML 至 PDF 轉換的更詳細資訊,請查看我們的完整 HTML 至 PDF 教學。
using IronPdf;// Instantiate ChromePdfRendererChromePdfRenderer renderer = new ChromePdfRenderer();string baseUrl = @"C:\site\assets\";string html = "<img src='icons/iron.png'>";// Render HTML to PDFPdfDocument pdf = renderer.RenderHtmlAsPdf(html, baseUrl);// Export PDFpdf.SaveAs("html-with-assets.pdf");
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");
Dim renderer As New ChromePdfRenderer()Dim baseUrl AsString = "C:\site\assets\"Dim html AsString = "<img src='icons/iron.png'>"Dim pdf AsPdfDocument = renderer.RenderHtmlAsPdf(html, baseUrl)pdf.SaveAs("html-with-assets.pdf")
Dim renderer As New ChromePdfRenderer()
Dim baseUrl As String = "C:\site\assets\"
Dim html As String = "<img src='icons/iron.png'>"
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html, baseUrl)
pdf.SaveAs("html-with-assets.pdf")
// Instantiate ChromePdfRendererChromePdfRenderer renderer = new ChromePdfRenderer();// Render HTML to PDFPdfDocument pdf = renderer.RenderHtmlAsPdf("html.Result", @"wwwroot/image");
// Instantiate ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf("html.Result", @"wwwroot/image");
' Instantiate ChromePdfRendererDim renderer As New ChromePdfRenderer()' Render HTML to PDFDim pdf AsPdfDocument = 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")
<!-- Correct image references for MVC --><img src="../image/Sample.jpg"/><img src="../image/Sample.png"/>
// Example: Debug asset loading with absolute pathsChromePdfRenderer renderer = new ChromePdfRenderer();// Enable debug loggingrenderer.RenderingOptions.EnableJavaScript = true;renderer.RenderingOptions.WaitFor.RenderDelay(500); // Give assets time to load// Use absolute path for testingstring absoluteBasePath = Path.GetFullPath(@"C:\MyProject\wwwroot\assets");string html = @" <html> <head> <link rel='stylesheet' href='styles/main.css'> </head> <body> <img src='images/logo.png' /> <script src='scripts/app.js'></script> </body> </html>";PdfDocument pdf = renderer.RenderHtmlAsPdf(html, absoluteBasePath);
// Example: Debug asset loading with absolute paths
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Enable debug logging
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500); // Give assets time to load
// Use absolute path for testing
string absoluteBasePath = Path.GetFullPath(@"C:\MyProject\wwwroot\assets");
string html = @"
<html>
<head>
<link rel='stylesheet' href='styles/main.css'>
</head>
<body>
<img src='images/logo.png' />
<script src='scripts/app.js'></script>
</body>
</html>";
PdfDocument pdf = renderer.RenderHtmlAsPdf(html, absoluteBasePath);
ImportsSystem.IO' Example: Debug asset loading with absolute pathsDim renderer As New ChromePdfRenderer()' Enable debug loggingrenderer.RenderingOptions.EnableJavaScript = Truerenderer.RenderingOptions.WaitFor.RenderDelay(500) ' Give assets time to load' Use absolute path for testingDim absoluteBasePath AsString = Path.GetFullPath("C:\MyProject\wwwroot\assets")Dim html AsString = " <html> <head> <link rel='stylesheet' href='styles/main.css'> </head> <body> <img src='images/logo.png' /> <script src='scripts/app.js'></script> </body> </html>"Dim pdf AsPdfDocument = renderer.RenderHtmlAsPdf(html, absoluteBasePath)
Imports System.IO
' Example: Debug asset loading with absolute paths
Dim renderer As New ChromePdfRenderer()
' Enable debug logging
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(500) ' Give assets time to load
' Use absolute path for testing
Dim absoluteBasePath As String = Path.GetFullPath("C:\MyProject\wwwroot\assets")
Dim html As String = "
<html>
<head>
<link rel='stylesheet' href='styles/main.css'>
</head>
<body>
<img src='images/logo.png' />
<script src='scripts/app.js'></script>
</body>
</html>"
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html, absoluteBasePath)
我如何新增包含影像的 HTML 頁眉和頁腳?
渲染到新或現有 PDF 的 HTML 頁眉和頁腳將被視為獨立的 HTML 文件,且不會繼承來自 PDF 的 BaseURL。 如需完整的頁眉和頁腳選項,請參閱我們的 頁眉和頁腳指南。
將 HTML 檔案渲染為 PDF 時,所有資產都假定是該檔案的本地資產。瞭解更多有關轉換 HTML 檔案的資訊,請參閱我們的 HTML 檔案到 PDF 的指南。
using IronPdf;// Instantiate ChromePdfRendererChromePdfRenderer renderer = new ChromePdfRenderer();// Render HTML file to PDFPdfDocument pdf = renderer.RenderHtmlFileAsPdf("C:\\Assets\\TestInvoice1.html");// Export PDFpdf.SaveAs("Invoice.pdf");
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");
ImportsIronPdf' Instantiate ChromePdfRendererPrivate renderer As New ChromePdfRenderer()' Render HTML file to PDFPrivate pdf AsPdfDocument = renderer.RenderHtmlFileAsPdf("C:\Assets\TestInvoice1.html")' Export PDFpdf.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 檔案位於同一目錄。
為了方便起見,請在 HtmlToPdf 中使用 CustomCssUrl 設定附加樣式表,以指定僅在 .NET PDF 渲染時使用的額外樣式表。 例如:
using IronPdf;// Instantiate ChromePdfRendererChromePdfRenderer renderer = new ChromePdfRenderer();// Set additional CSS urlrenderer.RenderingOptions.CustomCssUrl = "./style.css";// Render HTML file to PDFPdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");// Export PDFpdf.SaveAs("tryCss.pdf");
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");
ImportsIronPdf' Instantiate ChromePdfRendererPrivate renderer As New ChromePdfRenderer()' Set additional CSS urlrenderer.RenderingOptions.CustomCssUrl = "./style.css"' Render HTML file to PDFDim pdf AsPdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")' Export PDFpdf.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")
CustomCssUrl
請注意: @@ChromePdfRenderOptions.CustomCssUrl 屬性目前僅在使用 @@RenderHtmlAsPdf 方法從 HTML 字串渲染為 PDF 時運作。}
何時應使用 CustomCssUrl 進行附加樣式設定?
CustomCssUrl 適合於:
列印特定樣式:隱藏導航選單或互動元素
PDF 佈局優化:調整頁面邊距和分頁
條件格式:僅在生成 PDF 時應用樣式
A/B 測試:測試不同的 PDF 佈局而不修改來源 HTML
我如何處理 HTML 檔案中的相對資產路徑?
當處理包含相對路徑的 HTML 檔案時,確保您的檔案結構能支援引用:
// Example HTML file structure/*C:\Projects\Reports\ ├── invoice.html ├── css\ │ └── styles.css ├── js\ │ └── calculations.js └── images\ └── logo.png*/// HTML content with relative pathsstring htmlContent = @"<!DOCTYPE html><html><head> <link rel='stylesheet' href='css/styles.css'> <script src='js/calculations.js'></script></head><body> <img src='images/logo.png' alt='Company Logo'> <h1>Invoice #12345</h1></body></html>";// Save HTML and renderFile.WriteAllText(@"C:\Projects\Reports\invoice.html", htmlContent);ChromePdfRenderer renderer = new ChromePdfRenderer();PdfDocument pdf = renderer.RenderHtmlFileAsPdf(@"C:\Projects\Reports\invoice.html");pdf.SaveAs("invoice-output.pdf");
// Example HTML file structure
/*
C:\Projects\Reports\
├── invoice.html
├── css\
│ └── styles.css
├── js\
│ └── calculations.js
└── images\
└── logo.png
*/
// HTML content with relative paths
string htmlContent = @"
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='css/styles.css'>
<script src='js/calculations.js'></script>
</head>
<body>
<img src='images/logo.png' alt='Company Logo'>
<h1>Invoice #12345</h1>
</body>
</html>";
// Save HTML and render
File.WriteAllText(@"C:\Projects\Reports\invoice.html", htmlContent);
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlFileAsPdf(@"C:\Projects\Reports\invoice.html");
pdf.SaveAs("invoice-output.pdf");
ImportsSystem.IOImportsIronPdf' Example HTML file structure'' C:\Projects\Reports\' ├── invoice.html' ├── css\' │ └── styles.css' ├── js\' │ └── calculations.js' └── images\' └── logo.png'' HTML content with relative pathsDim htmlContent AsString = "<!DOCTYPE html><html><head> <link rel='stylesheet' href='css/styles.css'> <script src='js/calculations.js'></script></head><body> <img src='images/logo.png' alt='Company Logo'> <h1>Invoice #12345</h1></body></html>"' Save HTML and renderFile.WriteAllText("C:\Projects\Reports\invoice.html", htmlContent)Dim renderer As New ChromePdfRenderer()Dim pdf AsPdfDocument = renderer.RenderHtmlFileAsPdf("C:\Projects\Reports\invoice.html")pdf.SaveAs("invoice-output.pdf")
Imports System.IO
Imports IronPdf
' Example HTML file structure
'
' C:\Projects\Reports\
' ├── invoice.html
' ├── css\
' │ └── styles.css
' ├── js\
' │ └── calculations.js
' └── images\
' └── logo.png
'
' HTML content with relative paths
Dim htmlContent As String = "
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='css/styles.css'>
<script src='js/calculations.js'></script>
</head>
<body>
<img src='images/logo.png' alt='Company Logo'>
<h1>Invoice #12345</h1>
</body>
</html>"
' Save HTML and render
File.WriteAllText("C:\Projects\Reports\invoice.html", htmlContent)
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlFileAsPdf("C:\Projects\Reports\invoice.html")
pdf.SaveAs("invoice-output.pdf")
使用 Microsoft .NET 中的 Convert.ToBase64String 方法將二進位資料轉換為 base64。
在 HTML 中使用 構建圖像標籤 "data:image/svg+xml;base64," 在 base64 資料前。 請注意,影像型別是在 base64 資料前指定的。 參閱 MDN Web Docs 上的影像型別和格式 以獲取更多影像格式型別的資訊。
using IronPdf;using System;using System.IO;ChromePdfRenderer renderer = new ChromePdfRenderer();// Import image file binary databyte[] binaryData = File.ReadAllBytes("ironpdf-logo-text-dotnet.svg");// Convert the binary data to base 64string imgDataUri = Convert.ToBase64String(binaryData);// Embed in HTMLstring html = $"<img src='data:image/svg+xml;base64,{imgDataUri}'>";// Convert HTML to PDFPdfDocument pdf = renderer.RenderHtmlAsPdf(html);// Export the PDFpdf.SaveAs("embedImageBase64.pdf");
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");
ImportsIronPdfImportsSystemImportsSystem.IOPrivate renderer As New ChromePdfRenderer()' Import image file binary dataPrivate binaryData() AsByte = File.ReadAllBytes("ironpdf-logo-text-dotnet.svg")' Convert the binary data to base 64Private imgDataUri AsString = Convert.ToBase64String(binaryData)' Embed in HTMLPrivate html AsString = $"<img src='data:image/svg+xml;base64,{imgDataUri}'>"' Convert HTML to PDFPrivate pdf AsPdfDocument = renderer.RenderHtmlAsPdf(html)' Export the PDFpdf.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")
為什麼我會選擇 Base64 編碼而不是檔案引用?
Base64 編碼提供了一些優勢:
自主 HTML:無外部依賴,簡化分發
跨平台相容性:不受檔案系統差異影響
安全性:不需存取檔案系統,降低安全風險
可靠性:消除生產中遺失資產錯誤
版本控制:影像作為 HTML 一部分,簡化版本管理
然而,請考慮這些折衷方案:
增加 HTML 大小:Base64 編碼大約增加 33% 大小
不能快取:內嵌影像無法單獨快取
記憶體使用:整個影像必須載入到記憶體中
哪種影像格式最適合 Base64 編碼?
不同影像格式在 Base64 編碼時效率有所不同:
// Example: Encoding different image formatspublic stringEncodeImageWithMimeType(string imagePath){ byte[] imageBytes = File.ReadAllBytes(imagePath); string base64 = Convert.ToBase64String(imageBytes); // Determine MIME type based on extension string extension = Path.GetExtension(imagePath).ToLower(); string mimeType = extension switch { ".png" => "image/png", // Best for graphics with transparency ".jpg" or ".jpeg" => "image/jpeg", // Best for photographs ".gif" => "image/gif", // Best for simple animations ".svg" => "image/svg+xml", // Best for scalable graphics ".webp" => "image/webp", // Best overall compression _ => "image/png" // Default fallback }; return $"data:{mimeType};base64,{base64}";}// Usagestring encodedImage = EncodeImageWithMimeType("logo.png");string html = $"<img src='{encodedImage}' alt='Company Logo'>";
// Example: Encoding different image formats
public string EncodeImageWithMimeType(string imagePath)
{
byte[] imageBytes = File.ReadAllBytes(imagePath);
string base64 = Convert.ToBase64String(imageBytes);
// Determine MIME type based on extension
string extension = Path.GetExtension(imagePath).ToLower();
string mimeType = extension switch
{
".png" => "image/png", // Best for graphics with transparency
".jpg" or ".jpeg" => "image/jpeg", // Best for photographs
".gif" => "image/gif", // Best for simple animations
".svg" => "image/svg+xml", // Best for scalable graphics
".webp" => "image/webp", // Best overall compression
_ => "image/png" // Default fallback
};
return $"data:{mimeType};base64,{base64}";
}
// Usage
string encodedImage = EncodeImageWithMimeType("logo.png");
string html = $"<img src='{encodedImage}' alt='Company Logo'>";
' Example: Encoding different image formatsPublic Function EncodeImageWithMimeType(imagePath AsString) AsString Dim imageBytes AsByte() = File.ReadAllBytes(imagePath) Dim base64 AsString = Convert.ToBase64String(imageBytes) ' Determine MIME type based on extension Dim extension AsString = Path.GetExtension(imagePath).ToLower() Dim mimeType AsString = If(extension, { ".png", "image/png", ' Best for graphics with transparency ".jpg", "image/jpeg", ' Best for photographs ".jpeg", "image/jpeg", ' Best for photographs ".gif", "image/gif", ' Best for simple animations ".svg", "image/svg+xml", ' Best for scalable graphics ".webp", "image/webp" ' Best overall compression }, "image/png") ' Default fallback Return $"data:{mimeType};base64,{base64}"End Function' UsageDim encodedImage AsString = EncodeImageWithMimeType("logo.png")Dim html AsString = $"<img src='{encodedImage}' alt='Company Logo'>"
' Example: Encoding different image formats
Public Function EncodeImageWithMimeType(imagePath As String) As String
Dim imageBytes As Byte() = File.ReadAllBytes(imagePath)
Dim base64 As String = Convert.ToBase64String(imageBytes)
' Determine MIME type based on extension
Dim extension As String = Path.GetExtension(imagePath).ToLower()
Dim mimeType As String = If(extension, {
".png", "image/png", ' Best for graphics with transparency
".jpg", "image/jpeg", ' Best for photographs
".jpeg", "image/jpeg", ' Best for photographs
".gif", "image/gif", ' Best for simple animations
".svg", "image/svg+xml", ' Best for scalable graphics
".webp", "image/webp" ' Best overall compression
}, "image/png") ' Default fallback
Return $"data:{mimeType};base64,{base64}"
End Function
' Usage
Dim encodedImage As String = EncodeImageWithMimeType("logo.png")
Dim html As String = $"<img src='{encodedImage}' alt='Company Logo'>"
' Comparison examplePublic Sub CompareFileSizes() Dim renderer As New ChromePdfRenderer() ' Method 1: External image reference Dim htmlExternal AsString = "<img src='large-photo.jpg'>" Dim pdfExternal AsPdfDocument = renderer.RenderHtmlAsPdf(htmlExternal, "C:\images\") ' Method 2: Base64 encoded image Dim imageBytes AsByte() = File.ReadAllBytes("C:\images\large-photo.jpg") Dim base64Image AsString = Convert.ToBase64String(imageBytes) Dim htmlBase64 AsString = $"<img src='data:image/jpeg;base64,{base64Image}'>" Dim pdfBase64 AsPdfDocument = renderer.RenderHtmlAsPdf(htmlBase64) ' Compare sizesConsole.WriteLine($"Original image: {imageBytes.Length \ 1024} KB")Console.WriteLine($"PDF with external image: {pdfExternal.BinaryData.Length \ 1024} KB")Console.WriteLine($"PDF with base64 image: {pdfBase64.BinaryData.Length \ 1024} KB")End Sub
' Comparison example
Public Sub CompareFileSizes()
Dim renderer As New ChromePdfRenderer()
' Method 1: External image reference
Dim htmlExternal As String = "<img src='large-photo.jpg'>"
Dim pdfExternal As PdfDocument = renderer.RenderHtmlAsPdf(htmlExternal, "C:\images\")
' Method 2: Base64 encoded image
Dim imageBytes As Byte() = File.ReadAllBytes("C:\images\large-photo.jpg")
Dim base64Image As String = Convert.ToBase64String(imageBytes)
Dim htmlBase64 As String = $"<img src='data:image/jpeg;base64,{base64Image}'>"
Dim pdfBase64 As PdfDocument = renderer.RenderHtmlAsPdf(htmlBase64)
' Compare sizes
Console.WriteLine($"Original image: {imageBytes.Length \ 1024} KB")
Console.WriteLine($"PDF with external image: {pdfExternal.BinaryData.Length \ 1024} KB")
Console.WriteLine($"PDF with base64 image: {pdfBase64.BinaryData.Length \ 1024} KB")
End Sub
How does Base64 encoding affect the size of my PDFs?
Base64 encoding increases HTML and subsequently PDF size due to data being represented in a larger format. Use it for smaller images, while larger assets should use external references to optimize PDF size.
What are the benefits of using Base64 encoding in IronPDF?
Base64 encoding benefits include creating self-contained HTML, ensuring cross-platform compatibility, reducing security risks by eliminating file system access, and preventing missing asset errors in live environments.
How do I handle relative asset paths in HTML files for PDF conversion in IronPDF?
Ensure your file structure supports the relative paths in your HTML file, and use `RenderHtmlFileAsPdf` from IronPDF to convert HTML files to PDFs while correctly loading CSS and JavaScript resources.
Why don't headers and footers in IronPDF inherit Base URLs from the main document?
Headers and footers in IronPDF do not inherit Base URLs from the main document to maintain styling independence, ensure consistent rendering, and allow flexible asset organization for optimal PDF creation.