Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Diese Anleitung zeigt, wie Sie SVG-Dateien in C# mit Aspose.SVG for .NET erstellen, laden und lesen. Sie lernen, wie Sie ein SVGDocument aus einem leeren Dokument, String-Inhalt, Stream, einer lokalen Datei oder URL initialisieren und wie Sie SVG-Dokumente mit externen Ressourcen asynchron laden.
Die Klasse SVGDocument ist der Einstiegspunkt für die Arbeit mit SVG-Inhalten in Aspose.SVG for .NET. Sie stellt die Wurzel der SVG-DOM-Hierarchie dar, enthält den gesamten Dokumentinhalt und folgt den Spezifikationen
W3C SVG 2.0 und
WHATWG DOM.
SVG-Dateien können erstellt und geladen werden:
Die folgenden C#-Beispiele zeigen die wichtigsten SVGDocument-Konstruktoren und Ladeszenarien.
Der schnellste Weg zum Erstellen eines SVG-Dokuments besteht darin, SVG-Markup als String an den SVGDocument-Konstruktor zu übergeben. Das ist nützlich, wenn SVG-Inhalte in Ihrer Anwendung dynamisch erzeugt werden:
1using Aspose.Svg;
2...
3
4 string svgContent = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\"><circle cx=\"50\" cy=\"50\" r=\"40\" /></svg>";
5
6 using (SVGDocument document = new SVGDocument(svgContent, "."))
7 {
8 document.Save("circle.svg");
9 }Aspose.SVG for .NET API stellt die Klasse SVGDocument bereit, mit der Sie über den Standardkonstruktor ein leeres Dokument erstellen können. Nachdem das Dokumentobjekt erstellt wurde, kann es später mit SVG-Elementen gefüllt werden. Der folgende C#-Codeausschnitt zeigt die Verwendung des Standardkonstruktors SVGDocument() zum Erstellen eines SVG-Dokuments.
1using Aspose.Svg;
2...
3
4 // Initialize an empty SVG document
5 using (SVGDocument document = new SVGDocument())
6 {
7 // Work with the SVG document here...
8 }Wenn Sie ein erstelltes leeres SVG-Dokument in einer Datei speichern möchten, verwenden Sie den folgenden C#-Codeausschnitt:
1using Aspose.Svg;
2using System.IO; 1// Create an empty SVG document using C#
2
3// Prepare an output path to save a document
4string documentPath = Path.Combine(OutputDir, "empty.svg");
5
6// Initialize an empty SVG document
7using (SVGDocument document = new SVGDocument())
8{
9 // Work with the SVG document here...
10
11 // Save the document to a file
12 document.Save(documentPath);
13}Weitere Details zum Speichern von SVG-Dateien finden Sie im Abschnitt SVG-Dokument speichern. Im Artikel SVG-Datei bearbeiten erfahren Sie, wie Sie SVG mit der Bibliothek Aspose.SVG for .NET bearbeiten, neue Elemente zu SVG-Dokumenten hinzufügen und SVG-Filter auf Bitmaps anwenden.
Verwenden Sie den Konstruktor
SVGDocument(string, string), wenn SVG-Markup bereits im Speicher vorhanden ist, zum Beispiel nachdem es von Ihrer Anwendung erzeugt oder aus einer Datenbank, API oder Benutzereingabe empfangen wurde.
Das zweite Konstruktorargument ist der Basis-URI. Aspose.SVG verwendet ihn, um relative Pfade im SVG aufzulösen, zum Beispiel verknüpfte Bilder, CSS-Dateien oder Schriftarten. Wenn das SVG-Markup keine externen Ressourcen referenziert, können Sie "." übergeben, wie im Schnellstartbeispiel oben gezeigt. Andernfalls übergeben Sie den Ordner oder die URL, in dem bzw. der sich diese Ressourcen befinden:
1using Aspose.Svg;
2using System.IO;
3...
4
5 // SVG markup contains a relative reference to an external image
6 string documentContent = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"120\"><image href=\"images/logo.png\" width=\"200\" height=\"120\" /></svg>";
7
8 // Relative paths in the SVG are resolved against this base URI
9 string baseUri = Path.Combine(DataDir, "assets") + Path.DirectorySeparatorChar;
10
11 // Initialize an SVG document from a string content
12 using (SVGDocument document = new SVGDocument(documentContent, baseUri))
13 {
14 // Work with the document here...
15 }Um SVG aus einem Stream zu laden, verwenden Sie einen der SVGDocument()-Konstruktoren, die ein Stream-Objekt akzeptieren. Dieses Muster eignet sich zum Lesen von SVG aus hochgeladenen Dateien, eingebetteten Ressourcen, Speicherpuffern oder anderen Quellen, die keine Dateien sind:
1using Aspose.Svg;
2using System.IO;
3...
4
5 //Prepare a path to a file required for a FileStream object creating
6 string documentPath = Path.Combine(DataDir, "bezier-curves.svg");
7
8 // Create a FileStream object
9 using (FileStream stream = new FileStream(documentPath, FileMode.Open, FileAccess.Read))
10 {
11 // Initialize an SVG document from the stream
12 using (SVGDocument document = new SVGDocument(stream, "."))
13 {
14 // Work with the document
15 }
16 }Die SVG Builder API bietet eine leistungsstarke und flexible Möglichkeit, SVG-Dokumente programmgesteuert zu erstellen. Mit der Klasse SVGSVGElementBuilder können Entwickler komplexe SVG-Grafiken mit detaillierten Anpassungsoptionen erstellen. Weitere Informationen finden Sie unter
Erweiterte SVG-Erstellung und -Änderung mit Aspose.SVG Builder API.
Hier ist ein Beispiel, das zeigt, wie Sie ein benutzerdefiniertes SVG-Dokument mit verschiedenen grafischen Elementen erstellen:
1using System.IO;
2using Aspose.Svg;
3using Aspose.Svg.Builder;
4using System.Drawing; 1// Create SVG using Builder API
2
3// Initialize an SVG document
4using (SVGDocument document = new SVGDocument())
5{
6 // Create an <svg> element with specified width, height and viewBox, and add into it other required elements
7 SVGSVGElement svg = new SVGSVGElementBuilder()
8 .Width(100).Height(100)
9 .ViewBox(-21, -21, 42, 42)
10 .AddDefs(def => def
11 .AddRadialGradient(id: "b", cx: .2, cy: .2, r: .5, fx: .2, fy: .2, extend: ev => ev
12 .AddStop(offset: 0, stopColor: Color.FromArgb(0xff, 0xff, 0xFF), stopOpacity: .7)
13 .AddStop(offset: 1, stopColor: Color.FromArgb(0xff, 0xff, 0xFF), stopOpacity: 0)
14 )
15 .AddRadialGradient(id: "a", cx: .5, cy: .5, r: .5, extend: ev => ev
16 .AddStop(offset: 0, stopColor: Color.FromArgb(0xff, 0xff, 0x00))
17 .AddStop(offset: .75, stopColor: Color.FromArgb(0xff, 0xff, 0x00))
18 .AddStop(offset: .95, stopColor: Color.FromArgb(0xee, 0xee, 0x00))
19 .AddStop(offset: 1, stopColor: Color.FromArgb(0xe8, 0xe8, 0x00))
20 )
21 )
22 .AddCircle(r: 20, fill: "url(#a)", stroke: Color.FromArgb(0, 0, 0), extend: c => c.StrokeWidth(.15))
23 .AddCircle(r: 20, fill: "b")
24 .AddG(g => g.Id("c")
25 .AddEllipse(cx: -6, cy: -7, rx: 2.5, ry: 4)
26 .AddPath(fill: Paint.None, stroke: Color.FromArgb(0, 0, 0), d: "M10.6 2.7a4 4 0 0 0 4 3", extend: e => e.StrokeWidth(.5).StrokeLineCap(StrokeLineCap.Round))
27 )
28 .AddUse(href: "#c", extend: e => e.Transform(t => t.Scale(-1, 1)))
29 .AddPath(d: "M-12 5a13.5 13.5 0 0 0 24 0 13 13 0 0 1-24 0", fill: Paint.None, stroke: Color.FromArgb(0, 0, 0), extend: e => e.StrokeWidth(.75))
30 .Build(document.FirstChild as SVGSVGElement);
31
32 // Save the SVG document
33 document.Save(Path.Combine(OutputDir, "face.svg"));
34}Dieser Codeausschnitt erstellt ein SVG-Dokument mit einem komplexen Design und zeigt die Flexibilität und Leistungsfähigkeit der SVG Builder API beim programmgesteuerten Erzeugen benutzerdefinierter SVG-Grafiken. Im obigen C#-Code erstellen wir ein SVG-Dokument mit Elementen wie Kreisen, Ellipsen, Pfaden und Farbverläufen. Das generierte SVG-Bild stellt ein Gesicht mit einem Lächeln dar:
Um SVG aus einer Datei bezier-curves.svg zu laden, verwenden Sie den Standardkonstruktor der Klasse SVGDocument und übergeben den Dateipfad als Eingabeparameter.
1using Aspose.Svg;
2using System.IO;
3...
4
5 // Prepare a path to a file loading
6 string documentPath = Path.Combine(DataDir, "bezier-curves.svg");
7
8 // Load an SVG document from the file
9 using (SVGDocument document = new SVGDocument(documentPath))
10 {
11 // Work with the document
12 }Sie können SVG auch direkt aus einer URL laden. Die folgenden Beispiele zeigen, wie Sie ein SVGDocument aus einer Webadresse erstellen, die auf eine SVG-Datei verweist:
1using Aspose.Svg;
2...
3
4 // Load SVG from the Web at its URL
5 Url documentUrl = new Url("https://docs.aspose.com/svg/files/owl.svg");
6 using (SVGDocument document = new SVGDocument(documentUrl))
7 {
8 // Work with the SVG document here...
9 }1using Aspose.Svg;
2...
3
4 // Load SVG from the Web at its URL
5 using (SVGDocument document = new SVGDocument(new Url("https://docs.aspose.com/svg/files/basic-shapes.svg")))
6 {
7 // Work with the SVG document here...
8 }Wenn Sie eine falsche URL angeben, die nicht erreichbar ist, löst die Bibliothek eine DOMException mit dem speziellen Code NetworkError aus, um mitzuteilen, dass die ausgewählte Ressource nicht gefunden werden kann.
Wenn ein SVG-Dokument externe Ressourcen wie Bilder, Schriftarten, CSS-Dateien oder Skripte referenziert, kann das Laden zusätzliche Zeit benötigen und den Hauptthread der Anwendung blockieren. In einem asynchronen Lademodell können Sie die Ereignisse Load und ReadyStateChange abonnieren und Ihre Anwendung benachrichtigen, sobald das SVG-Dokument und seine Ressourcen bereit sind.
Die Methode
Navigate(Url) der Klasse
SVGDocument lädt das Dokument von der angegebenen URL in die aktuelle Instanz.
1using Aspose.Svg;
2using System.Threading; 1// Load SVG asynchronously using C#
2
3Url documentUrl = new Url("https://docs.aspose.com/svg/files/owl.svg");
4ManualResetEvent documentEvent = new ManualResetEvent(false);
5
6SVGDocument document = new SVGDocument();
7
8// Subscribe to the event 'OnReadyStateChange' that will be fired once the document is completely loaded
9document.OnReadyStateChange += (sender, ev) =>
10{
11 if (document.ReadyState == "complete")
12 {
13 // Sets the state of the event to signaled to unblock the main thread
14 documentEvent.Set();
15 }
16};
17
18// Load an SVG document Async
19document.Navigate(documentUrl);
20
21// Blocks the current thread while the document is loading
22documentEvent.WaitOne();
23
24// Work with the documentSie können die vollständigen Beispiele und Datendateien von GitHub herunterladen. Informationen zum Herunterladen von GitHub und Ausführen der Beispiele finden Sie im Abschnitt So führen Sie die Beispiele aus.
1. Warum werden Bilder, Schriftarten oder CSS-Dateien nicht geladen, wenn ich SVG aus einem String oder Stream erstelle?
Wenn SVG aus einem String oder Stream erstellt wird, werden relative Ressourcenpfade gegen den Basis-URI aufgelöst, der an den SVGDocument-Konstruktor übergeben wird. Wenn verknüpfte Bilder, Schriftarten oder CSS-Dateien nicht geladen werden, prüfen Sie, ob der Basis-URI auf den Ordner oder die URL mit diesen Ressourcen zeigt.
2. Was passiert, wenn eine SVG-Datei ungültiges Markup enthält?
Aspose.SVG analysiert SVG als XML-basierten Inhalt. Wenn das Markup fehlerhaft ist oder erforderliche Ressourcen nicht aufgelöst werden können, kann das Laden des Dokuments oder eine spätere Verarbeitung fehlschlagen. Validieren Sie erzeugtes SVG-Markup und behandeln Sie Ladeausnahmen in Produktionscode.
3. Kann ich ein SVGDocument nach dem Laden ändern?
Ja. Nachdem eine SVG-Datei geladen wurde, können Sie ihr DOM durchlaufen und ändern, Elemente hinzufügen oder entfernen, Attribute aktualisieren, Stile anwenden und das Ergebnis speichern. Detaillierte Bearbeitungsbeispiele finden Sie im Artikel
SVG-Datei bearbeiten.
4. Ist SVGDocument für serverseitige Anwendungen geeignet?
Ja. Aspose.SVG for .NET kann in Backend-Diensten, ASP.NET-Anwendungen, Batch-Prozessoren und Dokumentautomatisierungs-Workflows verwendet werden, ohne auf Browserautomatisierung angewiesen zu sein.
5. Was ist der Unterschied zwischen SVG Builder API und DOM-Manipulation?
Die SVG Builder API eignet sich gut, um neue SVG-Strukturen in C# Schritt für Schritt zu erstellen. DOM-Manipulation ist besser, wenn Sie mit einem bereits geladenen SVG-Dokument arbeiten und vorhandene Elemente, Attribute oder Stile ändern müssen.
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.