Como faço para converter um SVG (contendo algumas palavras de texto latino e alguns gráficos vetoriais simples) em PDF no Linux?
Eu tentei o Inkscape 0.47 no Ubuntu Lucid, mas ele move alguns subgráficos aleatoriamente e torna algumas linhas mais curtas no PDF de saída. Portanto, sua saída é inútil, porque os gráficos parecem completamente diferentes.
Tentei abrir o SVG no Google Chrome 16 e imprimir em PDF, mas distorce todas as cores e também remove alguns elementos. (O SVG aparece bem na tela, mas já está ruim na visualização da impressão e o PDF gerado também está ruim)
Não quero rasterizar ou renderizar o SVG. Uma solução que converte o SVG em uma imagem bitmap e depois cria um PDF com a imagem incorporada não é uma resposta à minha pergunta. (Para sua informação, o Inscape 0.47 renderiza o texto de uma maneira muito feia, sem antialiasing, ao renderizar para PNG)
Qexistem outras opções?
Responder1
conversão rsvgfiz 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 subdivide fontes (pelo menos incorporou os caracteres usados da fonte Arial). Às vezes, a incorporação da fonte falha (por exemplo, para a fonte LMRoman17) e todo o arquivo da fonte é copiado para o PDF gerado.
Dependências do 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.
Observação:
A página de manual rsvg-convert
afirma que a ferramenta sempre rasteriza, mas isso não é verdade. O manual é simplesmente obsoleto. Às vezes, sua ferramenta de geração de SVG pode rasterizar parcialmente a imagem SVG, o que também pode enganar você.
Responder2
Isso funciona no Ubuntu Lucid:
$ sudo apt-get install inkscape
$ inkscape t.svg --export-pdf=t.pdf
A invocação de linha de comando do Inkscape acima funciona mesmo no modo headless, sem uma GUI ( DISPLAY=
). No entanto, a instalação do Inscape instala muitas dependências, incluindo o X11.
Observe que o status de saída do Inskscape é sempre 0, mesmo se ocorrer um erro - portanto, esteja atento ao seu stderr.
Existe também o inkscape --shell
, adequado para converter muitos documentos em lote. Isso evita o tempo lento de inicialização 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
Responder3
Usei CairoSVG com sucesso no OSX e no Ubuntu.
pip install cairosvg
cairosvg in.svg -o out.pdf
Responder4
Obtenho bons resultados ao imprimir do Inkscape (0,47 também) para PDF e ao salvar como PDF (mas um pouco diferente), mas isso pode depender do gráfico em questão.
Uma alternativa com resolução mais baixa (não tentei nenhuma opção para melhorá-la) é
convert file.svgz file.pdf
convert
faz parte do ImageMagick
pacote. Rasterizer é outro programa:
rasterizer -m application/pdf file.svgz -d file.pdf
Para descobrir quais programas que lidam com svgs estão instalados em seu sistema, tente
apropos -s 1 svg
A página de manual desses programas deve explicar se o programa é útil para converter SVG em PDF.