113

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

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

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

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

Какие еще варианты у меня есть?

7 ответов7

123

rsvg-convert добился цели для 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 может быть сложно установить в автономную систему.

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

71

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

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

Вышеуказанный вызов Inkscape из командной строки работает даже в автономном режиме, без графического интерфейса пользователя (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
7

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

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

 convert file.svgz file.pdf 

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

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

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

 apropos -s 1 svg

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

6

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

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

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

5

https://superuser.com/a/79064/19956 упоминает gsvg, часть GhostPDL.

Я пробовал gsvg ghostpdl-9.06 на Ubuntu Lucid, но он не удался для двух SVG, сгенерированных Inkscape. У одного SVG был текст, у другого была только векторная графика. Это также не удалось для простой графики без расширений Inkscape или пути к клипам. Поэтому я не считаю gsvg пригодным для использования конвертером SVG в PDF.

2

На Mac OS (учитывая, что вы уже установили brew) я делаю:

$ brew install cairo libffi python3
$ pip3 install cairosvg

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

То же самое должно работать в Linux, но вместо этого с apt-get.

0

Откройте файл svg с помощью Image Viewer (также называется Eye of Gnome eog) и распечатайте его в файл PDF (скажем, image.pdf) и преобразуйте этот pdf в eps с помощью команды pdf2ps . Просто!

Разработанные шаги:

  1. Установите Image Viewer если это еще не сделано (крайне маловероятно, если вы используете gnome)

    sudo apt-get install eog
    
  2. Откройте файл svg с помощью eog и распечатайте его в файл image.pdf .

  3. (Необязательно) Удалите окружающие пробелы из файла PDF:

    pdfcrop image.pdf
    

    Это создаст image-crop.pdf с удалением окружающих пробелов.

  4. Преобразовать обрезанный PDF в EPS (используйте image.pdf напрямую, если вы не обрезали PDF)

    pdf2ps image-crop.pdf image.eps
    

Это оно!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .