Пакетное преобразование файлов DOCX в PDF с помощью LibreOffice CLI

Если у вас есть папка с файлами Word, LibreOffice может преобразовать их одной командой. Из папки, содержащей файлы DOCX, создайте пустую выходную папку и запустите команду libreoffice --headless --convert-to pdf:writer_pdf_Export --outdir pdf *.docx. При этом будет использован фильтр экспорта в PDF в Writer, а оригиналы останутся на месте.

Используйте чистую папку для сохранения результатов, убедитесь, что LibreOffice установлен, и проверьте полученные PDF-файлы, а не рассматривайте успешное завершение команды как доказательство того, что каждая страница выглядит правильно. Командная строка — это практичный инструмент для пакетной обработки; она не гарантирует идентичную нумерацию страниц, как в Microsoft Word, и не восстанавливает поврежденные документы.

Выполните простое пакетное преобразование

В Linux откройте терминал в каталоге, содержащем файлы. Сначала создайте выходной каталог:

mkdir -p pdf
libreoffice --headless --convert-to pdf:writer_pdf_Export --outdir pdf *.docx

--headlessЗапускается без открытия обычного окна рабочего стола. --convert-toВыбирает PDF в качестве целевого формата; writer_pdf_Exportзадает имя фильтра экспорта PDF в LibreOffice Writer; и --outdir pdfотправляет результаты в pdfпапку. Оболочка расширяется *.docxдо соответствующих файлов перед запуском LibreOffice. LibreOffice описывает этот синтаксис преобразования и имя фильтра в своем справочнике параметров командной строки и списке фильтров преобразования файлов .

В терминале Linux отображается команда пакетного файла LibreOffice, преобразующая файлы DOCX в PDF и отображающая список полученных PDF-файлов.
Пример вывода терминала после отправки небольшой партии файлов DOCX в LibreOffice с использованием фильтра экспорта PDF в Writer.

Выберите правильный шаблон партии

Использование подстановочного знака в команде лучше всего подходит, когда все файлы DOCX находятся непосредственно в одной входной папке. Она не выполняет поиск в дочерних папках. В Linux шаблон по умолчанию чувствителен к регистру, поэтому *.docxможет пропускать файлы, заканчивающиеся на .DOCX. Если оболочка сообщает, что шаблон не совпал, выведите список файлов и проверьте их расширения, прежде чем изменять команду.

Для документов, вложенных в подпапки, цикл может сохранить структуру каталогов и избежать конфликтов, когда две папки содержат файл с одинаковым именем. Установите значение inputдля исходного дерева и pdfдля отдельного целевого дерева:

input="$PWD/input"
output="$PWD/pdf"
profile="file:///tmp/lo-batch-profile"

find "$input" -type f -iname '*.docx' -print0 |
while IFS= read -r -d '' file; do
  rel="${file#"$input"/}"
  dest="$output/$(dirname "$rel")"
  mkdir -p "$dest"
  libreoffice --headless \
    -env:UserInstallation="$profile" \
    --convert-to pdf:writer_pdf_Export \
    --outdir "$dest" "$file"
done

-print0Функция сопоставления read -d ''безопасно обрабатывает пробелы и большинство необычных символов в именах файлов. Отдельный профиль предотвращает конкуренцию этого пакетного задания с сеансом LibreOffice на настольном компьютере, использующим тот же пользовательский профиль; см. справочные документы запуска LibreOffice -env:UserInstallation. Используйте уникальный путь к профилю, если одновременно могут выполняться два задания преобразования. Размещайте дерево выходных данных вне дерева входных данных, чтобы поиск не отклонялся от предыдущих результатов.

В терминале Linux отображается цикл поиска, отправляющий документы из вложенных папок в соответствующие папки для вывода PDF-файлов.
Пример рекурсивного цикла поиска, записывающего PDF-файлы в подпапку pdf рядом с каждой исходной папкой, что позволяет разделять файлы с одинаковыми именами в разных папках.

Когда LibreOffice уже открыт

Команда может завершиться без создания файлов или подключиться к существующему процессу LibreOffice. В запущенном экземпляре рабочего стола может использоваться профиль пользователя по умолчанию. Закройте LibreOffice и повторите попытку; для задач, выполняемых в автоматическом режиме, -env:UserInstallationполезной мерой предосторожности является опция изоляции в рекурсивном примере. Для каждой параллельно выполняемой задачи назначьте отдельный каталог профиля и дождитесь завершения одной задачи, прежде чем повторно использовать этот каталог.

Если команда выдает ошибку libreoffice: command not found, установите LibreOffice через поддерживаемый вашей операционной системой источник пакетов или используйте полный путь к исполняемому файлу. В Windows PowerShell простой нерекурсивный пакетный файл можно написать следующим образом:

$src = (Resolve-Path .).Path
$out = Join-Path $src 'pdf'
New-Item -ItemType Directory -Force -Path $out | Out-Null
$soffice = "$env:ProgramFiles\LibreOffice\program\soffice.exe"
Get-ChildItem -File -Filter *.docx | ForEach-Object {
  & $soffice --headless --convert-to pdf:writer_pdf_Export --outdir $out $_.FullName
}

Если LibreOffice установлен в другом месте, внесите необходимые изменения $soffice. Запустите команду из исходной папки и используйте новую папку для вывода. PowerShell Get-ChildItem -Fileвыполняет поиск только в этой папке, если не запрошена рекурсия; для рекурсивных заданий необходим цикл, создающий соответствующую папку назначения для каждого пути к исходному файлу.

Что может повлиять на результат?

