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

How to Use Base URLs & Asset Encoding in 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 ressources CSS, JavaScript et image d'être correctement chargées lors de la conversion HTML vers PDF en spécifiant le paramètre BaseUrlOrPath, qui peut être une URL Web ou un chemin de fichier local pour la résolution relative des ressources.

Démarrage rapide : Implémenter les URL 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 configurer le BaseUrlOrPath pour garantir que tous les CSS, JavaScript et images sont correctement référencés, simplifiant ainsi la génération de PDF avec une configuration minimale.

  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 avec un essai gratuit

    arrow pointer


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

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 tous les éléments se chargent par rapport à.

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 configuration correcte du BaseUrlOrPath garantit le bon chargement des ressources pendant 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 vers @"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

<img src="../image/Sample.jpg"/>
<img src="../image/Sample.png"/>

<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 des répertoires incorrects 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

)}]

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?

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 ?

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

La propriété 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.

Quand dois-je utiliser CustomCssUrl pour une mise en forme supplémentaire?

CustomCssUrl est idéal pour :

  • Styles spécifiques à l'impression : masquer les menus de navigation ou les éléments interactifs
  • Optimisation de la mise en page des PDF : Ajuster les marges et les sauts de page pour l'impression
  • Mise en forme conditionnelle : Appliquer les styles uniquement lors de la génération de PDF
  • A/B testing : Testez différentes mises en page PDF sans modifier le code HTML source

Comment gérer les chemins d'accès relatifs dans les fichiers HTML?

Lorsque vous travaillez avec des fichiers HTML contenant des chemins d'accès relatifs, assurez-vous que votre structure de fichier prend en charge les références :

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

Comment coder des images directement en HTML à l'aide de Base64?

Les images peuvent être encodées directement dans des fichiers HTML ou des chaînes de caractères, ce qui permet d'éviter les problèmes liés aux images manquantes. Utilisez l'encodage base64 pour cette approche. Pour travailler avec différents formats d'images, consultez notre guide des images.

  1. Obtenez d'abord les données binaires de l'image en lisant le fichier ou en le recevant par le biais d'une requête réseau.
  2. Utilisez la méthode Convert.ToBase64String dans Microsoft .NET pour convertir les données binaires en base64.
  3. Construisez la balise image en HTML en utilisant "data:image/svg+xml;base64," avant les données en base64. Notez que le type d'image est spécifié avant les données base64. Visitez la MDN Web Docs on Image Types and Formats pour plus d'informations sur les types et formats d'images.
: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");
$vbLabelText   $csharpLabel

Pourquoi choisir l'encodage Base64 plutôt que les références de fichiers?

L'encodage Base64 offre plusieurs avantages :

  • html autonome : pas de dépendances externes, ce qui simplifie la distribution
  • Compatibilité multiplateforme : Fonctionne quelles que soient les différences de système de fichiers
  • Sécurité : Aucun accès au système de fichiers n'est nécessaire, ce qui réduit les risques de sécurité
  • Fiabilité : Élimine les erreurs d'actifs manquants dans la production
  • Contrôle de la version : les images font partie du code HTML, ce qui simplifie le contrôle des versions

Il convient toutefois de prendre en compte les compromis suivants :

  • Augmentation de la taille HTML : l'encodage Base64 augmente la taille d'environ 33 %
  • Pas de mise en cache : Les images intégrées ne peuvent pas être mises en cache séparément
  • Utilisation de la mémoire : L'image entière doit être chargée en mémoire

Quels sont les formats d'image qui fonctionnent le mieux avec le codage Base64 ?

Les différents formats d'images ont une efficacité variable lorsqu'ils sont encodés en base64 :

// 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 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'>";
$vbLabelText   $csharpLabel

Quel est l'impact de l'encodage Base64 sur la taille des fichiers PDF?

L'encodage Base64 affecte la taille des PDF de manière prévisible :

