Le rendu HTML vers PDF est courant, mais les paramètres par défaut ne sont pas toujours idéaux pour l’impression, l’archivage ou les résumés exécutifs. Avec Aspose.HTML for .NET, vous pouvez contrôler précisément la taille de la page, les marges, l’orientation et les règles média CSS pour produire des PDF cohérents et professionnels. Ce guide montre une configuration propre et un exemple complet en C# que vous pouvez intégrer à votre projet.

Points clés

  • Utilisez Converter.ConvertHTML avec PdfSaveOptions pour un rendu HTML → PDF fiable.
  • Configurez PageSetup.AnyPage pour définir taille de page et marges (A4, A3, ou tailles personnalisées).
  • Basculer Css.MediaType entre Écran et Imprimer pour respecter les règles CSS correctes.
  • Créez plusieurs sorties : A4 pour l’impression, paysage A3 pour les amples dispositions et tailles de décoration personnalisées pour les livrets.

Guide étape par étape

1) Load an HTML document

Charger depuis un fichier lorsqu’il est disponible, ou créer un HTMLDocument à partir d’une chaîne avec une URI de base pour résoudre les ressources relatives.

2) Configure page geometry and CSS media

Définir la taille de la page et les marges via PageSetup.AnyPage. Sélectionner MediaType.Print pour appliquer @media print styles, ou MediaType.Screen pour rendre les styles d’écran.

3) Render to PDF

Appeler Converter.ConvertHTML(document, options, outputPath) pour produire votre PDF.

