Configuration de l'environnement – C#

Il est souvent utile de disposer de différentes configurations en fonction de l’environnement dans lequel l’application est exécutée. Par exemple, vous pouvez souhaiter configurer la politique des scripts, remplacer le style du document en appliquant une feuille de style utilisateur personnalisée ou gérer toutes les requêtes web de l’application. Aspose.HTML for .NET fournit la classe Configuration qui peut être utilisée exactement à ces fins.

Bac à sable – Sandbox

Un ensemble de drapeaux de sandboxing est un ensemble de zéro ou plusieurs drapeaux, qui sont utilisés pour restreindre les capacités des ressources potentiellement non fiables. L’attribut sandbox vous permet de définir un certain nombre de restrictions sur le contenu chargé dans le cadre, par exemple, de bloquer les formulaires et les scripts. Cela permet d’améliorer la sécurité du document actuel, en particulier lorsqu’un document est chargé dans le cadre à partir d’une source non vérifiée.

L’exemple suivant montre comment marquer Scripts comme une ressource non fiable. En conséquence, Scripts sera désactivé pendant l’exécution de l’application.

 1// Enable sandboxing to restrict script execution when loading HTML
 2
 3// Prepare HTML code and save it to a file
 4string code = "<span>Hello, World!!</span> " +
 5              "<script>document.write('Have a nice day!');</script>";
 6
 7File.WriteAllText(Path.Combine(OutputDir, "sandboxing.html"), code);
 8
 9// Create an instance of Configuration
10using (Configuration configuration = new Configuration())
11{
12    // Mark 'scripts' as an untrusted resource
13    configuration.Security |= Sandbox.Scripts;
14
15    // Initialize an HTML document with specified configuration
16    using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "sandboxing.html"), configuration))
17    {
18        // Convert HTML to PDF
19        Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "sandboxing_out.pdf"));
20    }
21}

Services

Toutes les fonctions importantes sont regroupées dans des services distincts à des fins de convivialité et situées dans l’espace de noms Aspose.Html.Services.

Service d’agent utilisateur – User Agent Service

Le Service de l’agent utilisateur vous permet de spécifier une feuille de style utilisateur personnalisée, un jeu de caractères principal pour le document, des paramètres de langue et de polices. Vous pouvez spécifier vos informations de style personnalisées pour un document particulier et modifier la configuration de l’environnement autant ou aussi peu que nécessaire. L’interface IUserAgentService décrit un environnement d’agent utilisateur.

Feuille de style de l’utilisateur – User Style Sheet

L’utilisateur peut spécifier des informations de style personnalisées pour un document particulier. Ces informations s’appliquent au document conformément aux règles de cascade et peuvent affecter la présentation du document. L’extrait de code suivant montre comment utiliser la propriété UserStyleSheet :

 1// Apply custom CSS via user agent service during HTML processing in C#
 2
 3// Prepare HTML code and save it to a file
 4string code = "<h1>User Agent Service </h1>\r\n" +
 5              "<p>The User Agent Service allows you to specify a custom user stylesheet, a primary character set for the document, language and fonts settings.</p>\r\n";
 6
 7File.WriteAllText(Path.Combine(OutputDir, "user-agent-stylesheet.html"), code);
 8
 9// Create an instance of Configuration
10using (Configuration configuration = new Configuration())
11{
12    // Get the IUserAgentService
13    IUserAgentService userAgentService = configuration.GetService<IUserAgentService>();
14
15    // Set the custom style parameters for the <h1> and <p> elements
16    userAgentService.UserStyleSheet = "h1 { color:#a52a2a;; font-size:2em;}\r\n" +
17                                      "p { background-color:GhostWhite; color:SlateGrey; font-size:1.2em; }\r\n";
18
19    // Initialize the HTML document with specified configuration
20    using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "user-agent-stylesheet.html"), configuration))
21    {
22        // Convert HTML to PDF
23        Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent-stylesheet_out.pdf"));
24    }
25}

Jeu de caractères – Character Set