// Comparison example
public void CompareFileSizes()
{
    ChromePdfRenderer renderer = new ChromePdfRenderer();

    // Method 1: External image reference
    string htmlExternal = "<img src='large-photo.jpg'>";
    PdfDocument pdfExternal = renderer.RenderHtmlAsPdf(htmlExternal, @"C:\images\");

    // Method 2: Base64 encoded image
    byte[] imageBytes = File.ReadAllBytes(@"C:\images\large-photo.jpg");
    string base64Image = Convert.ToBase64String(imageBytes);
    string htmlBase64 = $"<img src='data:image/jpeg;base64,{base64Image}'>";
    PdfDocument pdfBase64 = 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");
}
// Comparison example
public void CompareFileSizes()
{
    ChromePdfRenderer renderer = new ChromePdfRenderer();

    // Method 1: External image reference
    string htmlExternal = "<img src='large-photo.jpg'>";
    PdfDocument pdfExternal = renderer.RenderHtmlAsPdf(htmlExternal, @"C:\images\");

    // Method 2: Base64 encoded image
    byte[] imageBytes = File.ReadAllBytes(@"C:\images\large-photo.jpg");
    string base64Image = Convert.ToBase64String(imageBytes);
    string htmlBase64 = $"<img src='data:image/jpeg;base64,{base64Image}'>";
    PdfDocument pdfBase64 = 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");
}
$vbLabelText   $csharpLabel

Pour des résultats optimaux :

  • Utilisez base64 pour les petites icônes et les logos (< 50 Ko)
  • Utiliser des références externes pour les grandes images et les photographies
  • Pensez à la compression avant l'encodage
  • Utiliser les formats d'image appropriés au type de contenu

Pour des techniques avancées d'optimisation des PDF, explorez notre guide de compression des PDF.

Questions Fréquemment Posées

Comment puis-je m'assurer que les éléments CSS et JavaScript se chargent correctement lors de la conversion de HTML en PDF ?

IronPDF vous permet de spécifier un paramètre BaseUrlOrPath lors de la conversion de HTML en PDF. Ce paramètre peut être une URL web ou un chemin d'accès à un fichier local qui sert de référence de base pour tous les chemins d'accès relatifs dans votre HTML, garantissant ainsi que les CSS, JavaScript et images se chargent correctement.

À quoi sert le paramètre BaseUrlOrPath ?

Le paramètre BaseUrlOrPath d'IronPDF spécifie l'URL de base à partir de laquelle tous les actifs (CSS, JavaScript, images) se chargent relativement lors de la conversion de HTML en PDF. Il peut s'agir d'une URL commençant par "http" pour les ressources distantes ou d'un chemin d'accès à un fichier local pour les ressources sur disque.

Comment puis-je rendre un PDF avec des actifs en une seule ligne de code ?

Vous pouvez utiliser IronPDF's ChromePdfRenderer pour rendre HTML avec des actifs en une seule ligne : `new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("", @"C:\site\assets\").SaveAs("with-assets.pdf");`. Cela permet de définir le BaseUrlOrPath afin de s'assurer que toutes les ressources sont correctement chargées.

Comment configurer les chemins d'accès aux images dans les applications MVC pour la génération de PDF ?

Dans les applications MVC using IronPDF, définissez baseUrlOrPath sur votre sous-répertoire wwwroot (par exemple, @"wwwroot/image") et configurez l'attribut HTML src avec le chemin relatif (par exemple, "../image/Sample.jpg"). Cela garantit que les images s'affichent correctement à la fois sur le site web et dans le PDF généré.

Puis-je utiliser des ressources locales et distantes lors de la conversion de HTML en PDF ?

Oui, IronPDF prend en charge les ressources locales et distantes. Pour les ressources distantes, définissez BaseUrlOrPath comme une URL web commençant par 'http'. Pour les ressources locales, utilisez un chemin de fichier sur votre disque. Cette flexibilité vous permet de faire référence à des ressources provenant de différentes sources lors de la génération du PDF.

Que se passe-t-il si je ne définis pas le paramètre BaseUrlOrPath ?

Si le paramètre BaseUrlOrPath n'est pas défini dans IronPDF, les chemins d'accès relatifs aux ressources dans votre HTML ne seront pas résolus correctement, ce qui entraînera l'absence de styles CSS, de fonctionnalités JavaScript et d'images dans le PDF généré. Spécifiez toujours ce paramètre lorsque votre HTML contient des références relatives.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Prêt à commencer?
Nuget Téléchargements 17,803,474 | Version : 2026.3 vient de sortir
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package IronPdf
exécuter un échantillon Regardez votre code HTML se transformer en PDF.