Как преобразовать 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
решение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.