Wie konvertiere ich eine SVG in eine PDF-Datei unter Linux?


124

Wie konvertiere ich SVG (mit ein paar Wörtern lateinischen Textes und einigen einfachen Vektorgrafiken) in ein PDF unter Linux?

Ich habe Inkscape 0.47 unter Ubuntu Lucid ausprobiert, aber es verschiebt einige Subgrafiken nach dem Zufallsprinzip und verkürzt einige Zeilen in der PDF-Ausgabe. Die Ausgabe ist also nutzlos, da die Grafik völlig anders aussieht.

Ich habe versucht, die SVG-Datei in Google Chrome 16 zu öffnen und als PDF-Datei zu drucken, aber sie verzerrt alle Farben und entfernt auch einige Elemente. (Die SVG-Datei wird auf dem Bildschirm einwandfrei angezeigt, ist jedoch in der Druckvorschau bereits fehlerhaft und die generierte PDF-Datei ist ebenfalls fehlerhaft.)

Ich möchte die SVG nicht rastern oder rendern. Eine Lösung, mit der die SVG-Datei in ein Bitmap-Bild konvertiert und anschließend eine PDF-Datei mit dem eingebetteten Bild erstellt wird, ist keine Antwort auf meine Frage. (FYI Inscape 0.47 rendert den Text beim Rendern in PNG auf sehr hässliche Weise ohne Antialiasing.)

Welche anderen Optionen habe ich?


1
Wenn Sie nur ein paar Bilder konvertieren müssen, ist es möglicherweise einfacher, einige der Online-Konverter zu verwenden. Ich habe CloudConvert ausprobiert und es hat einen sehr guten Job mit der halben Dateigröße der SVG gemacht.
Frank Breitling

Antworten:


133

rsvg-convert hat den Trick für die SVG gemacht, die ich konvertieren wollte:

$ sudo apt-get install librsvg2-bin
$ rsvg-convert -f pdf -o t.pdf t.svg

rsvg-convert -f pdfDie SVG-Datei wird nicht gerastert und es werden Schriftarten eingebettet und untergeordnet (zumindest wurden die verwendeten Zeichen der Arial-Schriftart eingebettet). Manchmal schlägt das Einbetten von Schriftarten fehl (z. B. für die LMRoman17-Schriftart) und die gesamte Schriftartdatei wird in die generierte PDF-Datei 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

Standardmäßig benötigt libcairo libX11, so dass die Installation von rsvg-convert auf einem kopflosen System möglicherweise schwierig ist.

Hinweis: In der Manpage von wird angegeben rsvg-convert, dass das Tool immer rastert, dies ist jedoch nicht der Fall. Das Handbuch ist einfach überholt. Manchmal kann Ihr SVG-Tool das SVG-Bild teilweise rastern, was Sie auch irreführen kann.


4
Das ist eine Menge Abhängigkeiten, die ich hier sehe: Kairo, libgphoto, gtk3, libsane ... Na ja, wenn es den Job macht ...
ShiDoiSi

4
@ AyberkÖzgür Das ist die Schuld von inkscape: Wenn Sie ein Inkscape-Projekt speichern, wird es standardmäßig als SVG gespeichert. Die gespeicherte SVG enthält jedoch eine Reihe nicht standardmäßiger inkscape-spezifischer Daten, die andere Programme häufig durcheinander bringen können. Sie müssen als SVG exportieren und nicht nur als SVG speichern .
AJMansfield,

2
Könnte einige Zeit beim Suchen sparen: Auf Suse-Systemen wird das Paket mit dem rsvg-convertNamen aufgerufen rsvg-view.
Trendfischer

1
Es hat bei mir funktioniert und die Qualität von PDF ist die gleiche wie bei SVG. Zuvor verwendete man imagemagick, um nach pdf zu konvertieren, und die Qualität war besonders für svg schlecht.
Pratik Soni

1
Leider werden die Schriften nicht in macOS eingebettet.
Oarfish

77

Dies funktioniert auf Ubuntu Lucid:

$ sudo apt-get install inkscape
$ inkscape t.svg --export-pdf=t.pdf

Der obige Inkscape-Aufruf über die Befehlszeile funktioniert auch im Headless-Modus ohne GUI ( DISPLAY=). Durch die Installation von Inscape werden jedoch viele Abhängigkeiten installiert, einschließlich X11.

Bitte beachten Sie, dass der Exit-Status von Inskscape immer 0 ist, auch wenn ein Fehler auftritt - achten Sie also auf dessen stderr.

Es eignet sich auch inkscape --shellzum Konvertieren vieler Dokumente in einem Stapel. Dies vermeidet die langsame Inkscape-Startzeit für jede Datei:

$ (echo t.svg --export-pdf=t.pdf;
   echo u.svg --export-pdf=u.pdf) |
  DISPLAY= inkscape --shell

Inkscape ist auch nützlich, um eine SVG zu vereinfachen:

$ DISPLAY= inkscape t.svg --export-plain-svg=t.plain.svg

2
Leider scheint dies unter OS X nicht zu funktionieren. Trotzdem, nette Antwort.
Konrad Rudolph

3
Das OP gab an, dass Inkscape Rendering-Fehler hatte. Das entspricht meiner Erfahrung.
Dylan Thurston

3
Unter OSX mit Homebrew können Sie Inkscape in brew install inkscapediesen Tagen installieren . Das Ergebnis /usr/local/bin/inkscapehat für mich funktioniert, ohne X11.app ausführen zu müssen.
Alex Schröder

2
Inkscape kann unter OS X von der dmgauf seiner eigenen Website bereitgestellten Version installiert und dann von der Befehlszeile aus aufgerufen werden, nachdem zwei symbolische Links erstellt wurden: ln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscapeund ähnlich für inkscape-bin(vorausgesetzt, ~/binin Ihrer $PATH).
Ioannis Filippidis

2
Sie können das Flag -z(oder --without-gui) in Inkscape verwenden, um es nur im Stapelmodus auszuführen (es wird überhaupt kein Fenster geöffnet).
Artefact2

8

Ich habe CairoSVG erfolgreich unter OSX und Ubuntu verwendet.

pip install cairosvg
cairosvg in.svg -o out.pdf

CairoSVG-Dokumentation


Es gibt sogar Python-Bindungen, die Sie verwenden können. Leider habe ich festgestellt, dass diese Methode eher eingeschränkt ist, dh viele SVG-Funktionen werden nicht unterstützt.
Bodo

7

Ich erhalte gute Ergebnisse beim Drucken von Inkscape (auch 0,47) in PDF und beim Speichern als PDF (jedoch geringfügig anders). Dies hängt jedoch möglicherweise von der jeweiligen Grafik ab.

Eine Alternative mit geringerer Auflösung (ich habe keine Schalter ausprobiert, um sie zu verbessern) ist

 convert file.svgz file.pdf 

convertist Teil des ImageMagickPakets. Rasterizer ist ein anderes Programm:

 rasterizer -m application/pdf file.svgz -d file.pdf 

Um herauszufinden, welche Programme mit svgs auf Ihrem System installiert sind, versuchen Sie es einfach

 apropos -s 1 svg

Die Manpage für diese Programme sollte erklären, ob das Programm für die Konvertierung von svg nach pdf nützlich ist.


18
Vielen Dank für Ihre Anregungen. FYI convertist keine Antwort auf die ursprüngliche Frage, da convertdie SVG in ein Bitmap-Bild gerastert wird und die ursprüngliche Frage nach einer Lösung gesucht hat, die dies nicht tut.
pts

5

https://superuser.com/a/79064/19956 erwähnt gsvg , einen Teil von GhostPDL.

