Wie konvertiere ich unter Linux ein SVG (das ein paar Wörter lateinischen Text und einige einfache Vektorgrafiken enthält) in ein PDF?
Ich habe Inkscape 0.47 auf Ubuntu Lucid ausprobiert, aber es verschiebt einige Untergrafiken zufällig und macht einige Zeilen im Ausgabe-PDF kürzer. Die Ausgabe ist also nutzlos, weil die Grafik völlig anders aussieht.
Ich habe versucht, das SVG in Google Chrome 16 zu öffnen und als PDF zu drucken, aber dabei werden alle Farben verzerrt und einige Elemente werden entfernt. (Das SVG wird auf dem Bildschirm einwandfrei angezeigt, ist aber bereits in der Druckvorschau fehlerhaft und das generierte PDF ist ebenfalls fehlerhaft.)
Ich möchte das SVG weder rastern noch rendern. Eine Lösung, die das SVG in ein Bitmap-Bild umwandelt und dann ein PDF mit dem eingebetteten Bild erstellt, ist keine Antwort auf meine Frage. (Zu Ihrer Information: Inscape 0.47 rendert den Text beim Rendern in PNG auf eine sehr hässliche Art und Weise, ohne Antialiasing.)
Gibt es andere Möglichkeiten?
Antwort1
rsvg-konvertierenhat bei dem SVG, das ich konvertieren wollte, funktioniert:
$ sudo apt-get install librsvg2-bin
$ rsvg-convert -f pdf -o t.pdf t.svg
rsvg-convert -f pdf
rastert das SVG nicht und bettet Schriftarten ein und bildet Teilmengen davon (zumindest hat es die verwendeten Zeichen der Schriftart Arial eingebettet). Manchmal schlägt das Einbetten von Schriftarten fehl (z. B. bei der Schriftart LMRoman17) und die gesamte Schriftartdatei wird in das generierte PDF kopiert.
Abhängigkeiten von Ubuntu Lucid:
- libcairo.so.2
- libgobject-2.0.so.0
- libgthread-2.0.so.0
- libglib-2.0.so.0
- librsvg-2.so.2
- libpthread.so.0
- libc.so.6
Da libcairo standardmäßig libX11 benötigt, kann die Installation von rsvg-convert auf einem Headless-System schwierig sein.
Notiz:
Auf der Manpage von rsvg-convert
steht, dass das Tool immer rastert, aber das stimmt nicht. Das Handbuch ist einfach veraltet. Manchmal kann Ihr SVG-Generierungstool das SVG-Bild teilweise rastern, was ebenfalls irreführend sein kann.
Antwort2
Dies funktioniert unter Ubuntu Lucid:
$ sudo apt-get install inkscape
$ inkscape t.svg --export-pdf=t.pdf
Der obige Befehlszeilenaufruf von Inkscape funktioniert sogar im Headless-Modus ohne GUI ( DISPLAY=
). Bei der Installation von Inscape werden jedoch viele Abhängigkeiten installiert, darunter X11.
Bitte beachten Sie, dass der Beendigungsstatus von Inskscape immer 0 ist, auch wenn ein Fehler auftritt – achten Sie also auf seinen Stderr.
Es gibt auch inkscape --shell
, das sich zum Konvertieren mehrerer Dokumente im Stapel eignet. Dadurch wird die lange Startzeit von Inkscape für jede Datei vermieden:
$ (echo t.svg --export-pdf=t.pdf;
echo u.svg --export-pdf=u.pdf) |
DISPLAY= inkscape --shell
Inkscape ist auch zum Vereinfachen eines SVG nützlich:
$ DISPLAY= inkscape t.svg --export-plain-svg=t.plain.svg
Antwort3
Ich habe CairoSVG erfolgreich unter OSX und Ubuntu verwendet.
pip install cairosvg
cairosvg in.svg -o out.pdf
Antwort4
Ich erziele gute Ergebnisse beim Drucken aus Inkscape (auch 0.47) ins PDF-Format und beim Speichern als PDF (allerdings etwas anders), aber das kann von der vorliegenden Grafik abhängen.
Eine Alternative mit niedrigerer Auflösung (ich habe keine Schalter ausprobiert, um sie zu verbessern) ist
convert file.svgz file.pdf
convert
ist Teil des ImageMagick
Pakets. Rasterizer ist ein weiteres Programm:
rasterizer -m application/pdf file.svgz -d file.pdf
Um herauszufinden, welche Programme auf Ihrem System installiert sind, die SVGs verarbeiten, versuchen Sie einfach
apropos -s 1 svg
Die Manpage dieser Programme sollte erklären, ob das Programm für die Konvertierung von SVG in PDF geeignet ist.