Come faccio a convertire un file SVG in un PDF su Linux


126

Come faccio a convertire e SVG (contenente alcune parole di testo latino e qualche semplice grafica vettoriale) in un PDF su Linux?

Ho provato Inkscape 0.47 su Ubuntu Lucid, ma sposta alcuni sotto-grafici in modo casuale e rende alcune linee più brevi nel PDF di output. Quindi l'output è inutile, perché la grafica sembra completamente diversa.

Ho provato ad aprire SVG in Google Chrome 16 e stamparlo in PDF, ma distorce tutti i colori e rimuove anche alcuni elementi. (Lo SVG appare bene sullo schermo, ma è già negativo nell'anteprima di stampa e anche il PDF generato è cattivo.)

Non voglio rasterizzare o rendere SVG. Una soluzione che converte SVG in un'immagine bitmap e quindi crea un PDF con l'immagine incorporata non è una risposta alla mia domanda. (FYI Inscape 0.47 rende il testo molto brutto, senza antialias, quando si esegue il rendering in formato PNG.)

Quali altre opzioni ho?


1
Se hai solo poche immagini da convertire, potresti trovare più facile usare alcuni dei convertitori online. Ho provato CloudConvert e ha fatto un ottimo lavoro con metà delle dimensioni del file dell'SVG .
Frank Breitling,

Risposte:


134

rsvg-convert ha fatto il trucco per l'SVG che volevo convertire:

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

rsvg-convert -f pdfnon rasterizza l'SVG e incorpora e mette sottoinsiemi di caratteri (almeno ha incorporato i caratteri usati del carattere Arial). A volte l'incorporamento dei caratteri non riesce (ad esempio per il carattere LMRoman17) e l'intero file dei caratteri viene copiato nel PDF generato.

Dipendenze da 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

Per impostazione predefinita, libcairo ha bisogno di libX11, quindi rsvg-convert potrebbe essere difficile da installare su un sistema senza testa.

Nota: la pagina man rsvg-convertafferma che lo strumento rasterizza sempre, ma questo non è vero. Il manuale è semplicemente obsoleto. A volte il tuo strumento di generazione svg può parzialmente rasterizzare l'immagine svg, il che può anche indurti in errore.


4
Sono molte le dipendenze che vedo qui: Cairo, Libgphoto, GTK3, Libsane ... Oh bene, se fa il lavoro ...
ShiDoiSi

4
@ AyberkÖzgür È colpa di inkscape: quando salvi un progetto Inkscape, per impostazione predefinita lo salverà come SVG, ma l'SVG che salva include una serie di dati non specifici specifici di Inkscape che possono spesso rovinare altri programmi. È necessario esportare come SVG anziché semplicemente salvarlo come SVG.
AJMansfield,

2
Potrebbe risparmiare un po 'di tempo nella ricerca: su Suse-Systems rsvg-convertviene chiamato il pacchetto contenente rsvg-view.
Trendfischer,

1
Ha funzionato per me e la qualità del pdf è la stessa di svg. Prima si usava imagemagick per convertire in pdf e la qualità era scarsa, specialmente per svg.
Pratik Soni,

1
Sfortunatamente, questo non incorpora i caratteri su macOS.
Remo

79

Questo funziona su Ubuntu Lucid:

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

L'invocazione di Inkscape della riga di comando sopra funziona anche in modalità senza testa, senza una GUI ( DISPLAY=). Tuttavia, l'installazione di Inscape consente di installare molte dipendenze, incluso X11.

Tieni presente che lo stato di uscita di Inskscape è sempre 0, anche se si verifica un errore, quindi fai attenzione al suo standard.

C'è anche inkscape --shell, adatto per convertire molti documenti in un batch. Questo evita il lento tempo di avvio di Inkscape per ogni file:

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

Inkscape è anche utile per semplificare un SVG:

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

2
Sfortunatamente questo non sembra funzionare su OS X. Comunque, bella risposta.
Konrad Rudolph,

3
L'OP ha specificato che Inkscape aveva dei bug di rendering; questo corrisponde alla mia esperienza.
Dylan Thurston,

3
Su OSX usando Homebrew, puoi installare Inkscape in brew install inkscapequesti giorni. Il risultato ha /usr/local/bin/inkscapefunzionato per me senza dover eseguire X11.app.
Alex Schröder,

2
Inkscape può essere installato su OS X dal dmgdistribuito sul proprio sito Web e quindi richiamato dalla riga di comando dopo aver creato due collegamenti simbolici: ln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscapee similmente per inkscape-bin(supponendo che ~/binsia nel tuo $PATH).
Ioannis Filippidis,

2
Puoi usare il flag -z(o --without-gui) con Inkscape per eseguirlo solo in modalità batch (nessuna finestra si aprirà affatto).
Artefatto2,

8

Ho usato CairoSVG con successo su OSX e Ubuntu.

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

Documentazione CairoSVG


Ci sono anche associazioni di python che puoi usare. Purtroppo ho scoperto che questo metodo è piuttosto limitato, cioè molte funzioni svg non sono supportate.
bodo,

7

Ottengo buoni risultati dalla stampa da Inkscape (anche 0.47) a PDF e per il salvataggio in PDF (ma leggermente diverso), ma ciò potrebbe dipendere dalla grafica a portata di mano.

Un'alternativa con una risoluzione inferiore (non ho provato alcun interruttore per migliorarlo) è

 convert file.svgz file.pdf 

convertfa parte del ImageMagickpacchetto. Rasterizer è un altro programma:

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

Per scoprire quali programmi che gestiscono svg sono installati sul tuo sistema, prova

 apropos -s 1 svg

La manpage di questi programmi dovrebbe spiegare se il programma è utile per convertire lo svg in pdf.


18
Grazie per i vostri suggerimenti. La FYI convertnon è una risposta alla domanda originale, perché convertrasterizza SVG in un'immagine bitmap e la domanda originale era alla ricerca di una soluzione che non lo facesse.
punti

5

https://superuser.com/a/79064/19956 menziona gsvg , parte di GhostPDL.

Ho provato gsvg ghostpdl-9.06 su Ubuntu Lucid, ma non è riuscito per due SVG generati da Inkscape. Un SVG conteneva del testo, l'altro aveva solo grafica vettoriale. Inoltre, non è riuscito per la grafica semplice senza estensioni Inkscape o percorso clip. Quindi non considero gsvg un convertitore da SVG a PDF utilizzabile.


3

Su Mac OS (considerando che hai già installato brew) faccio:

$ brew install cairo libffi python3
$ pip3 install cairosvg

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

Lo stesso dovrebbe funzionare su Linux, ma con apt-get invece.


1
Funziona anche con l'output pdf. Contrariamente a svg2pdfe rsvg-convert, ciò preserva i caratteri.
Remo

Grazie, ho inserito l'estensione sbagliata. Ho aggiornato l'esempio.
Adriel Jr,

Ha funzionato come un fascino!
Mayrop

1

Mi chiedo perché non sia mai stato menzionato prima, ma ho testato un sacco di diversi convertitori svg-> pdf e ho scoperto che il migliore è Headless Chrome . Produce i risultati più precisi per me. Prima di passare a Chrome, stavo cercando di combattere con i bug di Inkscape, ma molti di loro sono troppo seri e non posso fare molto al riguardo (bug di trasparenza, caratteri errati, ecc.).

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

Ha bisogno di alcune modifiche per utilizzare le dimensioni PDF personalizzate (A4 è l'impostazione predefinita), ma sono stato in grado di impostare dimensioni personalizzate dopo aver cercato su Google e giocando con gli attributi CSS e SVG (controlla questa risposta su StackOverflow )


Benvenuto in Super User! I collegamenti esterni possono interrompersi o non essere disponibili, nel qual caso la tua risposta sarebbe solo un teaser. Anche se i collegamenti funzionano ancora, il contenuto non può essere indicizzato per aiutare le persone a trovare la soluzione. Includere le informazioni essenziali nella risposta e utilizzare il collegamento per l'attribuzione e ulteriori letture. Grazie.
fixer1234

da WSL, hai bisogno di alcune bandiere extrachromium --no-sandbox --disable-setuid-sandbox --headless --disable-gpu --print-to-pdf=output.pdf input.svg
ticapix il

0

Apri il file svg con Image Viewer(chiamato anche Eye of Gnome eog) e stampalo in un file PDF (diciamo image.pdf) e converti quel pdf in eps usando il pdf2pscomando. Semplice!

Passaggi elaborati:

  1. Installa Image Viewerse non ancora fatto (passaggio altamente improbabile se lo usi gnome)

    sudo apt-get install eog
    
  2. Apri il file svg con eoge stampalo su image.pdffile.

  3. (Facoltativo) Rimuovi gli spazi bianchi circostanti dal file pdf:

    pdfcrop image.pdf
    

    Questo genererà image-crop.pdfcon lo spazio bianco circostante rimosso.

  4. Converti pdf ritagliato in eps (utilizza image.pdfdirettamente se non hai ritagliato il pdf)

    pdf2ps image-crop.pdf image.eps
    

Questo è tutto!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.