Como faço para converter um SVG em um PDF no Linux

112

Como faço para converter e SVG (contendo algumas palavras de texto latino e alguns gráficos vetoriais simples) para um PDF no Linux?

Eu tentei o Inkscape 0.47 no Ubuntu Lucid, mas ele move alguns sub-gráficos aleatoriamente e faz algumas linhas menores no PDF de saída. Então, a saída é inútil, porque os gráficos parecem completamente diferentes.

Eu tentei abrir o SVG no Google Chrome 16 e imprimi-lo em PDF, mas ele distorce todas as cores e também remove alguns elementos. (O SVG aparece bem na tela, mas já está ruim na pré-visualização e o PDF gerado também é ruim.)

Eu não quero rasterizar ou renderizar o SVG. Uma solução que converta o SVG em uma imagem de bitmap e, em seguida, crie um PDF com a imagem incorporada não é uma resposta à minha pergunta. (O FYI Inscape 0.47 renderiza o texto de uma maneira muito feia, sem antialiasing, ao renderizar para PNG.)

Quais outras opções eu tenho?

pts
fonte
1
Se você tiver apenas algumas imagens para converter, talvez seja mais fácil usar alguns dos conversores on-line. eu tentei CloudConvert e fez um trabalho muito bom com metade do tamanho do arquivo do SVG.
Frank Breitling

Respostas:

122

rsvg-convert fiz o truque para o SVG que eu queria converter:

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

rsvg-convert -f pdf não rasteriza o SVG e incorpora e subconjunto fontes (pelo menos, incorporou os caracteres usados ​​da fonte Arial). Às vezes, a incorporação de fontes falha (por exemplo, para a fonte LMRoman17) e todo o arquivo de fontes é copiado para o PDF gerado.

Dependências no 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 padrão, o libcairo precisa do libX11, então o rsvg-convert pode ser difícil de instalar em um sistema headless.

Nota: A página do homem de rsvg-convert afirma que a ferramenta sempre rasteriza, mas isso não é verdade. O manual é simplesmente obsoleto. Às vezes, sua ferramenta geradora de svg pode parcialmente rasterizar a imagem svg, o que também pode enganá-lo.

pts
fonte
4
São muitas dependências que estou vendo aqui: cairo, libgphoto, gtk3, libsane ... Ah bem, se faz o trabalho ...
ShiDoiSi
Isso vai se converter em um espaço de cores cmyk?
justingordon
3
@ AyberkÖzgür Isso é culpa do inkscape - quando você salva um projeto do Inkscape, ele salvará por padrão como SVG, mas o SVG que ele salva inclui um monte de dados específicos do inkscape que não são padrão e que podem atrapalhar com frequência outros programas. Você precisa exportar como um SVG, em vez de apenas salvar como um SVG.
AJMansfield
2
Pode economizar um pouco de tempo procurando: No Suse-Systems, o pacote contendo rsvg-convert é chamado rsvg-view.
Trendfischer
1
Funcionou para mim e a qualidade do pdf é o mesmo que svg. Antes disso, estava usando o imagemagick para converter em pdf e a qualidade era ruim, especialmente para o svg.
Pratik Soni
69

Isso funciona no Ubuntu Lucid:

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

A invocação do Inkscape da linha de comandos acima funciona mesmo no modo sem cabeça, sem uma GUI ( DISPLAY= ). No entanto, a instalação do Inscape instala muitas dependências, incluindo o X11.

Por favor, note que o status de saída do Inskscape é sempre 0, mesmo que ocorra um erro - por isso esteja atento ao stderr.

Há também inkscape --shell, adequado para converter muitos documentos em um lote. Isso evita o tempo de inicialização lento do Inkscape para cada arquivo:

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

O Inkscape também é útil para simplificar um SVG:

$ DISPLAY= inkscape t.svg --export-plain-svg=t.plain.svg
pts
fonte
2
Infelizmente isso não parece funcionar no OS X. Ainda assim, boa resposta.
Konrad Rudolph
3
O OP especificou que o Inkscape tinha erros de renderização; isso corresponde à minha experiência.
Dylan Thurston
3
No OSX usando Homebrew, você pode instalar o Inkscape usando brew install inkscape nos dias de hoje. O resultado /usr/local/bin/inkscape funcionou para mim sem ter que executar o X11.app.
Alex Schröder
1
O Inkscape pode ser instalado no OS X a partir do dmg distribuído em seu próprio site e, em seguida, chamado a partir da linha de comando depois de criar dois links simbólicos: ln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscape e da mesma forma para inkscape-bin (assumindo ~/bin está no seu $PATH ).
Ioannis Filippidis
Você pode usar o -z (ou --without-gui ) sinalizar com o Inkscape para executá-lo somente no modo batch (nenhuma janela será aberta).
Artefact2
7

Eu recebo bons resultados de impressão do Inkscape (0.47 também) para PDF e para salvar como PDF (mas ligeiramente diferente), mas isso pode depender do gráfico em mãos.

Uma alternativa com resolução mais baixa (não tentei nenhum comutador para melhorá-lo) é

 convert file.svgz file.pdf 

convert faz parte do ImageMagick pacote. Rasterizador é outro programa:

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

Para descobrir, quais programas que manipulam svgs estão instalados em seu sistema, apenas tente

 apropos -s 1 svg

A man page para estes programas deve explicar se o programa é útil para converter o svg para pdf.

user unknown
fonte
18
Obrigado por suas sugestões. Para sua informação convert não é uma resposta à pergunta original, porque convert rasteriza o SVG para uma imagem de bitmap, e a pergunta original estava procurando por uma solução que não faz isso.
pts
6

Eu usei o CairoSVG com sucesso no OSX e no Ubuntu.

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

Documentação CairoSVG

SYK
fonte
Há até mesmo ligações em python que você pode usar. Infelizmente, descobri que esse método é bastante limitado, ou seja, muitos recursos svg não são suportados.
bodo
5

https://superuser.com/a/79064/19956 menções gsvg parte do GhostPDL.

Eu tentei gsvg ghostpdl-9.06 no Ubuntu Lucid, mas falhou por dois SVGs gerados pelo Inkscape. Um SVG tinha texto, o outro tinha apenas gráficos vetoriais. Ele também falhou em gráficos simples sem as extensões do Inkscape ou o caminho do clipe. Então eu não considero o gsvg um conversor usável de SVG para PDF.

pts
fonte
2

No Mac OS (considerando que você já tem o brew instalado) eu faço:

$ brew install cairo libffi python3
$ pip3 install cairosvg

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

O mesmo deve funcionar no Linux, mas com o apt-get.

Adriel Jr
fonte
1
Isso funciona também com saída em pdf. Em contraste com svg2pdf e rsvg-convert, isso preserva as fontes.
oarfish
Obrigado, eu coloquei a extensão errada. Eu atualizei o exemplo.
Adriel Jr
0

Abra o arquivo svg com Image Viewer (Também chamado Olho do Gnomo eog ) e imprimi-lo em um arquivo PDF (digamos image.pdf ) e converter esse pdf para eps usando pdf2ps comando. Simples!

Etapas elaboradas:

  1. Instalar Image Viewer se ainda não foi feito (etapa altamente improvável se você usar gnome )

    sudo apt-get install eog
    
  2. Abra o arquivo svg com eog e imprimi-lo para image.pdf Arquivo.

  3. (Opcional) Remova o espaço em branco do arquivo pdf:

    pdfcrop image.pdf
    

    Isso irá gerar image-crop.pdf com o espaço em branco circundante removido.

  4. Converter pdf recortado para eps (use image.pdf diretamente se você não cortou o pdf)

    pdf2ps image-crop.pdf image.eps
    

É isso aí!

codeman48
fonte