SVG-Text in Python zeichnen

Kurze Antwort: Um SVG-Text in Python zu zeichnen, erstellen Sie ein <text>-Element mit create_element_ns(), setzen die Attribute x, y, font-family, font-size, fill und text-anchor mit set_attribute(), setzen text_content, hängen den Text an das SVG-Wurzelelement an und speichern das Dokument.

1from aspose.svg import SVGDocument
2
3with SVGDocument() as document:
4    text = document.create_element_ns("http://www.w3.org/2000/svg", "text")
5    text.set_attribute("x", "20")
6    text.set_attribute("y", "40")
7    text.text_content = "Hello SVG"
8    document.root_element.append_child(text)
9    document.save("text.svg")

In diesem Artikel lernen Sie, wie Sie:

SVG-Text bleibt echter Text im SVG-Markup. Er kann später ausgewählt, durchsucht, lokalisiert, gestaltet und bearbeitet werden. Wenn Sie Text für finale Grafik oder fontunabhängiges Rendering in Vektorkonturen umwandeln müssen, verwenden Sie stattdessen Textvektorisierung. Mehr Hintergrund zu SVG-Markup finden Sie im Leitfaden SVG Text.

Grundlagen von SVG-Text

Attribut oder ElementVerwendung
x, yPositioniert die Textgrundlinie
font-familyWählt die angeforderte Schriftfamilie
font-sizeSetzt die Textgröße in SVG-Einheiten
fillSetzt die Textfarbe
text-anchorRichtet Text relativ zur x-Koordinate aus
<tspan>Fügt positionierte Fragmente oder einfachen mehrzeiligen Text hinzu

SVG-Text in Python zeichnen

Verwenden Sie diesen Workflow, wenn generierte SVG-Grafik Labels, Beschriftungen, Badges oder Text in Diagrammen benoetigt:

  1. Erstellen oder laden Sie ein SVGDocument.
  2. Setzen Sie width, height und viewBox des SVG-Wurzelelements, wenn Sie ein neues Dokument erstellen.
  3. Erstellen Sie ein <text>-Element mit create_element_ns().
  4. Setzen Sie Positions- und Stilattribute wie x, y, font-size, font-family, fill und text-anchor mit set_attribute().
  5. Setzen Sie text_content oder hängen Sie <tspan>-Kindelemente an.
  6. Hängen Sie das Textelement mit append_child() an das SVG-Wurzelelement an und speichern Sie das Dokument mit document.save().

Einfaches SVG-Textlabel erstellen

Das folgende Beispiel erstellt ein kleines SVG-Label mit Hintergrundrechteck und zentriertem Text. Verwenden Sie text-anchor="middle", wenn die x-Koordinate die horizontale Mitte des Textes darstellen soll.

 1import os
 2from aspose.svg import SVGDocument
 3
 4namespace_uri = "http://www.w3.org/2000/svg"
 5
 6output_folder = "output/"
 7output_path = os.path.join(output_folder, "svg-text-label.svg")
 8os.makedirs(output_folder, exist_ok=True)
 9
10with SVGDocument() as document:
11    svg = document.root_element
12    svg.set_attribute("width", "320")
13    svg.set_attribute("height", "120")
14    svg.set_attribute("viewBox", "0 0 320 120")
15
16    background = document.create_element_ns(namespace_uri, "rect")
17    background.set_attribute("x", "24")
18    background.set_attribute("y", "24")
19    background.set_attribute("width", "272")
20    background.set_attribute("height", "72")
21    background.set_attribute("rx", "12")
22    background.set_attribute("fill", "#f7f7fb")
23    background.set_attribute("stroke", "#546e7a")
24    background.set_attribute("stroke-width", "3")
25    svg.append_child(background)
26
27    label = document.create_element_ns(namespace_uri, "text")
28    label.set_attribute("x", "160")
29    label.set_attribute("y", "68")
30    label.set_attribute("text-anchor", "middle")
31    label.set_attribute("font-family", "Arial, sans-serif")
32    label.set_attribute("font-size", "26")
33    label.set_attribute("font-weight", "700")
34    label.set_attribute("fill", "#263238")
35    label.text_content = "SVG Text"
36    svg.append_child(label)
37
38    document.save(output_path)

Die Textgrundlinie wird durch y gesteuert, nicht durch die obere Kante der Buchstaben. Wenn die vertikale Position exakt optisch zentriert sein muss, passen Sie den y-Wert an oder verwenden Sie Schriftmetriken in Ihrer eigenen Layoutlogik.

Die Abbildung zeigt das Ergebnis des Beispiels: Ein abgerundetes Rechteck dient als einfacher Label-Hintergrund, und text-anchor="middle" richtet die Beschriftung SVG Text an der mittleren x-Koordinate aus.

