Kleines Shell Skript zum Umwandeln von SVGs in PDF Bilder

Samstag, 20.06.2009 um 14:10 Uhr

Moin liebe Lesergemeinde,

da ich ja, wie in anderen Einträgen schon erwähnt des Öfteren in LaTeX Dokumente verfasse, ist es auch manchmal nötig Grafiken einzubinden. Da ich normalerweise Grafiken mit Inkscape im Vektorformat SVG erstelle, ist es nötig diese Dateien zu konvertieren. LaTeX kann leider SVGs nicht direkt einbinden. Bei meinen Recherchen im Internet habe ich auch nicht wirklich Bestrebungen gefunden, dieses Leck zu stopfen – also wer von euch in LaTeX voll den Durchblick hat, kann ja mal die Unterstützung dafür Programmieren ;-)

Damit die Eigenschaften eines Vektorformats – also die gute Skalierbarkeit der Grafiken – erhalten bleiben, wandle ich die Dateien immer in eps oder pdf um. Allerdings wird es sehr anstrengend, wenn man eine Kleinigkeit im Bild geändert oder sehr viele Bilder hat, diese immer wieder von Hand umzuwandeln. Deshalb habe ich mir ein kleines Shell Skript geschrieben, dass immer im Ordner meiner SVG Bilder liegt und dort aufgerufen werden kann.

Benutzung:

Man gehe in einer Konsole in den Ordner mit den Bildern und dem Skript. Das Skript muss die Rechte zum Ausführen haben. Ist dies noch nicht der Fall, dann den folgenden Befehl ausführen:

jazz@jazz:~$ chmod +x SVG2PDF

Jetzt hat man die Möglichkeit das Skript ohne Parameter aufzurufen. Dann werden alle im Ordner befindlichen SVGs in eine PDF konvertiert. Dabei richtet sich die Größe der PDF nach der Seiteneinstellung der SVG.

jazz@jazz:~$ ./SVG2PDF

Die zweite Variante ist der Aufruf mit Parametern. Als Parameter kann man eine beliebig lange Liste von SVG Dateien angeben. Dies ist sinnvoll, wenn man nicht alle SVGs in PDF umwandeln will, wenn man zum Beispiel nur ein oder zwei der im Ordner befindlichen SVGs verändert/hinzugefügt hat.

jazz@jazz:~$ ./SVG2PDF eine.svg eineandere.svg

So jetzt hier das Skript zum Runterladen (Rechtsklick → Ziel Speichern unter):

Skript SVG2PDF

Und hier nochmal ausgeschrieben:

#!/bin/bash
if [ $# -lt 1 ]
then
    for f in *.svg; do 
        e=$(basename $f svg)eps;
        echo "Converting $f to a pdf image!"
        inkscape --export-embed-fonts  --export-text-to-path -f $f -E $e; 
        epstopdf $e
        rm $e
    done
else
    for f in $*; do
        if [ -f $f -a ${f#*.} = "svg" ]
        then
            e=$(basename $f svg)eps;
            echo "Converting $f to a pdf image!"
            inkscape --export-embed-fonts  --export-text-to-path -f $f -E $e; 
            epstopdf $e
            rm $e
        else
            echo "File $f is not a SVG!"
        fi
    done
fi

EDIT: Für das Skript muss epstopdf (unter Ubuntu in texlive-extra-utils) installiert sein. Ist es nicht vorhanden, führt dies ebenfalls zu “command not found”-Fehlern.