La propriété CharSet définit le jeu de caractères primaire d’un document. Pour analyser et afficher correctement un document HTML, l’application doit connaître le jeu de caractères (encodage) utilisé pour le document. Si l’encodage des caractères n’est pas directement spécifié dans l’en-tête du document, Aspose.HTML for .NET utilise UTF-8, qui est défini par défaut dans la spécification HTML5. Cependant, si vous êtes sûr que votre document HTML est écrit en utilisant un encodage différent de UTF-8, vous pouvez le spécifier manuellement, comme suit.

 1// Set character encoding and custom styles for HTML to PDF conversion in C#
 2
 3// Prepare HTML code and save it to a file
 4string code = "<h1>Character Set</h1>\r\n" +
 5              "<p>The <b>CharSet</b> property sets the primary character-set for a document.</p>\r\n";
 6
 7File.WriteAllText(Path.Combine(OutputDir, "user-agent-charset.html"), code);
 8
 9// Create an instance of Configuration
10using (Configuration configuration = new Configuration())
11{
12    // Get the IUserAgentService
13    IUserAgentService userAgentService = configuration.GetService<IUserAgentService>();
14
15    // Set the custom style parameters for the <h1> and <p> elements
16    userAgentService.UserStyleSheet = "h1 { color:salmon; }\r\n" +
17                                      "p { background-color:#f0f0f0; color:DarkCyan; font-size:1.2em; }\r\n";
18
19    // Set ISO-8859-1 encoding to parse the document
20    userAgentService.CharSet = "ISO-8859-1";
21
22    // Initialize the HTML document with specified configuration
23    using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "user-agent-charset.html"), configuration))
24    {
25        // Convert HTML to PDF
26        Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent-charset_out.pdf"));
27    }
28}

Dans l’exemple ci-dessus, nous avons utilisé les propriétés CharSet et UserStyleSheet pour un encodage ISO-8859-1 et un style utilisateur.

Installer le dossier de polices

Aspose.HTML for .NET est une puissante bibliothèque permettant de travailler avec des documents HTML dans des applications .NET. Elle offre un large éventail de fonctionnalités permettant aux développeurs de rendre des documents HTML dans différents formats de sortie, tels que PDF, XPS, DOCX et images. L’une des principales caractéristiques d’Aspose.HTML est sa capacité à travailler avec des polices personnalisées, ce qui permet aux développeurs d’ajouter leurs propres polices au processus de rendu.

La propriété FontsSettings est utilisée pour la configuration de la gestion des polices. Dans le cas où vous avez besoin d’utiliser des polices personnalisées au lieu des polices installées sur le système d’exploitation, vous pouvez définir le chemin d’accès à votre dossier personnalisé, comme le montre l’extrait de code suivant :

 1// Set font folder for HTML to PDF conversion using C#
 2
 3// Prepare HTML code and save it to a file
 4string code = "<h1>FontsSettings property</h1>\r\n" +
 5              "<p>The FontsSettings property is used for configuration of fonts handling.</p>\r\n";
 6
 7File.WriteAllText(Path.Combine(OutputDir, "user-agent-fontsetting.html"), code);
 8
 9// Create an instance of Configuration
10using (Configuration configuration = new Configuration())
11{
12    // Get the IUserAgentService
13    IUserAgentService userAgentService = configuration.GetService<IUserAgentService>();
14
15    // Set the custom style parameters for the <h1> and <p> elements
16    userAgentService.UserStyleSheet = "h1 { color:#a52a2a; }\r\n" +
17                                      "p { color:grey; }\r\n";
18
19    // Set a custom font folder path
20    userAgentService.FontsSettings.SetFontsLookupFolder(Path.Combine(DataDir + "fonts"));
21
22    // Initialize the HTML document with specified configuration
23    using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "user-agent-fontsetting.html"), configuration))
24    {
25        // Convert HTML to PDF
26        Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent-fontsetting_out.pdf"));
27    }
28}

Pour définir le dossier des polices à l’aide de la bibliothèque Aspose.HTML for .NET, nous utilisons la méthode SetFontsLookupFolder() de la classe FontsSettings. Cette méthode vous permet de spécifier le dossier dans lequel se trouvent les polices personnalisées. En définissant le dossier des polices, Aspose.HTML recherchera les polices dans le dossier spécifié lors du rendu du document HTML.

La figure illustre le résultat de l’application des propriétés FontsSettings et UserStyleSheet (b) au fichier source “user-agent-fontsetting.html” (a).

Texte “Propriété FontsSettings”

Service d’exécution – Runtime Service

