¿Cómo convierto un SVG a un PDF en Linux?


126

¿Cómo convierto y SVG (que contiene algunas palabras de texto latino y algunos gráficos vectoriales simples) a un PDF en Linux?

Probé Inkscape 0.47 en Ubuntu Lucid, pero mueve algunos sub-gráficos al azar y acorta algunas líneas en el PDF de salida. Por lo tanto, su salida es inútil, porque los gráficos se ven completamente diferentes.

Intenté abrir el SVG en Google Chrome 16 e imprimirlo en PDF, pero distorsiona todos los colores y también elimina algunos elementos. (El SVG aparece bien en la pantalla, pero ya está mal en la vista previa de impresión y el PDF generado también es malo).

No quiero rasterizar o renderizar el SVG. Una solución que convierte el SVG en una imagen de mapa de bits y luego crea un PDF con la imagen incrustada no es una respuesta a mi pregunta. (FYI Inscape 0.47 hace que el texto sea muy feo, sin antialiasing, cuando se procesa en PNG).

¿Qué otras opciones tengo?


1
Si solo tiene que convertir algunas imágenes, puede que le resulte más fácil usar algunos de los convertidores en línea. Intenté CloudConvert e hizo un muy buen trabajo con la mitad del tamaño de archivo del SVG.
Frank Breitling

Respuestas:


134

rsvg-convert hizo el truco para el SVG que quería convertir:

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

rsvg-convert -f pdfno rasteriza el SVG, e incrusta y subconjusta las fuentes (al menos ha incrustado los caracteres usados ​​de la fuente Arial). A veces, la incrustación de fuentes falla (por ejemplo, para la fuente LMRoman17), y todo el archivo de fuente se copia al PDF generado.

Dependencias en 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

Por defecto, libcairo necesita libX11, por lo que rsvg-convert puede ser difícil de instalar en un sistema sin cabeza.

Nota: La página de manual de rsvg-convertestados indica que la herramienta siempre se rasteriza, pero esto no es cierto. El manual es simplemente obsoleto. A veces, su herramienta de generación de svg puede rasterizar parcialmente la imagen de svg, lo que también puede confundirlo.


44
Hay muchas dependencias que estoy viendo aquí: cairo, libgphoto, gtk3, libsane ... Oh, bueno, si hace el trabajo ...
ShiDoiSi

44
@ AyberkÖzgür Eso es culpa de Inkscape: cuando guarda un proyecto de Inkscape, por defecto lo guardará como SVG, pero el SVG que guarda incluye un montón de datos no estándar específicos de Inkscape que con frecuencia pueden estropear otros programas. Debe exportar como SVG en lugar de guardar como SVG.
AJMansfield

2
Podría ahorrar algo de tiempo buscando: en Suse-Systems rsvg-convertse llama al paquete que contiene rsvg-view.
Trendfischer

1
Funcionó para mí y la calidad de pdf es la misma que svg. Antes de esto estaba usando imagemagick para convertir a pdf y la calidad era pobre, especialmente para svg.
Pratik Soni

1
Desafortunadamente, esto no incrusta las fuentes en macOS.
pez remo

79

Esto funciona en Ubuntu Lucid:

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

La invocación de Inkscape de la línea de comandos anterior funciona incluso en modo sin cabeza, sin una GUI ( DISPLAY=). Sin embargo, la instalación de Inscape instala muchas dependencias, incluida X11.

Tenga en cuenta que el estado de salida de Inskscape siempre es 0, incluso si se produce un error, así que tenga cuidado con su stderr.

También existe inkscape --shell, adecuado para convertir muchos documentos en un lote. Esto evita el tiempo de inicio lento de Inkscape para cada archivo:

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

Inkscape también es útil para simplificar un SVG:

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

2
Desafortunadamente, esto no parece funcionar en OS X. Aún así, buena respuesta.
Konrad Rudolph el

3
El OP especificó que Inkscape tenía errores de representación; Esto coincide con mi experiencia.
Dylan Thurston

3
En OSX usando Homebrew, puede instalar Inkscape usando brew install inkscapeestos días. El resultado /usr/local/bin/inkscapefuncionó para mí sin tener que ejecutar X11.app.
Alex Schröder

2
Inkscape se puede instalar en OS X desde el dmgdistribuido en su propio sitio web, y luego se puede llamar desde la línea de comandos después de crear dos enlaces simbólicos: ln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscapey de manera similar para inkscape-bin(suponiendo que ~/binesté en su $PATH).
Ioannis Filippidis