Zentriertes SVG-Textlabel in einem abgerundeten Rechteck, erstellt mit Aspose.SVG for Python

Mehrzeiligen SVG-Text mit <tspan> erstellen

Verwenden Sie <tspan>, wenn ein Textblock mehrere Zeilen oder separat positionierte Fragmente enthalten soll. Das nächste Beispiel erstellt ein <text>-Element und hängt zwei <tspan>-Kindelemente mit unterschiedlichen y-Positionen an.

 1import os
 2from aspose.svg import SVGDocument
 3
 4namespace_uri = "http://www.w3.org/2000/svg"
 5
 6output_folder = "output/"
 7output_path = os.path.join(output_folder, "svg-multiline-text.svg")
 8os.makedirs(output_folder, exist_ok=True)
 9
10with SVGDocument() as document:
11    svg = document.root_element
12    svg.set_attribute("width", "400")
13    svg.set_attribute("height", "120")
14    svg.set_attribute("viewBox", "0 0 400 120")
15
16    text = document.create_element_ns(namespace_uri, "text")
17    text.set_attribute("x", "200")
18    text.set_attribute("y", "48")
19    text.set_attribute("font-family", "Arial, sans-serif")
20    text.set_attribute("font-size", "22")
21    text.set_attribute("text-anchor", "middle")
22    text.set_attribute("fill", "#263238")
23
24    first_line = document.create_element_ns(namespace_uri, "tspan")
25    first_line.set_attribute("x", "200")
26    first_line.set_attribute("y", "48")
27    first_line.text_content = "Generated SVG Text"
28    text.append_child(first_line)
29
30    second_line = document.create_element_ns(namespace_uri, "tspan")
31    second_line.set_attribute("x", "200")
32    second_line.set_attribute("y", "84")
33    second_line.set_attribute("fill", "#2e86de")
34    second_line.text_content = "with Aspose.SVG for Python via .NET"
35    text.append_child(second_line)
36
37    svg.append_child(text)
38    document.save(output_path)

Beide Zeilen gehören zum selben <text>-Element, aber jedes <tspan> besitzt eine eigene Position und kann Stilattribute wie fill überschreiben.

Die Abbildung zeigt die zweizeilige SVG-Textausgabe. Das erste <tspan> zeichnet den dunklen Titel, und das zweite <tspan> verwendet eine eigene y-Position sowie einen blauen fill-Wert für die Unterzeile.

Zweizeiliger SVG-Text, erstellt mit tspan-Elementen und unterschiedlichen fill-Werten in Python

Häufige Fehler und Lösungen

ProblemLösung
Text ist nicht sichtbarSetzen Sie fill, prüfen Sie x und y, und stellen Sie sicher, dass der Text innerhalb der viewBox liegt
Text erscheint zu hoch oder zu niedrigDenken Sie daran, dass y die Textgrundlinie positioniert, nicht die obere Kante
Zentrierung funktioniert nichtSetzen Sie text-anchor="middle" und verwenden Sie die gewünschte Mitte als x-Wert
Mehrzeiliger Text überlapptGeben Sie jedem <tspan> einen eigenen y-Wert oder verwenden Sie dy-Abstände kontrolliert
Text wird auf einem anderen Rechner anders gerendertVerwenden Sie verbreitete Schriftarten oder wandeln Sie finale Grafik in Vektorpfade um, wenn Fontunabhängigkeit wichtig ist

FAQ

Wie füge ich Text zu SVG in Python hinzu?

Erstellen Sie ein <text>-Element mit create_element_ns(), setzen Sie die Attribute x, y, font-family, font-size und fill, setzen Sie text_content, hängen Sie es an das SVG-Wurzelelement an und speichern Sie das SVG.

Wie zentriere ich SVG-Text?

Setzen Sie text-anchor="middle" und setzen Sie x auf die gewünschte horizontale Mitte. Passen Sie y für die Position der Grundlinie an.

Kann ich mehrzeiligen SVG-Text erstellen?

Ja. Verwenden Sie ein <text>-Element mit mehreren <tspan>-Kindelementen. Geben Sie jedem <tspan> eigene Werte für x und y oder verwenden Sie kontrollierte dy-Abstände.

Sollte ich SVG-Text zeichnen oder Text vektorisieren?

Zeichnen Sie normalen SVG-Text, wenn der Text editierbar, durchsuchbar oder lokalisierbar bleiben soll. Vektorisieren Sie Text nur für finale Grafik, die exakte Glyphenkonturen ohne Abhängigkeit von installierten Schriftarten bewahren muss.

Verwandte Artikel