Як конвертувати SVG у PDF в Linux


126

Як перетворити SVG та SVG (що містить кілька слів латинського тексту та просту векторну графіку) у PDF в Linux?

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

Я спробував відкрити SVG в Google Chrome 16 і надрукувати його в PDF, але він спотворює всі кольори, а також видаляє деякі елементи. (SVG відображається добре на екрані, але він вже поганий у попередньому перегляді друку, а створений PDF також поганий.)

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

Які ще є варіанти?


1
Якщо у вас є лише кілька зображень для перетворення, можливо, вам буде простіше використовувати деякі з онлайн-перетворювачів. Я спробував CloudConvert, і він зробив дуже гарну роботу з половиною розміру файлу SVG.
Френк Брейтлінг

Відповіді:


134

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-перетворення може бути важко встановити на безголову систему.

Примітка. На сторінці "man" rsvg-convertзазначено, що інструмент завжди розширюється, але це неправда. Посібник просто застарілий. Іноді ваш інструмент для генерування svg може частково розширити зображення svg, що також може ввести вас в оману.


4
Це дуже багато залежностей, які я тут бачу: Каїр, libgphoto, gtk3, libsane ... О добре, якщо це зробить роботу ...
ShiDoiSi

4
@ AyberkÖzgür Це вина Inkscape - коли ви зберігаєте проект Inkscape, він за замовчуванням зберігає його як SVG, але SVG, який він зберігає, включає купу нестандартних даних, характерних для Inkscape, які можуть часто псувати інші програми. Вам потрібно експортувати як SVG, а не просто зберігати як SVG.
AJMansfield

2
Ви можете зекономити деякий час на пошуку: у Suse-Systems rsvg-convertвикликається пакет, що містить rsvg-view.
Trendfischer

1
Це працювало для мене, і якість pdf така ж, як svg. До цього використовували imagemagick для перетворення в pdf, і якість була поганою, особливо для svg.
Пратік Соні

1
На жаль, це не вбудовує шрифти на macOS.
морська риба

79

Це працює на Ubuntu Lucid:

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

Виклик командного рядка Inkscape вище працює навіть у безголовому режимі, без GUI ( DISPLAY=). Однак при встановленні Inscape встановлюється безліч залежностей, включаючи X11.

Зауважте, що статус виходу Inskscape завжди дорівнює 0, навіть якщо виникає помилка - тому стежте за її жорсткістю.

Є також 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

2
На жаль, це, здається, не працює в ОС X. Все-таки приємна відповідь.
Конрад Рудольф

3
ОП уточнила, що Inkscape має помилки надання; це відповідає моєму досвіду.
Ділан Турстон

3
На OSX за допомогою Homebrew ви можете встановити Inkscape за brew install inkscapeцих днів. Отримане /usr/local/bin/inkscapeв мене спрацювало, не запускаючи X11.app.
Алекс Шредер

2
Inkscape можна встановити на OS X з dmgрозповсюдженого на власному веб-сайті, а потім викликати з командного рядка після створення двох символічних посилань: ln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscapeі аналогічно для inkscape-bin(якщо припустимо ~/bin, що у вашому $PATH).
Іоанніс Філіппідіс

2
Ви можете використовувати прапор -z(або --without-gui) з Inkscape, щоб запустити його лише в пакетному режимі (жодне вікно взагалі не відкриється).
Артефакт2

8

Я успішно використовував CairoSVG на OSX та Ubuntu.

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

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


Ви можете використовувати навіть прив'язки пітона. На жаль, я виявив, що цей метод досить обмежений, тобто багато функцій svg не підтримуються.
боди

7

Я отримую хороші результати від друку від 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.


18
Дякую за ваші пропозиції. FYI convert- це не відповідь на оригінальне запитання, тому що convertрозширює SVG до зображення растрового зображення, і в оригінальному запитанні було шукати рішення, яке цього не робить.
пт

5

https://superuser.com/a/79064/19956 згадується gsvg , частина GhostPDL.

Я спробував gsvg ghostpdl-9.06 на Ubuntu Lucid, але це не вдалося для двох SVG, генерованих Inkscape. Один SVG мав текст у ньому, інший мав лише векторну графіку. Він також не вдався до простої графіки без розширень Inkscape або кліпу. Тому я не вважаю gsvg перетворювачем SVG в PDF, який можна використовувати.


3

У Mac OS (враховуючи, що у вас вже встановлено заварку):

$ brew install cairo libffi python3
$ pip3 install cairosvg

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

Те саме має працювати в Linux, але замість apt-get.


1
Це працює і з вихідним форматом pdf. На відміну від svg2pdfта rsvg-convert, це зберігає шрифти.
морська риба

Дякую, я поставив неправильне розширення. Я оновив приклад.
Адріель-молодший

Працював як шарм!
майроп

1

Мені цікаво, чому про це не згадувалося раніше, але я випробував купу різних svg-> pdf-перетворювачів і виявив, що найкращий - це Безголовий хром . Це дає найточніші результати для мене. Перед переходом на Chrome я намагався боротися з помилками Inkscape, але багато з них занадто серйозні, і я не можу багато з цим зробити (помилки прозорості, неправильні шрифти тощо).

 chrome --headless --disable-gpu --print-to-pdf="output.pdf" "input.svg"

Для використання спеціального розміру PDF потрібні певні налаштування (за замовчуванням A4), але мені вдалося встановити спеціальний розмір після деякого гуглювання та гри з атрибутами CSS та SVG (ознайомтеся з цією відповіддю на stackoverflow )


Ласкаво просимо до Супер Користувача! Зовнішні посилання можуть розірватися або бути недоступними, і тоді ваша відповідь буде лише тизером. Навіть поки посилання все ще працює, вміст не можна індексувати, щоб допомогти людям знайти рішення. Будь ласка, включіть важливу інформацію у відповідь та скористайтеся посиланням для атрибуції та подальшого читання. Дякую.
fixer1234

від WSL вам потрібні додаткові прапориchromium --no-sandbox --disable-setuid-sandbox --headless --disable-gpu --print-to-pdf=output.pdf input.svg
ticapix

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
    

Це воно!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.