2
Puede usar el indicador -z(o --without-gui) con Inkscape para ejecutarlo solo en modo por lotes (no se abrirá ninguna ventana).
Artefact2

8

He usado CairoSVG con éxito en OSX y Ubuntu.

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

Documentación de CairoSVG


Incluso hay enlaces de python que puedes usar. Desafortunadamente, descubrí que este método es bastante limitado, es decir, muchas funciones de svg no son compatibles.
Bodo

7

Obtengo buenos resultados al imprimir desde Inkscape (también 0.47) a PDF, y al guardar como PDF (pero ligeramente diferente), pero esto puede depender del gráfico en cuestión.

Una alternativa con menor resolución (no probé ningún interruptor para mejorarla) es

 convert file.svgz file.pdf 

convertEs parte del ImageMagickpaquete. Rasterizer es otro programa:

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

Para averiguar qué programas que manejan svgs están instalados en su sistema, simplemente intente

 apropos -s 1 svg

La página de manual de estos programas debería explicar, si el programa es útil para convertir el svg a pdf.


18
Gracias por tus sugerencias. FYI convertno es una respuesta a la pregunta original, porque convertrasteriza el SVG a una imagen de mapa de bits, y la pregunta original estaba buscando una solución que no lo haga.
pts

5

https://superuser.com/a/79064/19956 menciona gsvg , parte de GhostPDL.

Intenté gsvg ghostpdl-9.06 en Ubuntu Lucid, pero falló en dos SVG generados por Inkscape. Un SVG tenía texto, el otro solo tenía gráficos vectoriales. También falló para gráficos simples sin extensiones de Inkscape o clip-path. Por lo tanto, no considero que gsvg sea un convertidor SVG a PDF utilizable.


3

En Mac OS (considerando que ya tienes brew instalado) hago:

$ brew install cairo libffi python3
$ pip3 install cairosvg

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

Lo mismo debería funcionar en Linux, pero con apt-get en su lugar.


1
Esto también funciona con la salida de pdf. En contraste con svg2pdfy rsvg-convert, esto preserva las fuentes.
pez remo

Gracias, puse la extensión incorrecta. Actualicé el ejemplo.
Adriel Jr

¡Trabajado como un encanto!
mayrop

1

Me pregunto por qué no se ha mencionado antes, pero probé un montón de diferentes convertidores svg-> pdf y descubrí que el mejor es Chrome sin cabeza . Produce los resultados más precisos para mí. Antes de cambiar a Chrome, estaba tratando de luchar contra los errores de Inkscape, pero muchos de ellos son demasiado serios y no puedo hacer mucho al respecto (errores de transparencia, fuentes incorrectas, etc.).

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

Necesita algunos ajustes para usar un tamaño de PDF personalizado (A4 es el predeterminado), pero pude establecer un tamaño personalizado después de buscar en Google y jugar con los atributos CSS y SVG (mira esta respuesta en stackoverflow )


¡Bienvenido a Super User! Los enlaces externos pueden romperse o no estar disponibles, en cuyo caso su respuesta sería solo un reclamo. Aunque los enlaces siguen funcionando, el contenido no puede indexarse ​​para ayudar a las personas a encontrar la solución. Incluya la información esencial en su respuesta y use el enlace para la atribución y lectura adicional. Gracias.
Fixer1234

de WSL, necesita algunas banderas adicionaleschromium --no-sandbox --disable-setuid-sandbox --headless --disable-gpu --print-to-pdf=output.pdf input.svg
ticapix

0

Abra el archivo svg con Image Viewer(también llamado Eye of Gnome eog) e imprímalo en un archivo PDF (digamos image.pdf) y convierta ese pdf a eps usando el pdf2pscomando. ¡Sencillo!

Pasos elaborados:

  1. Instale Image Viewersi aún no lo ha hecho (paso muy poco probable si lo usa gnome)

    sudo apt-get install eog
    
  2. Abra el archivo svg con eoge imprímalo en un image.pdfarchivo.

  3. (Opcional) Elimine los espacios en blanco circundantes del archivo pdf:

    pdfcrop image.pdf
    

    Esto generará image-crop.pdfcon el espacio en blanco circundante eliminado.

  4. Convierta pdf recortado a eps (use image.pdfdirectamente si no recortó el pdf)

    pdf2ps image-crop.pdf image.eps
    

¡Eso es!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.