Dessiner du texte SVG en Python

Réponse rapide: Pour dessiner du texte SVG en Python, créez un élément <text> avec create_element_ns(), définissez les attributs x, y, font-family, font-size, fill et text-anchor avec set_attribute(), définissez text_content, ajoutez le texte à la racine SVG et enregistrez le document.

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")

Dans cet article, vous apprendrez à:

Le texte SVG reste du vrai texte dans le balisage SVG. Il peut être sélectionné, recherché, localisé, stylisé et modifié plus tard. Si vous devez convertir du texte en contours vectoriels pour une illustration finale ou un rendu indépendant des polices, utilisez plutôt la vectorisation du texte. Pour un contexte plus large sur le balisage SVG, consultez le guide SVG Text.

Bases du texte SVG

Attribut ou élémentUtilisation
x, yPositionne la ligne de base du texte
font-familyChoisit la famille de police demandée
font-sizeDéfinit la taille du texte en unités SVG
fillDéfinit la couleur du texte
text-anchorAligne le texte par rapport à la coordonnée x
<tspan>Ajoute des fragments positionnés ou un texte multiligne simple

Comment dessiner du texte SVG en Python

Utilisez ce workflow lorsque les graphiques SVG générés nécessitent des libellés, légendes, badges ou du texte dans des diagrammes:

  1. Créez ou chargez un SVGDocument.
  2. Définissez width, height et viewBox sur la racine SVG si vous créez un nouveau document.
  3. Créez un élément <text> avec create_element_ns().
  4. Définissez les attributs de position et de style comme x, y, font-size, font-family, fill et text-anchor avec set_attribute().
  5. Définissez text_content ou ajoutez des enfants <tspan>.
  6. Ajoutez l’élément texte à la racine SVG avec append_child() et enregistrez le document avec document.save().

Créer une étiquette de texte SVG simple

L’exemple suivant crée une petite étiquette SVG avec un rectangle d’arrière-plan et un texte centré. Utilisez text-anchor="middle" lorsque la coordonnée x doit représenter le centre horizontal du texte.

 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)

La ligne de base du texte est contrôlée par y, pas par le bord supérieur des lettres. Si le positionnement vertical doit être visuellement centré avec précision, ajustez la valeur y ou utilisez des métriques de police dans votre propre logique de mise en page.

L’illustration montre le résultat de l’exemple: un rectangle arrondi sert d’arrière-plan simple, et text-anchor="middle" aligne le libellé SVG Text autour de la coordonnée x centrale.

Libellé SVG Text centré dans un rectangle arrondi créé avec Aspose.SVG for Python

Créer du texte SVG multiligne avec <tspan>

Utilisez <tspan> lorsqu’un bloc de texte nécessite plusieurs lignes ou des fragments positionnés indépendamment. L’exemple suivant crée un élément <text> et ajoute deux enfants <tspan> avec des positions y différentes.

 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)

Les deux lignes appartiennent au même élément <text>, mais chaque <tspan> possède sa propre position et peut remplacer des attributs de style comme fill.

L’illustration montre la sortie de texte SVG sur deux lignes. Le premier <tspan> dessine le titre sombre, et le second <tspan> utilise une position y distincte ainsi qu’une valeur fill bleue pour le sous-titre.

Texte SVG sur deux lignes créé avec des éléments tspan et différentes valeurs de fill en Python

Erreurs courantes et solutions

ProblèmeSolution
Le texte n’est pas visibleDéfinissez fill, vérifiez x et y, et assurez-vous que le texte se trouve dans le viewBox
Le texte apparaît trop haut ou trop basRappelez-vous que y positionne la ligne de base du texte, pas le bord supérieur
Le centrage ne fonctionne pasDéfinissez text-anchor="middle" et utilisez le centre souhaité comme valeur x
Le texte multiligne se chevaucheDonnez à chaque <tspan> une valeur y séparée ou utilisez l’espacement dy avec prudence
Le texte est rendu différemment sur une autre machineUtilisez des polices courantes ou convertissez l’illustration finale en chemins vectoriels si l’indépendance vis-à-vis des polices est importante

FAQ

Comment ajouter du texte à un SVG en Python?

Créez un élément <text> avec create_element_ns(), définissez les attributs x, y, font-family, font-size et fill, définissez text_content, ajoutez-le à la racine SVG et enregistrez le SVG.

Comment centrer du texte SVG?

Définissez text-anchor="middle" et définissez x sur le centre horizontal souhaité. Ajustez y pour la position de la ligne de base.

Puis-je créer du texte SVG multiligne?

Oui. Utilisez un élément <text> avec plusieurs enfants <tspan>. Donnez à chaque <tspan> ses propres valeurs x et y, ou utilisez un espacement dy contrôlé.

Dois-je dessiner du texte SVG ou vectoriser le texte?

Dessinez du texte SVG normal lorsqu’il doit rester éditable, recherchable ou localisable. Vectorisez le texte uniquement pour une illustration finale qui doit préserver les contours exacts des glyphes sans dépendre des polices installées.

Articles associés