Как определить количество страниц в документах odt, doc, docx и других офисных документах из командной строки?

Вопрос или проблема

Найти количество страниц в PDF-документе из командной строки легко:

pdfinfo sample.pdf | grep ^Pages:

… но я не смог найти аналогичный метод для файлов odt и других офисных документов.

Существует ли способ программно определить количество страниц в этих документах?

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

DOCX/PPTX

unzip -p 'sample.docx' docProps/app.xml | grep -oP '(?<=\<Pages\>).*(?=\</Pages\>)'

unzip -p 'sample.pptx' docProps/app.xml | grep -oP '(?<=\<Slides\>).*(?=\</Slides\>)'

Примечание: unzip можно установить с помощью sudo apt-get install unzip.

DOC/PPT

wvSummary sample.doc | grep -oP '(?<=of Pages = )[ A-Za-z0-9]*'

wvSummary sample.ppt | grep -oP '(?<=of Slides = )[ A-Za-z0-9]*'

Примечание: wvSummary (чувствительно к регистру!) является частью пакета wv. Установите его с помощью sudo apt-get install wv.

ODT

unzip -p sample.odt meta.xml | grep -oP '(?<=page-count=")[ A-Za-z0-9]*'

PDF

pdfinfo sample.pdf | grep -oP '(?<=Pages:          )[ A-Za-z0-9]*'

Примечание: pdfinfo является частью poppler-utils и должно быть предустановлено в Ubuntu.

DJVU

djvused -e "n" sample.djvu

Примечание: djvused является частью пакета djvulibre-bin и может быть установлен с помощью sudo apt-get install djvulibre-bin.

Я не нашел способа извлечь информацию из файла odt как это делает pdfinfo, но вы можете создать быстрый скрипт, чтобы использовать pdfinfo с файлами odt, преобразовав каждый файл odt в PDF и позднее удалив преобразованный файл, если вы не собираетесь его использовать:

libreoffice --headless --invisible --convert-to pdf sample.odt
pdfinfo sample.pdf | grep ^Pages:
rm sample.pdf

Надеюсь, это помогло вам.

unzip -p document.odt meta.xml | grep -o 'page-count="[0-9]*"'

Смотрите здесь для получения дополнительной информации.

Ответ или решение

Определение количества страниц в документах различных форматов (ODT, DOC, DOCX и других офисных форматов) с помощью командной строки является актуальной задачей для многих пользователей, особенно в контексте автоматизации и управления документами. Известно, что для PDF-файлов эта задача решается с помощью pdfinfo, но что делать с другими форматами?

Теория

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

Для извлечения информации из ZIP-архивов с помощью командной строки удобно использовать утилиту unzip. В сочетании с инструментами для обработки текста, такими как grep, awk или sed, мы можем выделить и отобразить нужные данные.

Пример

  1. DOCX и PPTX: Эти форматы базируются на структуре Office Open XML, которую можно распаковывать как ZIP-архив. Внутри содержится файл docProps/app.xml, в котором можно найти элемент <Pages> (для DOCX) и <Slides> (для PPTX).

    unzip -p 'sample.docx' docProps/app.xml | grep -oP '(?<=<Pages>).*?(?=</Pages>)'
    unzip -p 'sample.pptx' docProps/app.xml | grep -oP '(?<=<Slides>).*?(?=</Slides>)'
  2. DOC и PPT: Для более старых форматов, таких как DOC и PPT, подход несколько отличается. Инструмент wvSummary, который является частью пакета wv, предоставляет возможность извлечь метаинформацию, включая количество страниц или слайдов.

    wvSummary sample.doc | grep -oP '(?<=of Pages = )[ A-Za-z0-9]*'
    wvSummary sample.ppt | grep -oP '(?<=of Slides = )[ A-Za-z0-9]*'
  3. ODT: Формат ODT, который также является ZIP-архивом, содержит файл meta.xml, где в атрибуте page-count хранится информация о количестве страниц.

    unzip -p sample.odt meta.xml | grep -oP '(?<=page-count=")[0-9]*'

Применение

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

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

Пример Bash-скрипта:

#!/bin/bash

for file in "$@"; do
    case "${file##*.}" in
        docx)
            pages=$(unzip -p "$file" docProps/app.xml | grep -oP '(?<=<Pages>).*?(?=</Pages>)')
            ;;
        doc)
            pages=$(wvSummary "$file" | grep -oP '(?<=of Pages = )[ A-Za-z0-9]*')
            ;;
        odt)
            pages=$(unzip -p "$file" meta.xml | grep -oP '(?<=page-count=")[0-9]*')
            ;;
        pdf)
            pages=$(pdfinfo "$file" | grep -oP '(?<=Pages: )[0-9]+')
            ;;
        djvu)
            pages=$(djvused -e "n" "$file")
            ;;
        *)
            echo "Неизвестный формат файла: $file"
            continue
            ;;
    esac
    echo "Файл: $file, Страниц: $pages"
done

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

Заключение

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

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

Капча загружается...