Modifier le svg par programmation

Inkscape est un logiciel de dessin vectoriel basé sur le format SVG.
jovial
Messages : 1
Inscription : 07 oct. 2016, 14:54

Modifier le svg par programmation

Message par jovial »

Bonjour

J'ai besoin de changer des valeurs d'attribut de balise d'un svg produit sur inkscape, à partir d'un script bash sur une centaine de fichier.
J'ai pas su le faire avec les fonction d'inkscape est ce que sauriez ou je puisse trouve de la ressource et exemple de code ou des outil xml qui me permette de le faire.

Pour le détail de ce je veux faire voir ici https://forum.ubuntu-fr.org/viewtopic.php?id=1997568
jazzynico
Admin d'Inkscape-fr
Messages : 56
Inscription : 27 oct. 2008, 20:31

Re: Modifier le svg par programmation

Message par jazzynico »

Bonjour Jovial,

La solution me semblant la plus naturelle serait d'utiliser XSLT. C'est ce que font les documentalistes d'Inkscape pour générer les tutoriels (l'original est en docbook, et la transformation permet d'obtenir des fichiers SVG - intégrés à l'application - et HTML - pour le site web).

En gros, il s'agit de définir un fichier XSLT qui contient toutes les transformations souhaitées, puis d'appliquer ce modèle à tous les fichiers d'un dossier avec (par exemple) la commande xsltproc (il me semble que cette commande permet de faire tout un dossier d'un coup, et de copier le résultat dans un dossier différent si besoin).
J'y regarde de plus près un peu plus tard si je trouve un peu de temps.

Bonne journée !
Xubuntu 16.04 (Inkscape 0.92/master 64-bit), Windows 7 (0.92/master 64-bit).
jazzynico
Admin d'Inkscape-fr
Messages : 56
Inscription : 27 oct. 2008, 20:31

Re: Modifier le svg par programmation

Message par jazzynico »

Bon, il a fallu que je m'y remette...

Voici un fichier modèle que devrait fonctionner pour ce cas :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@id[.='stop4158']">
    <xsl:attribute name="style">
      <xsl:value-of select="'stop-color:#ff00b0;stop-opacity:1;'"/>
    </xsl:attribute>
  </xsl:template>

</xsl:stylesheet>
Il suffit ensuite d'exécuter xsltproc dans un bash en passant ce modèle en argument, et ce pour chaque fichier (dans cet exemple, on envoie le résultat dans le dossier test/) :

Code : Tout sélectionner

 for file in *.svg; do xsltproc --output ./test/$file  color_change.xsl $file; done
Si tous tes stops partagent le même identifiant, le modèle va tous les changer avec le style donné.

Voilà, en espérant que ça aide un peu.
Xubuntu 16.04 (Inkscape 0.92/master 64-bit), Windows 7 (0.92/master 64-bit).
Répondre