Вы работаете на сервере под управлением 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 располагает надежными инструментами для конвертации. Они бесплатны, поддерживают скрипты и хорошо работают с большинством документов. Ознакомьтесь с их ограничениями, протестируйте свои конкретные сценарии использования и имейте готовые альтернативы, когда важна точность.
Комментарии (2)