これは、リモート資産をロードするための"http"で始まるWeb URLまたはディスク上の資産にアクセスするためのローカルファイルパスであることができます。 変換中のアセットが正しくロードされることを保証するために、BaseUrlOrPathを正しく設定してください。 HTMLからPDFへの変換の詳細については、包括的なHTML to 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 File to 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")
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")
Microsoft .NETでバイナリデータをベース64に変換するにはConvert.ToBase64Stringメソッドを使用します。
base64データの前に "data:image/svg+xml;base64," を使用し、HTML内で画像タグを構築します。 画像タイプは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.