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.

Kommentare

  1. astgabel sagt:

    Hallo,

    schönes Script. Allerdings hat die neue inkscape version die option –export-embed-fonts nicht mehr und folgender Fehler erscheint:

    ** (inkscape:3704): WARNING **: Invalid option –export-embed-fonts

    http://wiki.inkscape.org/wiki/index.php/ReleaseNotes047

    Also einfach die option rausnehmen.
    Gruß Astgabel

  2. Jazz sagt:

    Ist schon länger her, aber ich hatte das probiert und das Ergebnis war nicht zufriedenstellend (Qualitätsmäßig) und außerdem ist die Box die das Bild umrahmt nicht richtig gesetzt.

  3. anda sagt:

    Warum exportierst du es nicht direkt nach pdf und machst den Umweg über eps?

    folgendes Zeigt mir man inkscape an

    -P, –export-ps=FILENAME
    -E, –export-eps=FILENAME
    -A, –export-pdf=FILENAME

  4. Tordanik sagt:

    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.

  5. Jazz sagt:

    Hey,
    hast du dem Skript ausführungsrechte gegeben:
    siehe oben: chmod +x SVG2PDF
    bist du in der Konsole im Ordner mit den SVGs und der PDF?
    Wenn ja dann musst du es ausführen mit: ./SVG2PDF
    also mit . und / das ist wichtig

    Grüße
    Jazz

  6. S. Fröhlich sagt:

    Hallo, bin gerade über Planet Ubuntu auf dieses Skript aufmerksam geworden. Hab es mir auch sofort heruntergeladen und in einem Ordner mit Inkscape SVG Dateien gespeichert. Wenn ich allerdings über den Terminal es ausführen möchte, bekomme ich zurück “command not found”. Was mache ich den falsch? Gruß Sebastian

Kommentar hinzufügen