Convertir HTML en PDF dans .NET

Aperçu

Cet article explique comment convertir HTML en PDF en utilisant C#. Il couvre les sujets suivants.

Le code suivant fonctionne également avec la bibliothèque Aspose.PDF.Drawing.

Format: HTML

Format: MHTML

Format: WebPage

Conversion C# HTML en PDF

Aspose.PDF for .NET est une API de manipulation PDF qui vous permet de convertir n’importe quel document HTML existant en PDF de manière transparente. Le processus de conversion de HTML en PDF peut être personnalisé de manière flexible.

Convertir HTML en PDF

Le code C# suivant montre comment convertir un document HTML en PDF.

Étapes : Convertir HTML en PDF en C#

  1. Créez une instance de la classe HtmlLoadOptions.
  2. Initialisez l’objet Document.
  3. Enregistrez le document PDF de sortie en appelant la méthode Document.Save().
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertHTMLtoPDF()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Load the HTML file into a document using HtmlLoadOptions
    var options = new Aspose.Pdf.HtmlLoadOptions();

    // Open HTML document
    using (var document = new Aspose.Pdf.Document(dataDir + "test.html", options))
    {
        // Save PDF document
        document.Save(dataDir + "ConvertHTMLtoPDF_out.pdf");
    }
}

Conversion avancée de HTML en PDF

Le moteur de conversion HTML a plusieurs options qui nous permettent de contrôler le processus de conversion.

Support des requêtes multimédias

Les requêtes multimédias sont une technique populaire pour fournir une feuille de style adaptée à différents appareils. Nous pouvons définir le type d’appareil en utilisant la propriété HtmlMediaType.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertHTMLtoPDFAdvancedMediaType()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Load the HTML file into a document using HtmlLoadOptions with Print media type
    var options = new HtmlLoadOptions
    {
        // Set Print or Screen mode
        HtmlMediaType = Aspose.Pdf.HtmlMediaType.Print
    };

    // Open HTML document
    using (var document = new Aspose.Pdf.Document(dataDir + "test.html", options))
    {
        // Save PDF document
        document.Save(dataDir + "ConvertHTMLtoPDFAdvancedMediaType_out.pdf");
    }
}

Activer (désactiver) l’incorporation des polices

Les pages HTML utilisent souvent des polices (par exemple, des polices du dossier local, Google Fonts, etc.). Nous pouvons également contrôler l’incorporation des polices dans un document en utilisant la propriété IsEmbedFonts.

 // For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
 private static void ConvertHTMLtoPDFAdvancedEmbedFonts()
 {
     // The path to the documents directory
     var dataDir = RunExamples.GetDataDir_AsposePdf();

     // Load the HTML file into a document using HtmlLoadOptions with the font embedding option set
     var options = new Aspose.Pdf.HtmlLoadOptions
     {
         // Disable font embedding
         IsEmbedFonts = false
     };

     // Open HTML document
     using (var document = new Aspose.Pdf.Document(dataDir + "test_fonts.html", options))
     {
         // Save PDF document
         document.Save(dataDir + "ConvertHTMLtoPDFAdvanced_EmbedFonts_out.pdf");
     }
 }

Gérer le chargement des ressources externes

Le moteur de conversion fournit un mécanisme qui vous permet de contrôler le chargement de certaines ressources associées au document HTML. La classe HtmlLoadOptions a la propriété CustomLoaderOfExternalResources avec laquelle nous pouvons définir le comportement du chargeur de ressources. Supposons que nous devions remplacer toutes les images PNG par une seule image test.jpg et remplacer l’URL externe par interne pour d’autres ressources. Pour ce faire, nous pouvons définir un chargeur personnalisé SamePictureLoader et pointer CustomLoaderOfExternalResources vers ce nom.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertHTMLtoPDFAdvanced_DummyImage()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Load the HTML file into a document with a custom resource loader for external images
    var options = new Aspose.Pdf.HtmlLoadOptions
    {
        CustomLoaderOfExternalResources = SamePictureLoader
    };

    // Open HTML document
    using (var document = new Aspose.Pdf.Document(dataDir + "test.html", options))
    {
        // Save PDF document
        document.Save(dataDir + "html_test.pdf");
    }
}