Exemple complet et compilable (C#)

using System;
using System.IO;
using Aspose.Html;
using Aspose.Html.Converters;
using Aspose.Html.Saving;            // PdfSaveOptions
using Aspose.Html.Rendering;         // MediaType
using Aspose.Html.Drawing;           // Length, Size, Margin, Page

namespace AsposeHtmlAdvancedPdfDemo
{
    internal static class Program
    {
        // How to run:
        // 1) dotnet new console -n AsposeHtmlAdvancedPdfDemo
        // 2) cd AsposeHtmlAdvancedPdfDemo
        // 3) dotnet add package Aspose.HTML
        // 4) Replace Program.cs with this file's contents
        // 5) dotnet run -- "path-to-input.html"   (argument optional)
        private static void Main(string[] args)
        {
            // Ensure output folder exists
            string outDir = Path.Combine(Directory.GetCurrentDirectory(), "out");
            Directory.CreateDirectory(outDir);

            // Prepare an HTMLDocument: from file path (if provided) or from inline HTML
            HTMLDocument document;
            if (args.Length > 0 && File.Exists(args[0]))
            {
                document = new HTMLDocument(args[0]);
            }
            else
            {
                string html = "<!DOCTYPE html>" +
                              "<html><head><meta charset=\\\"utf-8\\\">" +
                              "<title>Advanced PDF Output</title>" +
                              "<style>body{font-family:Arial,Helvetica,sans-serif;margin:24px}" +
                              "h1{margin:0 0 12px} .lead{color:#444} .wide{width:100%;border-collapse:collapse}" +
                              ".wide th,.wide td{border:1px solid #ddd;padding:6px 8px;text-align:left}" +
                              "@media print { body{font-size:12pt} .lead{color:#000} }</style>" +
                              "</head><body>" +
                              "<h1>Aspose.HTML PDF Output</h1>" +
                              "<p class=\\\"lead\\\">This PDF is rendered with custom page size, margins, and media rules.</p>" +
                              "<table class=\\\"wide\\\"><tr><th>Item</th><th>Qty</th><th>Price</th></tr>" +
                              "<tr><td>Widget A</td><td>4</td><td>$12.00</td></tr>" +
                              "<tr><td>Widget B</td><td>2</td><td>$9.50</td></tr></table>" +
                              "</body></html>";
                document = new HTMLDocument(html, ".");
            }

            using (document)
            {
                // A4 portrait with 12.7 mm margins, using print CSS
                var a4 = new PdfSaveOptions();
                a4.Css.MediaType = MediaType.Print;
                var mm = Length.FromMillimeters;
                a4.PageSetup.AnyPage = new Page(
                    new Size(mm(210), mm(297)),               // A4
                    new Margin(mm(12.7), mm(12.7), mm(12.7), mm(12.7))
                );
                string a4Path = Path.Combine(outDir, "document-a4.pdf");
                Converter.ConvertHTML(document, a4, a4Path);
                Console.WriteLine($"Saved: {a4Path}")
;
                // A3 landscape (420 x 297 mm) with tighter margins, using screen CSS
                var a3Landscape = new PdfSaveOptions();
                a3Landscape.Css.MediaType = MediaType.Screen;
                a3Landscape.PageSetup.AnyPage = new Page(
                    new Size(mm(420), mm(297)),               // A3 landscape
                    new Margin(mm(10), mm(10), mm(10), mm(10))
                );
                string a3Path = Path.Combine(outDir, "document-a3-landscape.pdf");
                Converter.ConvertHTML(document, a3Landscape, a3Path);
                Console.WriteLine($"Saved: {a3Path}");

                // Custom trim size 6 x 9 inches with narrow margins
                var custom = new PdfSaveOptions();
                custom.Css.MediaType = MediaType.Print;
                custom.PageSetup.AnyPage = new Page(
                    new Size(Length.FromInches(6), Length.FromInches(9)),
                    new Margin(mm(5), mm(5), mm(5), mm(5))
                );
                string customPath = Path.Combine(outDir, "document-6x9.pdf");
                Converter.ConvertHTML(document, custom, customPath);
                Console.WriteLine($"Saved: {customPath}");
            }
        }
    }
}

Comment courir

  1. Créer une application console :
dotnet new console -n AsposeHtmlAdvancedPdfDemo
cd AsposeHtmlAdvancedPdfDemo
  1. Ajouter le paquet :
dotnet add package Aspose.HTML
  1. Remplacer Program.cs avec le Exemple complet ci‑dessus.
  2. Exécuter avec un fichier HTML (facultatif):
dotnet run -- ../path/to/sample.html

Ce que le code fait

  • Charge un fichier HTML (ou utilise du HTML en ligne pour un démarrage rapide).
  • Configure PdfSaveOptions pour le format portrait A4, le format paysage A3, et une taille de coupe personnalisée de 6×9 pouces.
  • S’applique MediaType.Print ou MediaType.Screen pour correspondre à vos règles CSS.
  • Exportations trois PDF personnalisés vers un out/ dossier.

Problèmes et tips

  • Règles CSS incorrectes: basculer options.Css.MediaType entre Print et Screen pour correspondre à votre feuille de style.
  • Contenu tronqué ou à l’étroit: augmentez les marges ou la taille de la page ; envisagez des formats plus grands pour les tableaux larges.
  • Polices manquantes: assurez-vous que les polices sont disponibles pour le rendu ou intégrez-les via @font-face dans votre HTML.
  • Performance: simplifier le DOM/CSS lourd lorsque cela est possible ; mettre en cache les ressources statiques.

FAQ

Q1. Comment définir la taille de page et les marges pour le PDF ? Utiliser PdfSaveOptions.PageSetup.AnyPage = new Page(Size, Margin) avec des unités de Length (millimètres ou pouces).

Q2. Puis-je forcer les styles d’impression lors du rendu ? Oui. Définir options.Css.MediaType = MediaType.Print pour que @media print les règles s’appliquent.

Q3. Comment rendre les pages en mode paysage ? Spécifiez un paysage Size (par exemple A3 420 × 297 mm) lors de la création du Page.

Q4. Comment puis‑je exporter plusieurs variantes (impression vs écran) ? Créer séparé PdfSaveOptions instances avec différents Css.MediaType et configurations de page, puis appeler Converter.ConvertHTML pour chaque.

Q5. Ai-je besoin d’un moteur de navigateur en cours d’exécution ? Non. Aspose.HTML rend côté serveur sans navigateurs externes.

Conclusion

Avec PdfSaveOptions et du CSS sensible aux médias, vous pouvez produire des PDF adaptés à l’impression, à l’archivage ou aux besoins exécutifs. Commencez avec le format portrait A4 pour un usage général, ajoutez le format paysage A3 pour les mises en page larges, et conservez une taille de coupe personnalisée pour les brochures ou les rapports. Testez avec des documents représentatifs pour verrouiller les paramètres par défaut qui correspondent à votre marque et à vos parties prenantes.

More in this category