Kleines Shell Skript zum Umwandeln von SVGs in PDF Bilder
Samstag, 20.06.2009 um 14:10 UhrMoin 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):
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.

