ZaLinux.ru

Работа LibreOffice в командной строке: конвертирование большого количества файлов и вывод содержимого офисных файлов в консоль

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

Предположим, нам дано множество офисных файлов в формате .doc (или любом другом формате, который поддерживает LibreOffice), и мы хотим их переконвертировать в другой формат. Если файлов немного, то их можно открыть в LibreOffice и выбрать сохранение в нужном формате. Но если их десятки и более, то эта рутинная работа станет долгой и утомительной.

К счастью, LibreOffice умеет работать в консоли. Причём нам даже не нужно писать скрипты, поскольку она понимает подстановочные символы.

Сохранение большого количества файлов в другой формат

Для этого нужно запустить команду

soffice --headless --convert-to doc Имя_файла

Где

  • doc – можно заменить на желаемый формат (pdf, html, odt, docx и т.д.)
  • Имя_файла – замените на тот файл, который вы хотите конвертировать.

Ещё примеры команды:

Конвертирует все поддерживаемые файлы в каталоге Математика в html формат и сохранит их в текущем каталоге^

soffice --headless --convert-to html Математика/*

Конвертировать все файлы в формате .doc в формат PDF и сохранить их в каталоге /home/user:

soffice --headless --convert-to pdf:writer_pdf_Export --outdir /home/user *.doc

Конвертировать все файлы в формате .doc в формат html с кодировкой UTF8 и сохранить их в текущем каталоге.

soffice --headless --convert-to "html:XHTML Writer File:UTF8" *.doc

Конвертировать все файлы в формате .doc в обычный текст с кодировкой UTF8.

soffice --headless --convert-to "txt:Text (encoded):UTF8" *.doc

Вывод содержимого файла в консоль

Иногда нужно, чтобы консольный Bash скрипт прочитал содержимое офисного файла и вывел это содержимое в консоль. Если бы нас интересовали обычные текстовые файлы, то мы могли бы воспользоваться командой cat. Но офисные файлы имеют сложную структуру и иногда представляют собой архивы, т.е. бинарные файлы. Поэтому для этого у LibreOffice есть специальная опция командной строки --cat:

soffice --headless --cat имя_файла

Конечно, сложные элементы, которые не могут быть отображены в командной строке (картинки, формы и т.д.), показаны не будут.

Рекомендуемые статьи:

9 Комментарии

  1. Yudini

    А в винде команда конвертации недоступна? я могу открыть командой файл, но конвертироваться он не желает.
    Пробовал разные варианты. С конкретным фалом, со всеми файлами в папке, конвертацию в разные фрматы, даже запуск в самом ридере swriter.exe с параметрами. В итоге все равно открывается, но не конвертится. Винда не может в последовательность команд ?

    Секретного варианта запуска и исполнения макроса, как в ворде, нету?

    1. Alexey (Автор записи)

      У меня сначала тоже ничего не получалось. Пробовал свои примеры, а также как описано здесь:

      Там в одном примере даже зачем-то PS приплели.

      В общем, проблема решилась с помощью Cygwin:

      'C:/Program Files/LibreOffice 5/program/soffice.bin' --headless --convert-to pdf:writer_pdf_Export --outdir 'C:\tmp' 'C:\1.docx'
      convert C:\1.docx -> C:\tmp\1.pdf using filter : writer_pdf_Export

      Т.е. в Cygwin я запускал файл soffice.bin. У Cygwin сразу два огромных плюса:

      • он выводит ошибки (это помогло мне узнать, что LibreOffice не может прочитать исходный файл)
      • можно использовать подстановочные символы (в командной строке Windows никакие бы звёздочки мы не смогли использовать, пришлось бы писать простой bat скрипт для автоматизации).
      1. Yudini

        Ясно понятно, спасибо)

        В общем хелп у либре офиса немножко темнит

        Batch convert files. If --outdir is not specified, then current working directory is used as output_dir.

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

        Да, то что cmd ошибки не выводит это… раздражает

        Но в принципе

        "C:\Program Files\LibreOffice 5\program\soffice.exe" --headless --convert-to pdf:writer_pdf_Export --outdir "C:\tmp" "C:\tmp\1.docx"

        так запускается и отрабатывает даже в обычной cmd.

        PS Реадктор огонь, но… как вставлять в стиле кода?)

        1. Alexey (Автор записи)

          В стиле кода только для админа, причём только из админки при редактировании комментария – здесь даже я не могу вставить sad Это связано с фильтрацией данных (тегов).

  2. Антон

    Помогите не какне воспринемает Кирилицу

    "C:\Program Files\LibreOffice 5\program\soffice.exe" --headless --convert-to  docx --outdir C:\Clip\Anton C:\Clip\Anton\Обзор ВП сентябрь 2019.doc
    
    1. Alexey (Автор записи)

      Попробуйте имя файла поместить в кавычки:

      "C:\Program Files\LibreOffice 5\program\soffice.exe" --headless --convert-to  docx --outdir "C:\Clip\Anton\Обзор ВП сентябрь 2019.doc"

       

      1. Dmitry

        Подскажите комманду для извлечения изображений из PDF-файла. То есть для каждой страницы PDF файла на выходе получается 1 картинка (jpg,png).

        1. Alexey (Автор записи)

          Это может делать программа «PDF Redact Tools».

          1. Dmitry

            Нужно именно консольной командой libreoffice.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *