Umgebungskonfiguration – C#
Oft ist es hilfreich, je nach Umgebung, in der die Anwendung ausgeführt wird, unterschiedliche Konfigurationen zu haben. So kann es z.B. sinnvoll sein, die Skript-Policy zu konfigurieren, den Dokumentenstil mit einem benutzerdefinierten Stylesheet zu überschreiben oder Web-Anfragen aus der Anwendung heraus zu bearbeiten. Aspose.HTML for .NET bietet die Klasse Configuration, die genau für diese Zwecke verwendet werden kann.
Sandboxing
Ein Sandboxing-Flag ist ein Satz von null oder mehr Flags, die verwendet werden, um die Fähigkeiten von potenziell nicht vertrauenswürdigen Ressourcen zu beschränken. Mit dem Sandbox-Attribut können Sie eine Reihe von Einschränkungen für den in den Frame geladenen Inhalt festlegen, z. B. Formulare und Skripte blockieren. Dadurch wird die Sicherheit des aktuellen Dokuments verbessert, insbesondere wenn ein Dokument aus einer nicht verifizierten Quelle in den Frame geladen wird.
Das folgende Beispiel zeigt, wie man Scripts
als nicht vertrauenswürdige Ressource kennzeichnet. Infolgedessen wird “Scripts” während der Ausführung der Anwendung deaktiviert.
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}
Dienste
Alle wichtigen Funktionen sind aus Gründen der Benutzerfreundlichkeit in separaten Services gruppiert und befinden sich im Aspose.Html.Services Namespace.
User Agent Dienst
Der User Agent Service ermöglicht es Ihnen, ein benutzerdefiniertes Stylesheet, einen primären Zeichensatz für das Dokument sowie Sprach- und Schrifteinstellungen anzugeben. Sie können Ihre benutzerdefinierten Stilinformationen für ein bestimmtes Dokument angeben und die Umgebungskonfiguration so wenig oder so viel wie nötig ändern. Die Schnittstelle IUserAgentService beschreibt eine User-Agent-Umgebung.
Benutzer-Stilvorlage
Der Benutzer kann benutzerdefinierte Stilinformationen für ein bestimmtes Dokument angeben. Diese Informationen gelten für das Dokument gemäß den Kaskadierungsregeln und können die Darstellung des Dokuments beeinflussen. Das folgende Codeschnipsel zeigt, wie die Eigenschaft “UserStyleSheet” verwendet werden kann:
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}
Zeichensatz
Die Eigenschaft CharSet
legt den primären Zeichensatz für ein Dokument fest. Um ein HTML-Dokument korrekt zu parsen und anzuzeigen, muss die Anwendung wissen, welcher Zeichensatz (Kodierung) für das Dokument verwendet wird. Wenn die Zeichenkodierung nicht direkt in der Kopfzeile des Dokuments angegeben ist, verwendet Aspose.HTML for .NET UTF-8, das als Standard für die HTML5-Spezifikation definiert ist. Wenn Sie sich jedoch sicher sind, dass Ihr HTML-Dokument mit einer anderen als der UTF-8-Kodierung geschrieben wurde, können Sie diese manuell angeben, wie im Folgenden beschrieben.
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}
Im obigen Beispiel haben wir die Eigenschaften CharSet
und UserStyleSheet
für eine Einstellung der ISO-8859-1-Kodierung und einen Benutzerstil verwendet.
Font-Ordner installieren
Aspose.HTML for .NET ist eine leistungsstarke Bibliothek für die Arbeit mit HTML-Dokumenten in .NET-Anwendungen. Sie bietet eine breite Palette von Funktionen, die es Entwicklern ermöglichen, HTML-Dokumente in verschiedene Ausgabeformate wie PDF, XPS, DOCX und Bilder zu rendern. Eines der Hauptmerkmale von Aspose.HTML ist die Fähigkeit, mit benutzerdefinierten Schriftarten zu arbeiten, so dass Entwickler ihre eigenen Schriftarten zum Rendering-Prozess hinzufügen können.
Die Eigenschaft FontsSettings
wird für die Konfiguration der Handhabung von Schriftarten verwendet. Wenn Sie die benutzerdefinierten Schriftarten anstelle der im Betriebssystem installierten Schriftarten verwenden möchten, können Sie den Pfad zu Ihrem benutzerdefinierten Ordner festlegen, wie im folgenden Codeschnipsel gezeigt:
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}
Um den Schriftordner mit der Aspose.HTML for .NET-Bibliothek festzulegen, verwenden wir die Methode “SetFontsLookupFolder()” der Klasse FontsSettings. Mit dieser Methode können Sie den Ordner angeben, in dem sich die benutzerdefinierten Schriftarten befinden. Durch das Festlegen des Schriftordners sucht Aspose.HTML beim Rendern des HTML-Dokuments nach Schriftarten im angegebenen Ordner.
Die Abbildung zeigt das Ergebnis der Anwendung der Eigenschaften FontsSettings
und UserStyleSheet
(b) auf die Quelldatei “user-agent-fontsetting.html” (a).
Laufzeitdienst
Dieser Dienst gibt Ihnen die Kontrolle über die Lebensdauer der internen Prozesse. Mit IRuntimeService können Sie zum Beispiel Timeouts für JavaScripts festlegen. Eine solche Zeitüberschreitung ist wichtig für den Fall, dass ein Skript eine Endlosschleife enthält. Der nächste Codeschnipsel zeigt, wie man Timeouts verwendet.
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}
Netzwerkdienst
Aspose.HTML for .NET bietet den INetworkService, der es Ihnen ermöglicht, den gesamten eingehenden/ausgehenden Datenverkehr zu kontrollieren und Ihre eigenen Nachrichten-Handler zu implementieren. Er kann für verschiedene Zwecke verwendet werden, wie z.B.: Erstellen eines benutzerdefinierten Caching-Mechanismus, Verfolgen/Protokollieren von Anforderungsnachrichten, etc.
Nachrichten-Handler
Das folgende Beispiel zeigt, wie ein benutzerdefinierter Nachrichten-Handler – LogMessageHandler – erstellt wird, um Informationen über nicht erreichbare Ressourcen zu protokollieren:
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}
Der nächste Codeausschnitt demonstriert, wie die im vorherigen Beispiel erstellte Klasse LogMessageHandler verwendet wird, um Informationen über nicht erreichbare Ressourcen zu protokollieren.
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}
Nach der Ausführung des Beispiels:
- wird die erstellte Datei
network-service.html
in PNG umgewandelt. In der PNG-Datei befindet sich nur ein Bild; - die Liste der Fehlermeldungen wird gedruckt:
File 'https://docs.aspose.com/html/net/missing1.jpg' Not Found
File 'https://docs.aspose.com/html/net/missing2.jpg' Not Found
Sie können die vollständigen Beispiele und Datendateien von GitHub herunterladen.