Come convertire un SVG in un PDF in Linux?

Come faccio a convertire e SVG (contenente poche parole di text latino e alcune grafiche vettoriali semplici) in un file PDF su Linux?

Ho provato Inkscape 0.47 su Ubuntu Lucid, ma sposta alcune sottografiche in modo random e rende alcune righe più corte nell'output PDF. Quindi l'output è inutile, perché la grafica sembra completamente diversa.

Ho provato ad aprire l'SVG in Google Chrome 16 e la printing in PDF, ma distorce tutti i colors e rimuove anche alcuni elementi. (Lo SVG appare bene sullo schermo, ma è già difettoso nell'anteprima della printing e il PDF generato è anche un problema).

Non voglio rasterizzare o rendere l'SVG. Una soluzione che converte l'SVG in un'image bitmap e quindi crea un PDF con l'image incorporata non è una risposta alla mia domanda. (FYI Inscape 0.47 rende il text molto brutto, senza antialiasing, quando viene eseguito il rendering a PNG.)

Quali altre opzioni ho?

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

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

rsvg-convert -f pdf non rasterizza l'SVG e incorpora e sovrascrive i caratteri (alless ha incorporato i caratteri usati del carattere Arial). Talvolta l'inserimento dei caratteri non riesce (ad esempio per il font LMRoman17) e l'integer file di carattere viene copiato nel PDF generato.

Dipendenze su 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, per cui rsvg-convert può essere difficile da installare in un sistema senza testa.

Nota: La pagina uomo di rsvg-convert indica che lo strumento rasterizza sempre, ma ciò non è vero. Il manuale è semplicemente obsoleto. A volte il tuo strumento generatore svg può parzialmente rasterizzare l'image svg, che può anche indurre in errore.

Questo funziona su Ubuntu Lucid:

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

La row di command invocazione Inkscape sopra funziona anche in modalità senza testa, senza GUI ( DISPLAY= ). Tuttavia, l'installazione di Inscape installa un sacco di dependencies, tra cui X11.

Si prega di notare che lo stato di output di Inskscape è sempre 0, anche se si verifica un errore – pertanto attenti al suo stderr.

C'è anche inkscape --shell , adatto per la conversione di molti documenti in un batch. Ciò evita il lento tempo di avvio di Inkscape per each file:

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

Inkscape è utile anche per semplificare un SVG:

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

Ottengo buoni risultati dalla printing da Inkscape (0.47 anche) a PDF e per il salvataggio in formato PDF (ma leggermente diverso), ma ciò potrebbe dipendere dall'image a portta di mano.

Un'alternativa con una risoluzione inferiore (non ho provato nessun interruttore per migliorare) è

  convert file.svgz file.pdf 

convert è parte del pacchetto ImageMagick . Rasterizer è un altro programma:

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

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

  apropos -s 1 svg 

La manpage per questi programmi dovrebbe spiegare, se il programma è utile per la conversione di svg in pdf.

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 generate da Inkscape. Un SVG aveva text in essa, l'altro aveva solo grafica vettoriale. Ha anche guasto per una grafica semplice senza estensioni di Inkscape o clip-path. Quindi non considero gsvg un converter SVG-to-PDF utilizzabile.

Ho usato CairoSVG con successo su OSX e Ubuntu.

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

Documentazione CairoSVG