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 имя_файла

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


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

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

  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.

  3. Михаил

    Добрый день!

    Не работает пакетная обработка, не пойму почему.

    soffice --headless --convert-to docx --outdir d:\doc\d2 d:\doc\d1\*.doc

    Error: source file could not be loaded

    а один файл работает

    soffice --headless --convert-to docx --outdir d:\doc\d2 d:\doc\d1\1.doc

  4. GoodWeather

    Windows 10, LibreOffice 6.4, надо PDF во что-либо другое - не работает.
    Уже и полные пути прописывал, и разные форматы пробовал - команда просто молча уходит в никуда.
    Никаких ошибок, ни на что не ругается, просто пустота.
    Пару раз появился пустой HTML-файл, и тот через минуту после команды.

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

      Возможно, конвертировать можно только родные форматы.

      Что касается PDF, то такие файлы Writer даже не умеет открывать. Из пакета LibreOffice такие файлы умеет открывать только Draw, но эта программа может сохранить только в свой родной формат.

      В общем, вы выбрали неверный инструмент.

      FineReader умеет конвертировать PDF во что угодно. Причём PDF бывают двух видов — с текстовым слоем и без. Если текстовый слой есть, то его можно сохранить из любой программы для просмотра PDF. Если текстового слоя нет, то кроме OCR (программы для распознавания текста) никто его сохранить в текст не сможет. Максимум что можно сделать с таким файлом — это разбить на отдельные изображения.

      Возможно, FineReader поддерживает работу в командной строке, если вам нужно именно это. А так там очень удобно перетаскивать PDF прямо в программу и она его распознает и сохранит.

Добавить комментарий для GoodWeather Отменить ответ

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