Ich habe gsvg ghostpdl-9.06 unter Ubuntu Lucid ausprobiert, aber es ist bei zwei von Inkscape generierten SVGs fehlgeschlagen. Eine SVG enthielt Text, die andere nur Vektorgrafiken. Bei einfachen Grafiken ohne Inkscape-Erweiterungen oder Clip-Path ist dies ebenfalls fehlgeschlagen. Daher halte ich gsvg nicht für einen verwendbaren SVG-zu-PDF-Konverter.


3

Unter Mac OS (vorausgesetzt, Sie haben bereits Brew installiert) mache ich Folgendes:

$ brew install cairo libffi python3
$ pip3 install cairosvg

$ cairosvg -o blah.pdf ./blah.svg 

Dasselbe sollte unter Linux funktionieren, aber stattdessen mit apt-get.


1
Dies funktioniert auch mit der PDF-Ausgabe. Im Gegensatz zu svg2pdfund rsvg-convertbleiben die Schriftarten erhalten.
Oarfish

Danke, ich habe die falsche Erweiterung gesetzt. Ich habe das Beispiel aktualisiert.
Adriel Jr.,

Lief wie am Schnürchen!
Mayrop

1

Ich frage mich, warum es noch nicht erwähnt wurde, aber ich habe eine Reihe verschiedener SVG-> PDF-Konverter getestet und festgestellt, dass Headless Chrome das Beste ist . Es liefert für mich die genauesten Ergebnisse. Bevor ich zu Chrome gewechselt bin, habe ich versucht, mit Inkscape-Fehlern zu kämpfen, aber viele davon sind zu schwerwiegend und ich kann nicht viel dagegen tun (Transparenzfehler, falsche Schriftarten usw.).

 chrome --headless --disable-gpu --print-to-pdf="output.pdf" "input.svg"

Es sind einige Änderungen erforderlich, um die benutzerdefinierte PDF-Größe zu verwenden (A4 ist die Standardeinstellung), aber ich konnte die benutzerdefinierte Größe einstellen, nachdem ich einige Male gegoogelt und mit CSS- und SVG-Attributen gespielt habe ( siehe diese Antwort auf stackoverflow ).


Willkommen bei Super User! Externe Links können kaputt gehen oder nicht verfügbar sein. In diesem Fall ist Ihre Antwort nur ein Anhaltspunkt. Auch wenn Links noch funktionieren, kann der Inhalt nicht indiziert werden, um die Suche nach der Lösung zu erleichtern. Bitte geben Sie die wesentlichen Informationen in Ihrer Antwort an und verwenden Sie den Link für die Zuordnung und weitere Informationen. Vielen Dank.
Fixer1234

von der WSL brauchst du ein paar extra flagschromium --no-sandbox --disable-setuid-sandbox --headless --disable-gpu --print-to-pdf=output.pdf input.svg
ticapix

0

Öffnen Sie die SVG-Datei mit Image Viewer(auch Eye of Gnome genannt eog) und drucken Sie sie in eine PDF-Datei (etwa image.pdf) und konvertieren Sie diese PDF-Datei mit dem pdf2psBefehl eps . Einfach!

Ausgearbeitete Schritte:

  1. Installieren, Image Viewerfalls noch nicht geschehen (höchst unwahrscheinlich, wenn Sie verwenden gnome)

    sudo apt-get install eog
    
  2. Öffnen Sie die SVG-Datei mit eogund drucken Sie sie in eine image.pdfDatei.

  3. (Optional) Entfernen Sie umgebende Leerzeichen aus der PDF-Datei:

    pdfcrop image.pdf
    

    Dies wird erzeugt image-crop.pdf, wenn umgebende Leerzeichen entfernt werden.

  4. Konvertieren Sie zugeschnittenes PDF in EPS (verwenden image.pdfSie diese Option direkt, wenn Sie das PDF nicht zugeschnitten haben)

    pdf2ps image-crop.pdf image.eps
    

Das ist es!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.