Comment utiliser les URLs de base dans la génération de PDFs avec C#

Comment utiliser les URL de base et le codage des actifs en C# .NET 10

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

Les URL de base dans IronPDF permettent aux actifs CSS, JavaScript et images d'être correctement chargés lors de la conversion HTML en PDF en spécifiant le paramètre BaseUrlOrPath, qui peut être une URL web ou un chemin d'accès à un fichier local pour une résolution relative des actifs.

introduction:2(Démarrage rapide : Mettre en œuvre les URLs de base dans IronPDF)

Commencez par utiliser IronPDF en mettant en œuvre des URL de base pour un chargement transparent des ressources lors de la conversion de HTML en PDF en .NET C#. Cet exemple montre comment définir le BaseUrlOrPath pour s'assurer que tous les CSS, JavaScript et images sont correctement référencés, ce qui simplifie la génération de PDF avec une configuration minimale.

Nuget IconCommencez dès maintenant à créer des PDF avec NuGet :

  1. Installez IronPDF avec le gestionnaire de packages NuGet

    PM > Install-Package IronPdf

  2. Copiez et exécutez cet extrait de code.

    new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<img src='icons/logo.png'>", @"C:\site\assets\").SaveAs("with-assets.pdf");
  3. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronPDF dans votre projet dès aujourd'hui grâce à un essai gratuit.
    arrow pointer


Comment rendre des PDF à partir de chaînes HTML avec des images et des éléments CSS ?

<TODO : Ajouter une image ici -->

Lors de la conversion de chaînes HTML en PDF, définissez un paramètre BaseUrlOrPath pour les ressources telles que les feuilles de style CSS, les fichiers JavaScript et les images. Le BaseUrlOrPath spécifie l'URL de base à partir de laquelle toutes les ressources sont chargées.

Il peut s'agir d'une URL commençant par "http" pour charger des ressources à distance ou d'un chemin d'accès à un fichier local pour accéder à des ressources sur disque. La définition correcte du BaseUrlOrPath permet de s'assurer que les ressources se chargent correctement lors de la conversion. Pour plus de détails sur la conversion HTML en PDF, consultez notre tutoriel complet HTML en PDF.

: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");
$vbLabelText   $csharpLabel

Pour les scénarios complexes impliquant des ressources externes, explorez notre guide sur la gestion des polices ou l'ajout d'images aux PDF.

Comment configurer les URL de base dans les applications MVC?

Dans les applications MVC, la spécification des chemins d'accès aux fichiers images nécessite une configuration minutieuse. To ensure IronPDF finds images and displays them correctly on the website, configure the baseUrl and HTML src="" attribute properly.

Avec la hiérarchie de fichiers indiquée ci-dessous

  • baseUrlOrPath to @"wwwroot/image"
  • src attribut à "../image/Sample.jpg"
wwwroot
└── image
    ├── Sample.jpg
    └── Sample.png

Par exemple :

: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");
$vbLabelText   $csharpLabel
<!-- Correct image references for MVC -->
<img src="../image/Sample.jpg"/>
<img src="../image/Sample.png"/>
<!-- Correct image references for MVC -->
<img src="../image/Sample.jpg"/>
<img src="../image/Sample.png"/>
HTML

Pour les mises en œuvre spécifiques à ASP.NET Core MVC, consultez notre guide CSHTML to PDF (MVC Core).

Quels sont les formats de chemin de fichier à éviter ?

Avertissement

Formats de chemin de fichier qui ne fonctionnent pas

Ces formats fonctionnent dans le navigateur Chrome mais pointent vers de mauvais répertoires dans les applications MVC. Ils fonctionnent avec IronPdf si baseUrlOrPath est fourni dans la méthode RenderHtmlAsPdf :

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

Ces formats fonctionnent avec les applications MVC mais échouent avec les chemins de fichiers IronPDF :

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

@@--BRACKET-FERMETURE--@@

Quels sont les conseils de dépannage courants pour le chargement d'actifs ?

