Конвертация документов Office в Linux без использования MS Office

Вы работаете на сервере под управлением Linux. Клиент прислал файл .docx, который нужно преобразовать в PDF. Или вам нужно конвертировать 50 файлов .odt в HTML для сайта с документацией. Или вы ведёте документацию в формате markdown, но заинтересованные стороны хотят получить файлы Word.

У вас нет Microsoft Office. Вы не хотите Microsoft Office. И, честно говоря, он вам не нужен.

В Linux есть надежные инструменты для конвертации документов. Некоторые работают отлично. У некоторых есть свои особенности.

Режим без интерфейса LibreOffice

Libreoffice — это не просто настольное приложение. У него есть режим командной строки, который обрабатывает конвертацию без открытия графического интерфейса.

Базовый синтаксис конвертации:

libreoffice –headless –convert-to pdf document.docx

Это работает для большинства распространенных форматов: DOCX в PDF, ODT в DOCX, DOC в HTML, таблицы в CSV.

Несколько файлов:

libreoffice –headless –convert-to pdf *.docx

Указание каталога вывода:

libreoffice –headless –convert-to pdf –outdir ./pdfs *.docx

Что работает хорошо:

  • Простые документы со стандартным форматированием
  • Таблицы в PDF или CSV
  • Пакетная обработка нескольких файлов
  • Простые презентации в PDF

Что не работает:

  • Сложные шаблоны Word с пользовательскими шрифтами
  • Документы, использующие специфическое для Windows отображение шрифтов
  • Файлы со встроенными объектами или необычным форматированием
  • Точное соответствие макета (поля могут слегка сдвигаться)

Конвертация достаточно хороша для большинства внутренних документов. Для материалов, предназначенных для клиентов, где форматирование имеет значение, вам может понадобиться что-то более надежное.

unoconv: оболочка на Python

unoconv обертывает механизм конвертации LibreOffice более удобным интерфейсом. Это скрипт на Python, который вызывает привязки UNO LibreOffice у себя «под капотом».

Установка на Debian/Ubuntu:

sudo apt install unoconv

Конвертация в PDF:

unoconv -f pdf document.docx

Конвертация в HTML:

unoconv -f html report.odt

Преимущество заключается в том, что unoconv лучше справляется с управлением процессами LibreOffice. Ранние версии режима без интерфейса LibreOffice могли оставлять запущенными «зомби-процессы». unoconv корректно очищает систему.

Пример пакетного скрипта:

#!/bin/bash
for file in *.docx; do
  unoconv -f pdf $file
  echo Конвертирован $file
done

unoconv поддерживает такие форматы, как txt, html, xml, csv, xls, xlsx, doc, docx, odt, pdf, ppt и другие.

Важно: для работы unoconv необходимо установить LibreOffice. Применяются те же ограничения.

Pandoc для Markdown и облегченных форматов

Pandoc отличается. Это конвертер документов, который очень хорошо понимает языки разметки. Он не зависит от LibreOffice.

Установка:

sudo apt install pandoc

Markdown в DOCX:

pandoc -s document.md -o document.docx

DOCX в Markdown:

pandoc document.docx -o document.md

Markdown в PDF (требуется LaTeX):

pandoc document.md -o document.pdf

Примечание о генерации PDF: По умолчанию Pandoc использует LaTeX в качестве движка для создания PDF. Для вывода в PDF вам понадобится установить дистрибутив LaTeX:

sudo apt install texlive

В качестве более легкой альтернативы вы можете использовать wkhtmltopdf или weasyprint в качестве движка PDF, но вам нужно будет установить их отдельно и указать с помощью параметра –pdf-engine.

Pandoc показывает себя с лучшей стороны при работе с текстовыми форматами. Преобразование Markdown в HTML, reStructuredText в PDF, LaTeX. Он интеллектуально обрабатывает структуру и форматирование.

В чем Pandoc превосходит другие инструменты:

  • Преобразование между форматами разметки
  • Создание документации из Markdown
  • Создание PDF-файлов из Markdown с правильным стилем (при установленном LaTeX)
  • Пакетное преобразование документов для генераторов статических сайтов

