Jak przekonwertować SVG na plik PDF w systemie Linux

126

Jak przekonwertować i SVG (zawierający kilka słów tekstu łacińskiego i kilka prostych grafik wektorowych) na plik PDF w systemie Linux?

Próbowałem Inkscape 0.47 na Ubuntu Lucid, ale losowo przesuwa niektóre grafiki podrzędne i powoduje, że niektóre wiersze w wyjściowym pliku PDF są krótsze. Tak więc wyjście jest bezużyteczne, ponieważ grafika wygląda zupełnie inaczej.

Próbowałem otworzyć plik SVG w Google Chrome 16 i wydrukować go do formatu PDF, ale zniekształca wszystkie kolory, a także usuwa niektóre elementy. (Plik SVG pojawia się dobrze na ekranie, ale jest już zły w podglądzie wydruku, a wygenerowany plik PDF jest również zły).

Nie chcę rasteryzować ani renderować SVG. Rozwiązanie, które konwertuje SVG na obraz bitmapowy, a następnie tworzy plik PDF z osadzonym obrazem, nie jest odpowiedzią na moje pytanie. (FYI Inscape 0.47 renderuje tekst w bardzo brzydki sposób, bez antyaliasingu, podczas renderowania do PNG.)

Jakie inne opcje mam?

pkt
źródło
1
Jeśli masz tylko kilka zdjęć do przekonwertowania, możesz łatwiej skorzystać z niektórych konwerterów online. Próbowałem CloudConvert i wykonałem bardzo dobrą robotę z połową wielkości pliku SVG.
Frank Breitling,

Odpowiedzi:

134

rsvg-convert zrobił lewę dla SVG, który chciałem przekonwertować:

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

rsvg-convert -f pdfnie rasteryzuje SVG, osadza i rozdziela czcionki (przynajmniej osadza używane znaki czcionki Arial). Czasami osadzanie czcionek kończy się niepowodzeniem (np. Dla czcionki LMRoman17) i cały plik czcionki jest kopiowany do wygenerowanego pliku PDF.

Zależności od 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

Domyślnie libcairo potrzebuje libX11, więc rsvg-convert może być trudny do zainstalowania w systemie bezgłowym.

Uwaga: Strona rsvg-convertpodręcznika informuje, że narzędzie zawsze rasteryzuje, ale to nieprawda. Podręcznik jest po prostu przestarzały. Czasami twoje narzędzie do generowania svg może częściowo zrasteryzować obraz svg, co również może cię wprowadzić w błąd.

pkt
źródło
4
Widzę tu wiele zależności: Cairo, libgphoto, gtk3, libsane ... No cóż, jeśli to zadziała ...
ShiDoiSi
4
@ AyberkÖzgür To wina Inkscape - kiedy zapisujesz projekt Inkscape, domyślnie zapisuje go jako SVG, ale zapisywany SVG zawiera kilka niestandardowych danych specyficznych dla Inkscape, które często mogą zepsuć inne programy. Musisz wyeksportować jako plik SVG, a nie tylko zapisać jako plik SVG.
AJMansfield
2
Może zaoszczędzić trochę czasu na wyszukiwaniu: W Suse-Systems pakiet zawierający rsvg-convertjest nazywany rsvg-view.
Trendfischer 22.01.16
1
To działało dla mnie, a jakość pdf jest taka sama jak svg. Wcześniej używano imagemagick do konwersji na pdf, a jakość była niska, szczególnie w przypadku svg.
Pratik Soni
1
Niestety nie osadza to czcionek w systemie macOS.
wiosłowa
79

Działa to na Ubuntu Lucid:

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

Wywołanie Inkscape z wiersza poleceń działa nawet w trybie bezgłowym, bez GUI ( DISPLAY=). Jednak instalacja Inscape instaluje wiele zależności, w tym X11.

Pamiętaj, że status wyjścia Inskscape wynosi zawsze 0, nawet jeśli wystąpi błąd - uważaj na jego stderr.

Jest także inkscape --shellodpowiedni do konwertowania wielu dokumentów w partii. Pozwala to uniknąć wolnego czasu uruchamiania Inkscape dla każdego pliku:

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

Inkscape jest również przydatny do uproszczenia SVG:

$ DISPLAY= inkscape t.svg --export-plain-svg=t.plain.svg
pkt
źródło
2
Niestety wydaje się, że to nie działa w systemie OS X. Mimo to fajna odpowiedź.
Konrad Rudolph
3
OP określił, że Inkscape ma błędy renderowania; to pasuje do mojego doświadczenia.
Dylan Thurston
3
W systemie OSX za pomocą Homebrew możesz zainstalować Inkscape, korzystając z brew install inkscapetych dni. Wynikowy /usr/local/bin/inkscapedziałał dla mnie bez konieczności uruchamiania X11.app.
Alex Schröder,
2
Inkscape można zainstalować w systemie OS X z dmgdystrybucji rozproszonej na własnej stronie internetowej, a następnie wywołać z wiersza poleceń po utworzeniu dwóch dowiązań symbolicznych: ln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscapei podobnie dla inkscape-bin(zakładając, że ~/binnależy do Ciebie $PATH).
Ioannis Filippidis,
2
Możesz użyć flagi -z(lub --without-gui) w programie Inkscape, aby uruchomić ją tylko w trybie wsadowym (żadne okno się nie otworzy).
Artefact2
8