private static Aspose.Pdf.LoadOptions.ResourceLoadingResult SamePictureLoader(string resourceURI)
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();
    Aspose.Pdf.LoadOptions.ResourceLoadingResult result;

    if (resourceURI.EndsWith(".png"))
    {
        byte[] resultBytes = File.ReadAllBytes(dataDir + "test.jpg");
        result = new Aspose.Pdf.LoadOptions.ResourceLoadingResult(resultBytes)
        {
            // Set MIME Type
            MIMETypeIfKnown = "image/jpeg"
        };
    }
    else
    {
        result = new Aspose.Pdf.LoadOptions.ResourceLoadingResult(GetContentFromUrl(resourceURI));
    }
    return result;
}

private static byte[] GetContentFromUrl(string url)
{
    var httpClient = new System.Net.Http.HttpClient();
    return httpClient.GetByteArrayAsync(url).GetAwaiter().GetResult();
}

Convertir une page Web en PDF

La conversion d’une page Web est légèrement différente de la conversion d’un document HTML local. Pour convertir le contenu d’une page Web en format PDF, nous pouvons d’abord récupérer le contenu de la page HTML en utilisant une instance HttpClient, créer un objet Stream, passer le contenu à l’objet Document et rendre la sortie au format PDF.

Lors de la conversion d’une page Web hébergée sur un serveur Web en PDF :

Étapes : Convertir WebPage en PDF en C#

  1. Lisez le contenu de la page en utilisant un objet HttpClient.
  2. Instanciez l’objet HtmlLoadOptions et définissez l’URL de base.
  3. Initialisez un objet Document tout en passant l’objet stream.
  4. Optionnellement, définissez la taille de la page et/ou l’orientation.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertHTMLtoPDFAdvanced_WebPage()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    const string url = "https://en.wikipedia.org/wiki/Aspose_API";

    // Set page size A3 and Landscape orientation;   
    var options = new Aspose.Pdf.HtmlLoadOptions(url)
    {
        PageInfo =
        {
            Width = 842,
            Height = 1191,
            IsLandscape = true
        }
    };

    // Load the web page content as a stream and create a PDF document
    using (var document = new Aspose.Pdf.Document(GetContentFromUrlAsStream(url), options))
    {
        // Save PDF document
        document.Save(dataDir + "html_test.pdf");
    }
}

private static Stream GetContentFromUrlAsStream(string url, System.Net.ICredentials credentials = null)
{
    using (var handler = new System.Net.Http.HttpClientHandler { Credentials = credentials })
    using (var httpClient = new System.Net.Http.HttpClient(handler))
    {
        return httpClient.GetStreamAsync(url).GetAwaiter().GetResult();
    }
}

Fournir des identifiants pour la conversion de page Web en PDF

Parfois, nous devons effectuer la conversion de fichiers HTML qui nécessitent une authentification et des privilèges d’accès, afin que seuls les utilisateurs authentiques puissent récupérer le contenu de la page. Cela inclut également le scénario où certaines ressources/données référencées à l’intérieur de HTML sont récupérées depuis un serveur externe qui nécessite une authentification et afin de répondre à cette exigence, la propriété ExternalResourcesCredentials a été ajoutée à la classe HtmlLoadOptions. Le code suivant montre les étapes pour passer des identifiants afin de demander HTML et ses ressources respectives lors de la conversion d’un fichier HTML en PDF.

 // For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
 private static void ConvertHTMLtoPDFAdvancedAuthorized()
 {
     // The path to the documents directory
     var dataDir = RunExamples.GetDataDir_AsposePdf();

     const string url = "http://httpbin.org/basic-auth/user1/password1";
     var credentials = new System.Net.NetworkCredential("user1", "password1");

     var options = new Aspose.Pdf.HtmlLoadOptions(url)
     {
         ExternalResourcesCredentials = credentials
     };

     using (var document = new Aspose.Pdf.Document(GetContentFromUrlAsStream(url, credentials), options))
     {
         // Save PDF document
         document.Save(dataDir + "HtmlTest_out.pdf");
     }
 }