Где у Pandoc возникают трудности:

  • Сложные документы Word с точным макетом
  • Таблицы Excel (не предназначены для этого)
  • Файлы с сложным форматированием или встроенными объектами
  • Проприетарные двоичные форматы

Pandoc — это инструмент, который подходит, когда вы контролируете входной формат. Если вы пишете документы в Markdown и вам нужно экспортировать их в различные форматы, Pandoc идеально подходит.

Работа с сложынми документами

Шрифты — это враг!

Документ, созданный в Windows с использованием шрифтов Calibri или Times New Roman, может отображаться по-разному в Linux. LibreOffice заменяет шрифты. Иногда это нормально. Иногда это нарушает разбивку на страницы.

Решение: Установите основные шрифты Microsoft:

sudo apt install ttf-mscorefonts-installer

Это даст вам Arial, Times New Roman, Courier New и другие распространенные шрифты Windows. Не идеально, но ближе к идеалу. Во время установки вам нужно будет принять лицензионное соглашение Microsoft.

Встроенные объекты не отображаются

Документы Word со встроенными диаграммами Excel, схемами Visio или проприетарными объектами часто не конвертируются корректно. LibreOffice пытается это сделать. Иногда появляется заполнитель. Иногда объект исчезает.

Для этого нет идеального решения, встроенного в Linux. Объекты используют рендеринг, специфичный для Windows.

Макросы не переносятся

Если в документе есть макросы VBA, они не будут работать в LibreOffice. Процесс конвертации удаляет их или делает неработоспособными.

Автоматизация рабочих процессов с помощью скриптов

Реальный сценарий: вы управляете сайтом с документацией. Авторы пишут в Markdown. Клиенты хотят скачивать PDF. Вам нужна автоматическая конвертация.

Пример скрипта (требуется LaTeX для генерации PDF):

#!/bin/bash
for md in docs/*.md; do
  filename=$(basename $md .md)
  pandoc $md -o pdfs/$filename.pdf \
    –pdf-engine=xelatex \
    –variable mainfont=DejaVu Sans \
    –variable geometry:margin=1in
  echo Создан файл pdfs/$filename.pdf
done

Другой сценарий: пакетное преобразование файлов, присланных клиентами. Они присылают DOCX, а вам нужен PDF для архивирования.

#!/bin/bash
mkdir -p converted
for docx in submissions/*.docx; do
  filename=$(basename $docx .docx)
  libreoffice –headless –convert-to pdf –outdir converted $docx
done

Добавим обработку ошибок:

#!/bin/bash
for docx in *.docx; do
  if libreoffice –headless –convert-to pdf "$docx" 2>/dev/null; then
    echo  $docx converted
  else
    echo  $docx failed
  fi
done

Когда инструментов Linux недостаточно

Иногда требуется идеальная точность. Отчет, который должен точно соответствовать оригиналу. Презентация с точным макетом.

LibreOffice решает 90% задач. Остальные 10% — это те моменты, где возникают проблемы. Шрифты отображаются немного по-разному. Смещаются поля. Пропадают встроенные объекты.

В таких случаях веб-инструменты для конвертации документов лучше справляются с крайними ситуациями. Они созданы специально для конвертации форматов и обычно сохраняют форматирование точнее, чем альтернативы с открытым исходным кодом.

Это не упрек в адрес инструментов Linux — они отлично подходят для большинства случаев. Но когда вы имеете дело с юридическими документами, материалами для клиентов или чем-либо, где важна точность форматирования, наличие запасного варианта экономит время.

Выбор подходящего инструмента

Краткое дерево решений:

  • Источник в формате Markdown или простой текст: используйте Pandoc
  • Пакетное преобразование офисных документов: используйте LibreOffice headless или unoconv
  • Простые внутренние документы: LibreOffice headless работает отлично
  • Важное значение имеет сложное форматирование: нужно тестировать
  • Автоматизированный конвейер: создайте скрипт для LibreOffice или unoconv с обработкой ошибок
  • Нужны PDF-файлы из Markdown: установите Pandoc LaTeX (texlive)

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

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Похожие статьи

Комментарии (2)

Автар по умолчанию