Lorsque les ressources ne se chargent pas, suivez ces étapes de dépannage :

  1. Vérifier les chemins d'accès absolus : Utilisez des chemins d'accès absolus pendant le développement pour confirmer l'accessibilité
  2. Vérifier les autorisations de fichiers : assurez-vous que l'application a un accès en lecture aux répertoires de ressources
  3. Tester avec des URL distantes : Utiliser des URL pleinement qualifiées pour isoler les problèmes de chemin d'accès
  4. Activer la journalisation : Utilisez la journalisation custom logging d'IronPDF pour déboguer le chargement des actifs
// 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);
// 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);
$vbLabelText   $csharpLabel

Comment ajouter des en-têtes et des pieds de page HTML avec des images?

<TODO : Ajouter une image ici -->

Lors du rendu d'en-têtes et de pieds de page HTML dans des PDF nouveaux ou existants, ceux-ci sont traités comme des documents HTML autonomes et n'héritent pas du BaseURL du PDF. Pour des options complètes d'en-tête et de pied de page, consultez notre guide des en-têtes et pieds de page.

Définir une BaseURL à partir de laquelle les ressources peuvent être chargées :

: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
};
$vbLabelText   $csharpLabel

Pourquoi les en-têtes n'héritent-ils pas des URL de base du document principal ?

Les en-têtes et les pieds de page sont rendus sous forme de documents HTML distincts pour des raisons de performance et d'isolation. Cette conception permet :

  • Style indépendant sans affecter le contenu principal
  • Rendu cohérent sur toutes les pages
  • Meilleure gestion de la mémoire pour les documents volumineux
  • Souplesse d'utilisation de différentes sources d'actifs

Comment définir des URL de base différentes pour les en-têtes et le contenu ?

Spécifiez des URL de base différentes pour les en-têtes, les pieds de page et le contenu principal afin d'organiser les ressources de manière efficace :

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Main content base URL
string contentBaseUrl = @"C:\website\public\";

// Header specific assets
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<img src='header-logo.png'><link rel='stylesheet' href='header.css'>",
    BaseUrl = new Uri(@"C:\website\headers\").AbsoluteUri
};

// Footer specific assets
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<div class='footer'>© 2024 Company</div><link rel='stylesheet' href='footer.css'>",
    BaseUrl = new Uri(@"C:\website\footers\").AbsoluteUri
};

// Render main content with its own base URL
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Main Content</h1>", contentBaseUrl);
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Main content base URL
string contentBaseUrl = @"C:\website\public\";

// Header specific assets
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<img src='header-logo.png'><link rel='stylesheet' href='header.css'>",
    BaseUrl = new Uri(@"C:\website\headers\").AbsoluteUri
};

// Footer specific assets
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<div class='footer'>© 2024 Company</div><link rel='stylesheet' href='footer.css'>",
    BaseUrl = new Uri(@"C:\website\footers\").AbsoluteUri
};

// Render main content with its own base URL
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Main Content</h1>", contentBaseUrl);
$vbLabelText   $csharpLabel

Comment convertir des fichiers HTML en PDF avec des ressources locales ?

<TODO : Ajouter une image ici -->

Lors de la conversion de fichiers HTML en PDF, toutes les ressources sont supposées être locales à ce fichier. Pour en savoir plus sur la conversion de fichiers HTML, consultez notre guide Fichier HTML en 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");
$vbLabelText   $csharpLabel

Dans l'exemple ci-dessus, tous les fichiers JS, CSS et images se chargent à partir du dossier C:\Assets sur le disque - le même répertoire que le fichier HTML.

For convenience, use CustomCssUrl in ChromePdfRenderOptions for Additional Stylesheets to specify an additional stylesheet used only for .NET PDF rendering if desired. Par exemple :

: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");
$vbLabelText   $csharpLabel

[{i:(La propriété ChromePdfRenderOptions.CustomCssUrl ne fonctionne actuellement que lors du rendu de chaînes HTML en PDF à l'aide de la méthode RenderHtmlAsPdf.@@--BRACKET-FERMETURE--@@