Как преобразовать SVG в PDF в Linux

Как преобразовать SVG в PDF в Linux

Как преобразовать SVG (содержащий несколько слов латинского текста и простую векторную графику) в PDF на Linux?

Я попробовал Inkscape 0.47 на Ubuntu Lucid, но он перемещает некоторые субграфики случайным образом и делает некоторые строки короче в выходном PDF. Так что его вывод бесполезен, потому что графика выглядит совершенно иначе.

Я попробовал открыть SVG в Google Chrome 16 и распечатать его в PDF, но он искажает все цвета, а также удаляет некоторые элементы. (SVG отлично выглядит на экране, но он уже плох в предварительном просмотре печати, и сгенерированный PDF тоже плохой)

Я не хочу растеризовать или визуализировать SVG. Решение, которое преобразует SVG в растровое изображение, а затем создает PDF со встроенным изображением, не является ответом на мой вопрос. (К вашему сведению, Inscape 0.47 визуализирует текст очень уродливым образом, без сглаживания, при визуализации в PNG)

Есть ли еще варианты?

решение1

rsvg-конвертироватьсделал то, что мне нужно для SVG-файла, который я хотел преобразовать:

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

rsvg-convert -f pdfне растеризует SVG, а встраивает и подмножества шрифтов (по крайней мере, встраивает используемые символы шрифта Arial). Иногда встраивание шрифта не удается (например, для шрифта LMRoman17), и весь файл шрифта копируется в сгенерированный PDF.

Зависимости от 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

По умолчанию для libcairo требуется libX11, поэтому установка rsvg-convert в headless-систему может оказаться затруднительной.

Примечание: На странице руководства rsvg-convertуказано, что инструмент всегда растеризует, но это неправда. Руководство просто устарело. Иногда ваш инструмент генерации svg может частично растеризовать изображение svg, что также может ввести вас в заблуждение.

решение2

Это работает в Ubuntu Lucid:

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

Вызов Inkscape из командной строки выше работает даже в режиме headless, без GUI ( DISPLAY=). Однако установка Inscape устанавливает множество зависимостей, включая X11.

Обратите внимание, что статус выхода Inskscape всегда равен 0, даже если возникает ошибка, поэтому следите за его stderr.

Также есть inkscape --shell, подходит для конвертации многих документов в пакетном режиме. Это позволяет избежать медленного времени запуска Inkscape для каждого файла:

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

Inkscape также полезен для упрощения SVG:

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

решение3

Я успешно использовал CairoSVG на OSX и Ubuntu.

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

Документация CairoSVG

решение4

Я получаю хорошие результаты при печати из Inkscape (тоже 0.47) в PDF, а также при сохранении в формате PDF (но с небольшими отличиями), но это может зависеть от конкретной графики.

Альтернатива с более низким разрешением (я не пробовал переключаться, чтобы улучшить его) —

 convert file.svgz file.pdf 

convertявляется частью пакета ImageMagick. Rasterizer — это еще одна программа:

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

Чтобы узнать, какие программы, обрабатывающие svgs, установлены в вашей системе, просто попробуйте

 apropos -s 1 svg

На странице руководства для этих программ должно быть указано, полезна ли программа для преобразования SVG в PDF.

Связанный контент