private static Stream GetContentFromUrlAsStream(string url, System.Net.ICredentials credentials = null)
{
    using (var handler = new System.Net.Http.HttpClientHandler { Credentials = credentials })
    using (var httpClient = new System.Net.Http.HttpClient(handler))
    {
        return httpClient.GetStreamAsync(url).GetAwaiter().GetResult();
    }
}

Rendre tout le contenu HTML sur une seule page

Aspose.PDF for .NET offre la possibilité de rendre tout le contenu sur une seule page lors de la conversion d’un fichier HTML en format PDF. Par exemple, si vous avez un contenu HTML dont la taille de sortie est supérieure à une page, vous pouvez utiliser l’option pour rendre les données de sortie sur une seule page PDF. Pour utiliser cette option, la classe HtmlLoadOptions a été étendue par le drapeau IsRenderToSinglePage. Le code ci-dessous montre comment utiliser cette fonctionnalité.

 // For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
 private static void ConvertHTMLtoPDFAdvancedSinglePageRendering()
 {
     // The path to the documents directory
     var dataDir = RunExamples.GetDataDir_AsposePdf();

     // Initialize HtmlLoadOptions
     var options = new Aspose.Pdf.HtmlLoadOptions
     {
         // Set Render to single page property
         IsRenderToSinglePage = true
     };

     // Open PDF document
     using (var document = new Aspose.Pdf.Document(dataDir + "HTMLToPDF.html", options))
     {
         // Save PDF document
         document.Save(dataDir + "RenderContentToSamePage_out.pdf");
     }
 }

Rendre HTML avec des données SVG

Aspose.PDF for .NET offre la possibilité de convertir une page HTML en document PDF. Étant donné que HTML permet d’ajouter des éléments graphiques SVG en tant que balise dans la page, Aspose.PDF prend également en charge la conversion de telles données dans le fichier PDF résultant. Le code suivant montre comment convertir des fichiers HTML avec des balises graphiques SVG en documents PDF tagués.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertHTMLtoPDFWithSVG()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Initialize HtmlLoadOptions
    var options = new Aspose.Pdf.HtmlLoadOptions(Path.GetDirectoryName(dataDir + "HTMLSVG.html"));

    // Initialize Document object
    using (var document = new Aspose.Pdf.Document(dataDir + "HTMLSVG.html", options))
    {
        // Save PDF document
        document.Save(dataDir + "RenderHTMLwithSVGData_out.pdf");
    }
}

Convertir MHTML en PDF

MHTML, abréviation de MIME HTML, est un format d’archive de page Web utilisé pour combiner des ressources qui sont généralement représentées par des liens externes (tels que des images, des animations Flash, des applets Java et des fichiers audio) avec du code HTML dans un seul fichier. Le contenu d’un fichier MHTML est encodé comme s’il s’agissait d’un message email HTML, en utilisant le type MIME multipart/related. Aspose.PDF for .NET peut convertir des fichiers HTML en format PDF et avec la sortie de Aspose.PDF for .NET 9.0.0, nous avons introduit une nouvelle fonctionnalité qui vous permet de convertir des fichiers MHTML en format PDF. Le code suivant montre comment convertir des fichiers MHTML en format PDF avec C# :

Étapes : Convertir MHTML en PDF en C#

  1. Créez une instance de la classe MhtLoadOptions.
  2. Initialisez l’objet Document.
  3. Enregistrez le document PDF de sortie en appelant la méthode Document.Save().
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertMHTtoPDF()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Initialize MhtLoadOptions with page setup
    var options = new Aspose.Pdf.MhtLoadOptions()
    {
        PageInfo = { Width = 842, Height = 1191, IsLandscape = true }
    };

    // Initialize Document object using the MHT file and options
    using (var document = new Aspose.Pdf.Document(dataDir + "fileformatinfo.mht", options))
    {
        // Save PDF document
        document.Save(dataDir + "MhtmlTest_out.pdf");
    }
}

Voir aussi

Cet article couvre également ces sujets. Les codes sont les mêmes que ci-dessus.

Format: HTML

Format: MHTML

Format: WebPage