Ce service vous permet de contrôler la durée de vie des processus internes. Par exemple, en utilisant IRuntimeService, vous pouvez spécifier des délais d’attente pour les JavaScripts. Il est important de disposer d’un tel délai au cas où un script contiendrait une boucle sans fin. L’extrait de code suivant montre comment utiliser les délais d’attente.

 1// Limit JavaScript execution time for HTML rendering using C#
 2
 3// Prepare an HTML code and save it to a file
 4string code = "<h1>Runtime Service</h1>\r\n" +
 5              "<script> while(true) {} </script>\r\n" +
 6              "<p>The Runtime Service optimizes your system by helping it start apps and programs faster.</p>\r\n";
 7
 8File.WriteAllText(Path.Combine(OutputDir, "runtime-service.html"), code);
 9
10// Create an instance of Configuration
11using (Configuration configuration = new Configuration())
12{
13    // Limit JS execution time to 5 seconds
14    IRuntimeService runtimeService = configuration.GetService<IRuntimeService>();
15    runtimeService.JavaScriptTimeout = TimeSpan.FromSeconds(5);
16
17    // Initialize an HTML document with specified configuration
18    using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "runtime-service.html"), configuration))
19    {
20        // Convert HTML to PNG
21        Converter.ConvertHTML(document, new ImageSaveOptions(), Path.Combine(OutputDir, "runtime-service_out.png"));
22    }
23}

Service de réseau – Network Service

Aspose.HTML for .NET propose le INetworkService qui vous permet de contrôler tout le trafic entrant/sortant et de mettre en œuvre vos gestionnaires de messages personnalisés. Il peut être utilisé à différentes fins, telles que la création d’un mécanisme de mise en cache personnalisé, la traçabilité et l’enregistrement des messages de demande, etc.

Gestionnaires de messages – Message Handlers

L’exemple suivant montre comment créer un gestionnaire de messages personnalisé – LogMessageHandler – pour consigner des informations sur les ressources inaccessibles :

 1// Сustom network message handler to log HTTP errors during HTML processing
 2
 3private class LogMessageHandler : MessageHandler
 4{
 5    private List<string> errors = new List<string>();
 6
 7    public List<string> ErrorMessages
 8    {
 9        get { return errors; }
10    }
11
12    public override void Invoke(INetworkOperationContext context)
13    {
14        // Check whether response is OK
15        if (context.Response.StatusCode != HttpStatusCode.OK)
16        {
17            // Set error information
18            errors.Add(string.Format("File '{0}' Not Found", context.Request.RequestUri));
19        }
20
21        // Invoke the next message handler in the chain
22        Next(context);
23    }
24}

L’extrait de code suivant montre comment utiliser la classe LogMessageHandler créée dans l’exemple précédent pour enregistrer des informations sur les ressources indisponibles.

 1// Log network errors during HTML processing using custom message handler in C#
 2
 3// Prepare HTML code and save it to a file
 4string code = "<img src=\"https://docs.aspose.com/svg/net/drawing-basics/filters-and-gradients/park.jpg\" >\r\n" +
 5              "<img src=\"https://docs.aspose.com/html/net/missing1.jpg\" >\r\n" +
 6              "<img src=\"https://docs.aspose.com/html/net/missing2.jpg\" >\r\n";
 7
 8File.WriteAllText(Path.Combine(OutputDir, "network-service.html"), code);
 9
10// Create an instance of Configuration
11using (Configuration configuration = new Configuration())
12{
13    // Add the LogMessageHandler to the chain of existing message handlers
14    INetworkService networkService = configuration.GetService<INetworkService>();
15
16    LogMessageHandler logHandler = new LogMessageHandler();
17    networkService.MessageHandlers.Add(logHandler);
18
19    // Initialize an HTML document with specified configuration
20    using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "network-service.html"), configuration))
21    {
22        //Convert HTML to PNG
23        Converter.ConvertHTML(document, new ImageSaveOptions(), Path.Combine(OutputDir, "network-service_out.png"));
24
25        // Print the List of ErrorMessages
26        foreach (string errorMessage in logHandler.ErrorMessages)
27        {
28            Console.WriteLine(errorMessage);
29        }
30    }
31}

Après l’exécution de l’exemple :

File 'https://docs.aspose.com/html/net/missing1.jpg' Not Found
File 'https://docs.aspose.com/html/net/missing2.jpg' Not Found

Vous pouvez télécharger les exemples complets et les fichiers de données sur GitHub.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.