LINUX.ORG.RU

Конвертация из SVG в PDF в консоли через Inkscape упакованный в AppImage

 , , , ,


0

1

Имеется Inkscape 1.2.1, который запускается из AppImage.

Графический запуск происходит без проблем. Но мне нужен запуск bash-команды, которая использует этот InkScape для преобразования одностраничного SVG в одностраничный PDF.

Вот пример команды (образец взят отсюда: https://graphicdesign.stackexchange.com/questions/5880/how-to-export-an-inksc...)

/opt/inkscape_1_2_1/Inkscape-9c6d41e-x86_64_1_2_1.AppImage /home/xi/work/develop/php/undefinedVictorin2022/src/../svg/victorine01/page00.svg --export-area-drawing --batch-process --export-type=pdf --export-filename=/home/xi/work/develop/php/undefinedVictorin2022/src/../pdf/victorine01/page00.pdf

Однако, эта команда, вместо того чтобы сконвертировать SVG в PDF, открывает SVG-файл в графическом интерфейсе и ничего не делает. В консоли никаких ошибок нет.

Вопрос: как сконвертировать SVG в PDF через InkScape из AppImage?

PS: Использовать для конвертирования утилиту rsvg-convert невозможно, она криво конвертит SVG, и как минимум не знает о переносе строк и различных режимах выравнивания текста по горизонтали.

★★★★★

Беглый поиск говорит, что для того, чтобы параметры передались приложению внутри контейнера, надо правильно его использовать, например, запускать его в AppRun через

exec ./your/executable "$@"

Вероятно те, кто паковал InkScape этого не сделали и параметры не долетают до самого исполняемого файла. Либо долетают не все, типа $1 передали и хватит.

agentgoblin
()

Если appimage можно распаковать (как тот же deb, например), то попробуй распотрошить его и покопаться в кишках - как именно они передают параметры приложению внутри.

Вот тут есть какие-то советы по распаковке:

https://superuser.com/questions/1301583/how-can-i-extract-files-from-an-appimage

agentgoblin
()
Ответ на: комментарий от agentgoblin

Похоже, таки $@ передается:

https://pastebin.com/2V63hPQ2

if [ ! -z $APPIMAGE ] ; then
  BINARY_NAME=$(basename "$ARGV0")
else
  BINARY_NAME=$(basename "$0")
fi
if [ ! -z "$1" ] && [ -e "$HERE/usr/bin/$1" ] ; then
  MAIN="$HERE/usr/bin/$1" ; shift
elif [ -e "$HERE/usr/bin/$BINARY_NAME" ] ; then
  MAIN="$HERE/usr/bin/$BINARY_NAME"
else
  MAIN="$HERE/usr/bin/inkscape"
fi
...
exec "$HERE/lib/$PLATFORM/ld-linux-x86-64.so.2" --inhibit-cache --library-path "$LIBRARY_PATH" "$MAIN" "$@"

Что-то еще на неработу может влиять.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Как вариант, попробуй через --shell выполнить обработку:

--shell

    With this parameter, Inkscape will enter an interactive command line shell mode. In this mode, you type in commands at the prompt and Inkscape executes them, without you having to run a new copy of Inkscape for each command. This feature is mostly useful for scripting and server uses: it adds no new capabilities but allows you to improve the speed and memory requirements of any script that repeatedly calls Inkscape to perform command line tasks (such as export or conversions).

    In shell mode Inkscape expects a sequence of actions (or verbs) as input. They will be processed line by line, that means typically when pressing enter. It is possible (but not necessary) to put all actions on a single line.

    The following example opens a file and exports it into two different formats, then opens another file and exports a single object:

        file-open:file1.svg; export-type:pdf; export-do; export-type:png; export-do
        file-open:file2.svg; export-id:rect2; export-id-only; export-filename:rect_only.svg; export-do

Я так думаю если руками запустить и дать команды, то он ругнётся на что-нибудь, если ему не понравимтся.

А там и автоматизировать попробовать можно через

cat commands.txt | inkscape --shell
agentgoblin
()
Последнее исправление: agentgoblin (всего исправлений: 1)
Ответ на: комментарий от agentgoblin

В общем, оказалось что формат командной строки для команды конвертирования опять изменился. До версии 1.0 был один, после версии 1.0 - другой, сейчас на версии 1.2.1 - третий.

Теперь для преобразования SVG->PDF надо делать так:

inkscape --export-filename=page10.pdf page10.svg

Xintrea ★★★★★
() автор топика