Z powodzeniem korzystałem z CairoSVG na OSX i Ubuntu.

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

Dokumentacja CairoSVG

SYK
źródło
Istnieją nawet wiązania Pythona, których możesz użyć. Niestety odkryłem, że ta metoda jest raczej ograniczona, tzn. Wiele funkcji svg nie jest obsługiwanych.
Bodo
7

Dobre wyniki uzyskuję z drukowania z Inkscape (także 0.47) do PDF i zapisywania jako PDF (ale nieco inny), ale to może zależeć od posiadanej grafiki.

Alternatywą o niższej rozdzielczości (nie próbowałem żadnych przełączników, aby ją poprawić) jest

 convert file.svgz file.pdf 

convertjest częścią ImageMagickpakietu. Rasterizer to kolejny program:

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

Aby dowiedzieć się, które programy obsługujące svg są zainstalowane w twoim systemie, po prostu spróbuj

 apropos -s 1 svg

Strona podręcznika dla tych programów powinna wyjaśniać, czy program jest przydatny do konwersji svg na pdf.

nieznany użytkownik
źródło
18
Dziękuję za twoje sugestie. FYI convertnie jest odpowiedzią na pierwotne pytanie, ponieważ convertrasteryzuje SVG do obrazu bitmapowego, a pierwotne pytanie szukało rozwiązania, które tego nie robi.
pkt
5

https://superuser.com/a/79064/19956 wspomina o gsvg , części GhostPDL.

Próbowałem gsvg ghostpdl-9.06 na Ubuntu Lucid, ale nie powiodło się dla dwóch plików SVG wygenerowanych przez Inkscape. Jeden SVG zawierał tekst, drugi miał tylko grafikę wektorową. Nie powiodło się również w przypadku prostej grafiki bez rozszerzeń Inkscape lub ścieżki przycinania. Dlatego nie uważam gsvg za przydatny konwerter SVG-to-PDF.

pkt
źródło
3

W systemie Mac OS (biorąc pod uwagę, że masz już zainstalowany browar):

$ brew install cairo libffi python3
$ pip3 install cairosvg

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

To samo powinno działać na Linuksie, ale zamiast tego z apt-get.

Adriel Jr
źródło
1
Działa to również z danymi wyjściowymi pdf. W przeciwieństwie do svg2pdfi rsvg-convert, zachowuje to czcionki.
wiosłowa
Dzięki, podałem niewłaściwe rozszerzenie. Zaktualizowałem przykład.
Adriel Jr
Działa jak urok!
mayrop
1

Zastanawiam się, dlaczego nie zostało to wspomniane wcześniej, ale przetestowałem kilka różnych konwerterów svg-> pdf i stwierdziłem, że najlepszy jest bezgłowy Chrome . Daje mi to najbardziej precyzyjne wyniki. Przed przejściem na Chrome próbowałem walczyć z błędami Inkscape, ale wiele z nich jest zbyt poważnych i nie mogę na to wiele poradzić (błędy przezroczystości, złe czcionki itp.).

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

Potrzebuje kilku poprawek, aby użyć niestandardowego rozmiaru PDF (A4 jest domyślnie), ale byłem w stanie ustawić niestandardowy rozmiar po pewnym googlingu i zabawie z atrybutami CSS i SVG (sprawdź tę odpowiedź na stackoverflow )

Avael Kross
źródło
Witamy w Super User! Linki zewnętrzne mogą się zepsuć lub być niedostępne, w takim przypadku Twoja odpowiedź byłaby tylko zwiastunem. Nawet jeśli linki nadal działają, nie można zaindeksować treści, aby pomóc ludziom znaleźć rozwiązanie. Prosimy o podanie niezbędnych informacji w odpowiedzi i skorzystanie z linku do przypisania i dalszego czytania. Dzięki.
fixer1234
z WSL potrzebujesz dodatkowych flagchromium --no-sandbox --disable-setuid-sandbox --headless --disable-gpu --print-to-pdf=output.pdf input.svg
ticapix
0

Otwórz plik svg za pomocą Image Viewer(zwany również Eye of Gnome eog) i wydrukuj go do pliku PDF (powiedzmy image.pdf) i przekonwertuj ten pdf na eps za pomocą pdf2pspolecenia. Prosty!

Opracowane kroki:

  1. Zainstaluj, Image Viewerjeśli jeszcze nie zostało to zrobione (bardzo mało prawdopodobne, jeśli używasz gnome)

    sudo apt-get install eog
    
  2. Otwórz plik svg za pomocą eogi wydrukuj go do image.pdfpliku.

  3. (Opcjonalnie) Usuń otaczające białe spacje z pliku pdf:

    pdfcrop image.pdf
    

    Spowoduje to image-crop.pdfz otoczeniem odstępy usunięte.

  4. Konwertuj przycięty pdf na eps (użyj image.pdfbezpośrednio, jeśli nie przycinałeś pdf)

    pdf2ps image-crop.pdf image.eps
    

Otóż ​​to!

codeman48
źródło