Преобразование в PDF сохраняет структуру, которую может интерпретировать LibreOffice, но Word и LibreOffice не всегда одинаково нумеруют страницы документов. Отсутствие шрифтов, неподдерживаемые встроенные объекты, отслеживаемые изменения, поля или сложные таблицы могут смещать переносы строк и количество страниц. Для обеспечения единообразия типографики установите необходимые для документов шрифты перед преобразованием. Защищенные или зашифрованные паролем файлы, возможно, потребуется открывать с учетными данными или обрабатывать вручную, а поврежденный файл DOCX может сам по себе завершиться с ошибкой, даже если другие файлы будут преобразованы.

Не запускайте пакетную обработку повторно в папку, содержащую ценные PDF-файлы с совпадающими именами. Используйте чистое место назначения или сначала сделайте резервную копию существующих результатов. Если какой-либо файл особенно важен, откройте его в LibreOffice Writer и проверьте его, прежде чем полагаться на PDF-файл. Если точная нумерация страниц Microsoft Word является обязательным требованием, LibreOffice может не подойти; сравните с репрезентативным образцом в приложении, определяющем требуемую структуру.

В терминале Linux отображается работа LibreOffice в безголовом режиме с отдельным профилем UserInstallation перед экспортом в PDF.
Пример команды, использующей отдельный профиль пользователя LibreOffice для автоматического выполнения преобразования.

Перед тем как делиться результатом, проверьте его.

Сначала сравните количество исходных файлов с количеством PDF-файлов. В Linux эти команды подсчитывают количество файлов в папке с плоским содержимым:

find . -maxdepth 1 -type f -iname '*.docx' | wc -l
find pdf -maxdepth 1 -type f -iname '*.pdf' | wc -l

Для рекурсивного преобразования сравните количество совпадений по всем входным и выходным деревьям. Совпадение количества совпадений — это полезная проверка, а не гарантия качества: поврежденный документ или перезаписанный дубликат все равно могут потребовать проверки. Проверьте журнал терминала на наличие ошибок и убедитесь, что каждое ожидаемое имя файла присутствует в целевом файле.

Проверьте репрезентативные PDF-файлы в программе для просмотра PDF-файлов. Проверьте первую и последнюю страницы, количество страниц, поля, таблицы, верхние и нижние колонтитулы, изображения и любые важные разрывы страниц. Если pdfinfoпрограмма установлена, pdfinfo pdf/Report.pdfона предоставляет метаданные, такие как количество страниц и размер страницы; она не оценивает визуальное качество. Повторно конвертируйте файлы только после исправления конкретной проблемы, например, установки отсутствующего шрифта или изменения выходного каталога, а затем снова просмотрите затронутые PDF-файлы.

В терминале Linux отображается вывод команды pdfinfo с указанием количества страниц, размера страницы и размера файла для преобразованного PDF-файла.
Пример окна проверки, отображающего метаданные PDF-файла, такие как количество страниц и размер бумаги.

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

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

Создавайте заполняемые PDF-файлы из форм в LibreOffice Writer.

Создавайте заполняемые PDF-файлы из форм в LibreOffice Writer.

Добавьте в Writer функциональные текстовые поля, флажки и выпадающие списки, а затем экспортируйте PDF-файл, который получатели смогут заполнить и сохранить.

При создании PDF-файлов LibreOffice сохраняйте использованные шрифты.

При создании PDF-файлов LibreOffice сохраняйте использованные шрифты.

Исправьте отсутствующие или замененные шрифты в PDF-файлах LibreOffice Writer, выберите правильный профиль экспорта и проверьте, какие шрифты внедрены, прежде чем делиться файлом.

Пакетное преобразование файлов DOCX в PDF с помощью LibreOffice CLI

Пакетное преобразование файлов DOCX в PDF с помощью LibreOffice CLI

Преобразуйте папку с документами Word в PDF с помощью команд LibreOffice, безопасно работайте с вложенными папками и проверяйте результат перед отправкой.

Сделайте так, чтобы каждый новый документ Writer использовал ваш шаблон.

Сделайте так, чтобы каждый новый документ Writer использовал ваш шаблон.

Установите пользовательский шаблон LibreOffice Writer в качестве шаблона по умолчанию, чтобы новые документы открывались с предпочитаемыми вами стилями и макетом страницы.

Научите LibreOffice распознавать вашу среду выполнения Java.

Научите LibreOffice распознавать вашу среду выполнения Java.

Установите совместимую среду выполнения Java, включите ее в LibreOffice и устраните неполадки, связанные с пустым списком JRE, не изменяя несвязанные настройки.

Запустите LibreOffice в безголовом режиме в Docker для преобразования PDF-файлов.

Запустите LibreOffice в безголовом режиме в Docker для преобразования PDF-файлов.

Создайте небольшой контейнер LibreOffice, конвертируйте офисные документы без графического интерфейса и проверяйте вывод PDF-файлов, ограничивая при этом доступ к файлам на хосте.

Уменьшите размер файлов LibreOffice Impress без размытия изображений.

Уменьшите размер файлов LibreOffice Impress без размытия изображений.

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

Предотвращение обрезки изображений нестандартного размера при печати в LibreOffice

Предотвращение обрезки изображений нестандартного размера при печати в LibreOffice

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

Ускорьте работу макросов Calc, считывая и записывая данные пакетами.

Ускорьте работу макросов Calc, считывая и записывая данные пакетами.

Замените многократный доступ к ячейкам на массовое чтение и запись диапазонов, затем оцените результаты и защитите формулы в больших рабочих книгах Calc.

Организация книги LibreOffice с помощью связанных мастер-документов.

Организация книги LibreOffice с помощью связанных мастер-документов.

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