Skip to content

Repository files navigation

bpdf — Быстрая и легкая утилита для работы с PDF и документами

Версия Rust Платформа Language

bpdf — это консольный инструмент (CLI) на языке Rust для комплексной обработки PDF-файлов, изображений, текстовых документов и файлов Microsoft Office (Word, Excel, PowerPoint). Утилита ориентирована на высокую скорость, минимальный размер, надежность операций (атомарная запись) и гибкую автоматизацию (поддержка NDJSON, списков файлов и переменных окружения).


Возможности

  • Объединение (Merge): Склеивание PDF, обычных изображений, комиксов (CBZ), JPEG 2000/JPEG-LS/JPEG XR, HEIC/AVIF/PSD, RAW-снимков камер, электронных книг (EPUB, FB2, FB2.ZIP, HTMLZ), документов Word/Excel/PowerPoint/OpenDocument и текстовых файлов в единый PDF или текстовый файл.
  • Многостраничные изображения и комиксы: Все страницы TIFF, архивы CBZ (с естественной сортировкой страниц) и все кадры GIF/APNG/анимированного WebP становятся отдельными страницами PDF при merge.
  • Распознавание текста (OCR) и создание Searchable PDF: Извлечение текста со сканов, картинок и PDF в Markdown или создание PDF с невидимым текстовым слоем (-o searchable.pdf) через облачный Groq Vision (Qwen / Llama) или нативный локальный Windows Media OCR (без API-ключей и интернета).
  • Оглавление и закладки (Bookmarks): Автоматическое построение дерева закладок PDF Outlines при объединении файлов (merge --bookmarks).
  • Умное кеширование OCR: Content-addressed кеш на диске (SHA-256 хэш изображения + модель/движок + промпт). Повторные вызовы и параллельные потоки выполняются мгновенно без обращения к сети.
  • Поддержка сетевых прокси: Работа через HTTP и SOCKS5 прокси для обхода блокировок или корпоративных ограничений.
  • Печати и штампы: Наложение прозрачных PNG-изображений с точной позиционировкой (br, center, координаты в мм), настройкой масштаба, прозрачности и выбором слоя (over, under, auto).
  • Форматирование и приведение страниц: Приведение к стандартам A4/Letter, центрирование содержимого, единая ориентация по большинству страниц и сохранение исходных размеров страниц PDF (none/original/keep).
  • Очистка метаданных (Strip): Удаление EXIF-метаданных из JPEG/PNG без перекодирования пикселей, очистка метаданных PDF Info / XMP и конвертация внешних FFmpeg-форматов и RAW-снимков в чистое JPEG.
  • Редактирование PDF: Разбиение на страницы (split), извлечение диапазонов (extract), поворот (rotate), изменение размера (resize), оптимизация структуры и изображений по DPI (optimize).
  • Безопасное изменение in-place: Возможность перезаписи исходных файлов при явном указании флага -o для модификаторов PDF и --force для convert.
  • Метаданные PDF Info: Просмотр (metadata show) и редактирование (metadata set) полей Title, Author, Subject, Keywords, Creator.
  • Диагностика (doctor): Проверка конфигурации, доступности внешних утилит (ffmpeg, powershell, MS Office) и проверка API Groq без расхода лимитов OCR.
  • Автоматизация и Total Commander: Полная оптимизация для работы с Total Commander (готовая панель кнопок bpdf.bar, встроенные иконки под каждое действие, поддержка списков файлов @"%UL" и %P%N). Поддержка тихих пакетных скриптов (--quiet), потокового вывода NDJSON (--json), шаблонов (globs *.jpg), естественной сортировки (scan_1.jpg, scan_2.jpg, scan_10.jpg) и файловых манифестов (@list.txt).

Требования и внешние зависимости

  • ОС: Windows 10 / 11 (x64) или Linux / macOS.
  • Внешние форматы изображений: Для HEIC/HEIF, AVIF, PSD, JPEG 2000/JPEG-LS, DDS, EXR, HDR, QOI, TGA, PCX, PNM, SGI, XBM, DPX, FITS и других редких растров требуется установленный ffmpeg в системном PATH либо параметр --ffmpeg C:\path\to\ffmpeg.exe. Фактический набор декодеров зависит от сборки FFmpeg.
  • Системные форматы Windows: JPEG XR/HD Photo (.jxr, .wdp, .hdp) и ICO декодируются через встроенные кодеки Windows Imaging Component.
  • RAW-снимки камер: По умолчанию снимки .cr2, .cr3, .nef, .arw, .dng, .raf, .orf, .rw2 и другие мгновенно обрабатываются в Pure Rust путём извлечения полноразмерного встроенного превью от процессора камеры (кроссплатформенно: Windows, Linux, macOS). Полная проявка сенсора через Windows Imaging Component включается опцией raw_develop = true в config.toml (требует Microsoft Raw Image Extension: winget install --id 9NCTDW2W1BH8 -s msstore).
  • Конвертация Office/OpenDocument: Для точного рендеринга DOC/DOCX/RTF/ODT, XLS/XLSX/ODS и PPT/PPTX/PPS/PPSX/ODP в Windows используется MS Office через COM-автоматизацию. Если MS Office не установлен или запуск на Linux/macOS, автоматически срабатывает встроенный Pure-Rust fallback, который извлекает форматированный текст и заглавия из XML-структур документов без сторонних зависимостей.
  • Groq Vision OCR: Groq API Key требуется только для распознавания изображений; извлечение готового текстового слоя PDF работает без ключа. Ключ задаётся в config.toml, в том числе через %GROQ_API_KEY%.

Сборка и установка

Сборка через Cargo

cargo build --release
cargo test --all-targets

Сборка чистая и не требует сторонних C/C++ компиляторов.

Готовая сборка под Windows (релизный скрипт)

Для создания оптимизированного EXE со встроенными ресурсами Windows (иконка, манифест длинных путей, версии):

.\build.bat

Скрипт выполнит:

  1. Подготовку и проверку многослойной иконки (16x16 – 256x256 px; готовые ресурсы переиспользуются).
  2. Считывание версии из Cargo.toml.
  3. Компиляцию манифеста, версии и иконки через rc.exe (Windows SDK).
  4. Оптимизированную сборку cargo build --release --locked.
  5. Упаковку бинарного файла, файла конфигурации и документации в директорию dist.

Глобальные флаги

Глобальные ключи могут передаваться перед любой подкомандой:

  • --config <PATH> — Путь к файлу конфигурации (по умолчанию ищется config.toml в текущем каталоге или рядом с bpdf.exe).
  • --quiet — Тихий режим. Подавляет вывод прогресса и информационных сообщений (конфликтует с --json).
  • --json — Потоковый режим вывода NDJSON (выводит события и результаты в формате JSON, по одному объекту на строку).
  • --fail-fast — Остановить пакетную команду после первой ошибки. Без этого флага остальные файлы обрабатываются, выводится итоговая сводка, а при наличии ошибок процесс завершается с ненулевым кодом.
  • -h, --help — Вывести справочную информацию.
  • -V, --version — Вывести версию программы.

Команды и параметры

1. bpdf merge

Объединяет PDF-файлы, изображения, документы Office и текстовые файлы в один документ.

bpdf merge <INPUTS>... [OPTIONS]

Параметры:

  • <INPUTS>... — Список входных файлов, папок, масок (*.jpg), диапазонов (doc.pdf:1-5) или файлов-списков (@list.txt). (Обязательный).
  • -o, --out <PATH> — Путь к выходному файлу. Если не указан, имя генерируется автоматически (например, document_merged.pdf).
  • -s, --size <SIZE> — Размер страницы PDF. Значения: A4, Letter, либо none/original/keep, чтобы не менять размеры страниц входных PDF.
  • --auto-rotate[=true|false] — Поворачивать страницы к ориентации большинства страниц документа. При равенстве используется ориентация первой страницы; без ключа действует значение auto_rotate из конфигурации.
  • --no-rotate — Не поворачивать страницы и сохранять книжную или альбомную ориентацию каждой страницы даже при приведении к A4/Letter. Переопределяет auto_rotate из конфигурации и не может использоваться одновременно с --auto-rotate.
  • --stamp <PATH> — Путь к PNG-изображению для наложения штампа/печати.
  • --stamp-pos <POS> — Позиция штампа: br (bottom-right), bl, tr, tl, c (center), tc, bc, l, r или смещение X,Y в миллиметрах от правого нижнего угла (для отрицательных значений используйте --stamp-pos="-X,Y").
  • --stamp-dpi <DPI> — Физическое разрешение штампа в DPI (автоматически считывается из PNG-файла, если сохранено сканером/Photoshop; по умолчанию 96.0).
  • --stamp-scale <SCALE> — Множитель масштаба штампа (по умолчанию 1.0 при известном/указанном DPI; 0.0 — автоподбор до 25% страницы).
  • --stamp-op <OPACITY> — Прозрачность штампа от 0.0 (прозрачный) до 1.0 (непрозрачный).
  • --stamp-pages <PAGES> — Страницы для штампа (all, first, last, 1-5, even, odd).
  • --stamp-mode <MODE> — Режим наложения штампа: auto (под текст, если есть шрифты), over (поверх содержимого), under (под содержимым).
  • --stamp-blend <MODE> — Режим наложения цвета (normal, multiply, screen, overlay и др.; multiply для реалистичных чернил).
  • --keep-icc[=true|false] — Сохранять цветовые профили ICC у изображений (по умолчанию false для уменьшения размера).
  • --optimize[=true|false] — Оптимизировать структуру PDF и уменьшать слишком большие встроенные изображения до image_dpi из конфигурации; JPEG кодируется с jpeg_quality.
  • --strip-meta[=true|false] — Удалять метаданные из итогового документа.
  • --bookmarks[=true|false] — Создавать оглавление/закладки (PDF Outlines) для каждого объединяемого файла.
  • --author <STRING> — Указать имя автора в свойствах PDF.
  • --creator <STRING> — Указать программу-создателя в свойствах PDF.
  • --ffmpeg <PATH> — Путь к FFmpeg для внешних форматов изображений и резервного декодирования.

2. bpdf ocr

Распознает текст с документов и изображений с помощью облачного Groq Vision OCR или встроенного локального Windows Media OCR. При сохранении в .pdf автоматически создаёт Searchable (Sandwich) PDF с невидимым текстовым слоем поверх сканов.

bpdf ocr <INPUTS>... [OPTIONS]

Параметры:

  • <INPUTS>... — Входные файлы (JPG, PNG, PDF, RAW и др., включая диапазоны страниц для PDF: doc.pdf:1-5), папки или маски. (Обязательный).
  • -o, --out <PATH> — Путь к итоговому файлу:
    • Если расширение .pdf (например -o searchable.pdf) — создаётся Searchable PDF с текстовым слоем.
    • Если расширение .md или путь не указан — создаются Markdown-файлы с распознанным текстом.
  • --in-place — Встроить распознанный текстовый слой (Searchable PDF) прямо в исходный PDF-файл на месте (перезаписывает файл, конфликтует с -o/--out, применимо только к PDF).
  • --engine <ENGINE> — Движок распознавания: groq, windows (или winocr), auto.
  • --lang <LANG> — Языковой тег для Windows OCR (например, ru, en-US).
  • --proxy <URL> — Прокси-сервер (http://... или socks5://...).
  • --model <NAME> — Модель Groq Vision (по умолчанию qwen/qwen3.6-27b).
  • --prompt <TEXT> — Кастомный текстовый промпт для модели.
  • --endpoint <URL> — URL конечной точки Groq API.
  • --force-ocr — Принудительно выполнять OCR через нейросеть, даже если у PDF есть извлекаемый текстовый слой.
  • --jobs <NUM> — Количество параллельных потоков OCR (от 1 до 64, по умолчанию 2).
  • --no-cache — Отключить дисковый кеш OCR.
  • --cache-dir <PATH> — Путь к каталогу кеша OCR.
  • --ffmpeg <PATH> — Путь к FFmpeg для внешних форматов изображений и резервного декодирования.

3. bpdf split

Разбивает многостраничный PDF на отдельные одностраничные PDF-файлы.

bpdf split <INPUT> [OUTPUT_DIR]

Параметры:

  • <INPUT> — Исходный PDF-файл.
  • [OUTPUT_DIR] — Директория для сохранения страниц. По умолчанию — папка исходного файла.

4. bpdf extract

Извлекает указанные страницы из PDF в новый PDF-файл.

bpdf extract <INPUT> <PAGES> [OUTPUT]

Параметры:

  • <INPUT> — Исходный PDF-файл.
  • <PAGES> — Диапазон страниц (например: 1-5,8, first, last, even, odd).
  • [OUTPUT] — Имя нового файла (по умолчанию doc_extracted.pdf). Не может совпадать с исходным файлом.

5. bpdf inspect

Показывает диагностическую информацию о PDF (версия, количество страниц, шрифты, изображения).

bpdf inspect <INPUT> [--text]

Параметры:

  • <INPUT> — Исходный PDF-файл.
  • --text — Дополнительно извлечь и выдать текстовый слой.

6. bpdf strip

Удаляет метаданные из JPEG, PNG и PDF (in-place по умолчанию). Неподдерживаемые форматы автоматически пропускаются без ошибки.

bpdf strip <INPUTS>... [OPTIONS]

Параметры:

  • <INPUTS>... — Файлы или папки для очистки (JPEG, PNG, PDF; остальные пропускаются).
  • -o, --out <PATH> — Выходной файл или папка (допустимо только при одном входном файле). Если -o не указан, очистка выполняется in-place.
  • --keep-icc[=true|false] — Сохранять цветовой профиль ICC.
  • --ffmpeg <PATH> — Путь к FFmpeg для резервного декодирования.

7. bpdf rotate

Поворачивает страницы PDF или изображения JPEG на угол, кратный 90 градусам, либо приводит их к указанной ориентации (portrait или landscape). Неподдерживаемые форматы в папках пропускаются.

bpdf rotate <INPUTS>... <DEGREES> [-p <PAGES>] [-o <OUT>]
bpdf rotate <INPUTS>... --orient <landscape|portrait> [-p <PAGES>] [-o <OUT>]

Параметры:

  • <INPUTS>... — Исходные PDF-файлы или картинки JPEG.
  • <DEGREES> — Угол поворота по часовой стрелке в градусах (90, 180, 270, -90 и т.д., обязателен, если не указан --orient).
  • --orient <MODE> — Целевая ориентация (portrait или landscape, конфликтует с <DEGREES>).
  • -p, --pages <PAGES> — Страницы для поворота (по умолчанию all, применимо только к PDF).
  • -o, --out <PATH> — Выходной файл или папка (перезапись на месте по умолчанию, если не указано).

8. bpdf resize

Масштабирует и центрирует страницы PDF на листе формата A4 или Letter, либо изменяет размер изображений JPEG по --long-edge / --short-edge / формату листа. Неподдерживаемые форматы в папках пропускаются.

bpdf resize <INPUTS>... [-s <SIZE>] [--long-edge <PX>] [--short-edge <PX>] [-o <OUT>]

Параметры:

  • <INPUTS>... — Исходные PDF-файлы или картинки JPEG.
  • -s, --size <SIZE> — Целевой формат страницы PDF (A4 или Letter, по умолчанию A4).
  • --long-edge <PX> — Изменить размер картинки так, чтобы длинная сторона была не больше указанного значения в пикселях.
  • --short-edge <PX> — Изменить размер картинки так, чтобы короткая сторона была не меньше указанного значения в пикселях.
  • -p, --pages <PAGES> — Выбранные страницы PDF (по умолчанию all).
  • -o, --out <PATH> — Выходной файл или папка (перезапись на месте по умолчанию).

9. bpdf text

Быстро извлекает текстовый слой из PDF без использования сторонних сервисов и сети.

bpdf text <INPUT> [-o <OUT>]

Параметры:

  • <INPUT> — Исходный PDF-файл.
  • -o, --out <PATH> — Сохранить результат в файл вместо вывода в стандартный поток (stdout).

10. bpdf stamp

Накладывает прозрачный PNG-штамп на существующий PDF-документ.

bpdf stamp <INPUT> <STAMP> [OPTIONS]

Параметры:

  • <INPUT> — Исходный PDF-файл.
  • <STAMP> — Путь к PNG-файлу штампа.
  • -o, --out <PATH> — Выходной PDF (укажите -o input.pdf для перезаписи на месте).
  • --position <POS> — Позиционирование: br, bl, tr, tl, c, tc, bc, l, r или смещение X,Y в мм от правого нижнего угла (для отрицательных значений используйте --position="-X,Y").
  • --dpi <DPI> — Физическое разрешение штампа в DPI (автоматически считывается из PNG-файла, если сохранено сканером/Photoshop; по умолчанию 96.0).
  • --scale <SCALE> — Множитель масштаба (по умолчанию 1.0 при известном/указанном DPI; 0.0 — автоподбор до 25% страницы).
  • --opacity <OPACITY> — Прозрачность от 0.0 до 1.0 (по умолчанию 1.0).
  • --pages <PAGES> — Диапазон страниц (по умолчанию all).
  • --mode <MODE> — Режим слоев (auto, over, under).
  • --blend <MODE> — Режим наложения цвета (normal, multiply, screen, overlay и др.; multiply идеален для реалистичных печатей поверх документов).

Примеры:

# Наложение печати на последнюю страницу в левый нижний угол с реалистичным смешиванием чернил
bpdf stamp "Доверенность.pdf" "stamp.png" --position="-130,30" --mode over --blend multiply --pages last -o "Доверенность_с_печатью.pdf"

# Наложение штампа на все страницы поверх документов из 1C/Word (не перекрывая черный текст)
bpdf stamp invoice.pdf stamp.png --position br --blend multiply -o invoice.pdf

11. bpdf optimize

Выполняет структурную оптимизацию PDF (удаление мусорных объектов, сжатие потоков) и уменьшает встроенные растровые изображения до разрешения image_dpi из конфигурации относительно размера страницы. Для merge и optimize используется один расчёт размера. JPEG перекодируется с качеством jpeg_quality; значение image_dpi: 0 отключает уменьшение картинок, но оставляет структурную оптимизацию.

bpdf optimize <INPUT> [-o <OUT>]

Параметры:

  • <INPUT> — Исходный PDF-файл.
  • -o, --out <PATH> — Выходной файл (укажите -o input.pdf для изменения на месте).

12. bpdf metadata

Управление метаданными PDF Info (Title, Author, Subject, Keywords, Creator).

Просмотр метаданных (metadata show):

bpdf metadata show <INPUT>

Изменение метаданных (metadata set):

bpdf metadata set <INPUT> [OPTIONS]
  • -o, --out <PATH> — Выходной файл (укажите -o input.pdf для изменения на месте).
  • --title <STRING> — Название документа.
  • --author <STRING> — Автор.
  • --subject <STRING> — Тема.
  • --keywords <STRING> — Ключевые слова.
  • --creator <STRING> — Программа-создатель.

13. bpdf convert

Конвертирует изображения (включая многостраничные TIFF, JPEG 2000/JPEG-LS/JPEG XR/ICO и редкие FFmpeg-форматы) в JPEG. Многостраничные TIFF-документы автоматически распаковываются на отдельные JPEG-файлы для каждой страницы. Для анимаций (GIF, WebP) берется только первый кадр.

При передаче PDF-файлов команда по умолчанию извлекает оригинальные встроенные растровые изображения (идеально для сканов). Если PDF содержит текстовый слой (текстовые документы), программа автоматически переключается на нативный Windows-рендер и преобразует каждую страницу в JPEG-изображение.

bpdf convert <INPUTS>... [OPTIONS]

Параметры:

  • <INPUTS>... — Исходные изображения или PDF-файлы (включая диапазоны страниц для PDF: doc.pdf:1-5).
  • -o, --out <PATH> — Директория назначения для сохранённых JPEG-файлов.
  • --render — Для PDF: принудительно рендерить страницы в JPEG вместо извлечения встроенных картинок (полезно для принудительного рендера сканов).
  • --long-edge <PX> — Максимальный размер длинной стороны изображения.
  • --short-edge <PX> — Минимальный размер короткой стороны изображения.
  • --orient <MODE> — Принудительная ориентация (landscape или portrait).
  • -q, --quality <0-100> — Качество JPEG (переопределяет глобальный конфиг).
  • --keep-icc[=true|false] — Сохранять цветовые профили ICC.
  • --ffmpeg <PATH> — Путь к FFmpeg для внешних форматов изображений и резервного декодирования.
  • --force — Разрешить замену уже существующих выходных файлов, включая конвертацию на месте. Коллизии, при которых два входных файла дают один выходной путь, запрещены даже с --force.

14. bpdf doctor

Проверяет окружение, валидность конфигурации, доступность утилит, декодеров RAW (Pure Rust / WIC) и ключей API.

bpdf doctor

Проверка API Groq выполняется безопасным запросом списка моделей без отправки изображений и списания OCR-лимитов. Ключи API и учетные данные в выводе маскируются.


Форматы входа и селекторы страниц

Форматы изображений

  • Встроенный Rust-декодер используется для JPEG, PNG, BMP, GIF, TIFF, WebP и APNG. Для BMP/GIF/TIFF/WebP/APNG при ошибке встроенного декодера автоматически пробуется FFmpeg.
  • Через FFmpeg обрабатываются HEIC/HEIF, AVIF, PSD, JPEG 2000 (.jp2, .j2k, .j2c, .jpc, .jpf, .jpx), JPEG-LS (.jls), DDS, EXR, HDR, QOI, TGA, PCX, PNM (.pnm, .ppm, .pgm, .pbm, .pam), SGI, XBM, DPX, FITS (.fits, .fit, .fts), PGX, Sun Raster, XWD и PIX. Берётся первый видеопоток и первый кадр.
  • Через встроенные кодеки Windows Imaging Component обрабатываются JPEG XR/HD Photo (.jxr, .wdp, .hdp) и ICO. Для ICO выбирается изображение с наибольшим разрешением.
  • Снимки фотокамер .3fr, .arw, .bay, .cr2, .cr3, .crw, .dcr, .dng, .erf, .fff, .gpr, .iiq, .k25, .kdc, .mef, .mos, .mrw, .nef, .nrw, .orf, .pef, .raf, .raw, .rw2, .rwl, .sr2, .srf, .srw и .x3f по умолчанию декодируются в Pure Rust без внешних утилит и кодеков через извлечение полноразмерного аппаратного JPEG-превью камеры. При необходимости полной проявки сенсора на Windows через WIC используется опция raw_develop = true в config.toml.
  • При merge все логические страницы TIFF и все кадры GIF/APNG/анимированного WebP добавляются в PDF по порядку. Ограничение безопасности — не более 10 000 кадров из одного файла. convert, ocr и strip работают с одним основным кадром.
  • JPEG XL не заявлен как поддерживаемый: декодер JXL отсутствует во многих сборках FFmpeg.

Электронные книги и текстовые форматы

  • Электронные книги: .epub, .fb2, .fb2.zip (распаковка архивов, автоизвлечение структуры глав, заголовков и метаданных Title/Author при конвертации в PDF).
  • Word: .doc, .docx, .rtf, .odt.
  • Excel: .xls, .xlsx, .ods.
  • PowerPoint: .ppt, .pptx, .pps, .ppsx, .odp.
  • Текст: .md, .txt, .json, .jsonc, .xml, .yaml, .yml, .log, .ini, .cfg, .csv, .tsv, а также любые другие текстовые файлы и файлы исходного кода (.rs, .py, .c, .cpp, .js, .sql, LICENSE, .env и т.д.), автоопределяемые по содержимому (эвристика валидации UTF-8 / ASCII).
  • Если все входы текстовые, по умолчанию они объединяются как текст. Явный выход -o result.pdf включает рендеринг текста в PDF.

Синтаксис диапазонов страниц

В командах extract, rotate, resize, stamp, а также непосредственно во входных путях для merge поддерживается следующий синтаксис:

  • all — все страницы;
  • first — первая страница;
  • last (или l) — последняя страница;
  • even — четные страницы (2, 4, 6...);
  • odd — нечетные страницы (1, 3, 5...);
  • 1-5,8,last — комбинация одиночных страниц и диапазонов.

Указание страниц прямо во входе (Input Spec)

При объединении документов можно выбирать конкретные страницы отдельного PDF прямо в командной строке:

bpdf merge scan.jpg report.pdf:1-3,last notes.txt -o result.pdf

Списки файлов (Манифесты @list.txt)

Вы можете передавать текстовые файлы со списком входов, предваряя путь символом @:

bpdf merge @files.txt -o output.pdf

Формат файла files.txt:

# Комментарии игнорируются
C:\docs\cover.jpg
C:\docs\report.pdf:1-10
C:\docs\appendix.pdf:even

Шаблоны (Globs) и директории

Утилита автоматически расширяет маски файлов (*.png, scans/*.pdf) и сортирует файлы по естественному алфавитно-цифровому порядку (Natural Sort: page1.jpg, page2.jpg, page10.jpg). При передаче каталога обрабатываются только файлы непосредственно в нём; вложенные каталоги автоматически не обходятся.

Интеграция с Total Commander

Утилита bpdf полностью адаптирована для удобной работы в Total Commander:

  • Готовая панель кнопок (bpdf.bar): Файл панели входит в поставку/дистрибутив и содержит предустановленные кнопки для всех ключевых операций (объединение, OCR, разделение, извлечение страниц, штампы, очистка метаданных).
  • Списки выделенных файлов: Полная совместимость с параметром списка файлов Total Commander @"%UL" (передача списка выделенных файлов в UTF-8 без ограничений на длину командной строки) и одиночными файлами %P%N.
  • Встроенные иконки: Исполняемый файл bpdf.exe содержит отдельные многослойные иконки для каждого действия на панели кнопок.

Правила перезаписи файлов (In-place)

Во избежание случайной потери данных утилита придерживается следующих правил:

  1. PDF-модификаторы (rotate, resize, optimize, stamp, metadata set): Чтобы перезаписать исходный файл на месте, требуется явно передать его путь через флаг -o (например: bpdf rotate doc.pdf 90 -o doc.pdf). Без -o создается новый файл с суффиксом (например, doc_rotated.pdf).
  2. Очистка метаданных (strip): По умолчанию работает in-place (на месте), если не передан флаг -o.
  3. Конвертация (convert): Любая замена существующего файла, включая исходник (например, bpdf convert photo.jpg), требует --force. Если несколько входов дают одинаковый выходной путь, команда завершится ошибкой, чтобы не потерять ранее созданный результат.
  4. Команда extract: Категорически запрещает перезапись исходного PDF.

Конфигурация (config.toml)

Параметры по умолчанию можно настроить в файле config.toml. Файл ищется в следующей последовательности:

  1. Путь из флага --config <PATH>;
  2. config.toml в текущем рабочем каталоге;
  3. config.toml в папке с исполняемым файлом bpdf.exe.

Пример файла конфигурации

# API Ключ Groq для OCR
groq_api_key = "%GROQ_API_KEY%"

# Прокси-сервер (HTTP или SOCKS5)
proxy = ""
# proxy = "socks5://127.0.0.1:10808"

# Метаданные по умолчанию
author = "My Company"
creator = "bpdf toolkit"

# Параметры обработки PDF
auto_rotate = false
keep_icc = false
optimize = false
strip_metadata = false
bookmarks = false
page_size = "A4"
jpeg_quality = 95 # качество JPEG при merge и optimize
image_dpi = 150   # целевой DPI при merge и optimize; 0 отключает уменьшение
raw_develop = false # false = быстрое Pure-Rust превью, true = полная проявка WIC

# Настройки OCR
ocr_engine = "groq" # "groq" (облачный Vision), "windows" (локальный WinOCR) или "auto"
ocr_model = "qwen/qwen3.6-27b"
# ocr_prompt = '''Extract all text exactly as it appears...'''
ocr_endpoint = "https://api.groq.com/openai/v1/chat/completions"
ocr_jobs = 1
ocr_cache = true
# ocr_cache_dir = 'D:\cache\bpdf-ocr'
ocr_timeout_seconds = 120
ocr_max_tokens = 4096

# Пути к сторонним утилитам
# FFmpeg нужен для HEIC/HEIF, AVIF, PSD, JPEG 2000 и других внешних форматов
ffmpeg = 'ffmpeg'
powershell = 'powershell.exe'
# font_path = '%WINDIR%\Fonts\arial.ttf'
office_timeout_seconds = 120

Полный образец с комментариями и всеми необязательными полями находится в config.example.toml.

В файле конфигурации поддерживаются подстановки переменных окружения в формате %ИМЯ_ПЕРЕМЕННОЙ% (например, %GROQ_API_KEY% или %WINDIR%), а также стандартные комментарии #. Для путей в Windows рекомендуется использовать одинарные кавычки '...' во избежание экранирования обратных слэшей.


Примеры использования

# Объединение изображений, отсканированного PDF и заметок в единый PDF
bpdf merge scan.jpg invoice.pdf:1-3 notes.txt -o result.pdf

# Объединение всех картинок из папки с приведением к A4 и автоповоротом
bpdf merge *.jpg -s A4 --auto-rotate --optimize -o scans.pdf

# Объединение с сохранением исходной ориентации каждой страницы
bpdf merge *.pdf -s A4 --no-rotate -o mixed.pdf

# Наложение печати на документ в правый нижний угол с прозрачностью 60%
bpdf merge invoice.pdf --stamp seal.png --stamp-pos br --stamp-op 0.6 -o stamped.pdf

# Наложение печати с точным позиционированием (отступ 150 мм влево от правого нижнего угла)
bpdf merge invoice.pdf --stamp seal.png --stamp-pos="-150,0" -o stamped.pdf

# Распознавание текста со скана через Groq Vision в Markdown
bpdf ocr scan.jpg -o scan.md

# Параллельное распознавание файлов с использованием прокси и кастомной модели
bpdf ocr *.jpg --jobs 4 --proxy socks5://127.0.0.1:10808 --model qwen/qwen3.6-27b

# Конвертация AVIF и PSD в JPEG через FFmpeg
bpdf convert photo.avif design.psd --out converted

# Конвертация JPEG 2000, JPEG-LS, JPEG XR и ICO в JPEG
bpdf convert scan.jp2 medical.jls photo.jxr icon.ico --out converted

# Конвертация RAW-снимков фотоаппаратов в JPEG (быстрое превью без кодеков)
bpdf convert photo.cr3 photo.nef photo.arw --out converted

# Все страницы TIFF и кадры анимации становятся страницами PDF
bpdf merge multipage.tiff animation.apng animation.webp -o pages.pdf

# PowerPoint и OpenDocument в PDF
bpdf merge slides.pptx report.odt table.ods -o office.pdf

# Конвертация электронных книг (EPUB, FB2, FB2.ZIP) в PDF
bpdf merge book.epub -o book.pdf
bpdf merge story.fb2.zip -o story.pdf

# JSON/XML/YAML как текстовый PDF
bpdf merge data.json settings.xml config.yaml -o data.pdf

# Наложение печати поверх документа с реалистичным смешиванием чернил (multiply)
bpdf stamp document.pdf stamp.png --position="-130,30" --mode over --blend multiply

# Очистка EXIF метаданных у всех фото в папке на месте (in-place)
bpdf strip photos/*.jpg

# Разбиение PDF на отдельные страницы
bpdf split document.pdf output_pages/

# Извлечение первых 5 страниц и последней страницы
bpdf extract document.pdf 1-5,last selected.pdf

# Поворот всех четных страниц PDF на 90 градусов на месте
bpdf rotate document.pdf 90 --pages even -o document.pdf

# Приведение страниц PDF к формату Letter
bpdf resize document.pdf --size Letter -o document_letter.pdf

# Извлечение встроенного текстового слоя в файл
bpdf text document.pdf -o text_layer.txt

# Установка свойств документа PDF
bpdf metadata set document.pdf --title "Отчет 2026" --author "Иван Иванов" -o document.pdf

# Извлечение картинки/конвертация изображений в JPEG
bpdf convert photo.png document.pdf -o converted_jpegs/

# Проверка работоспособности системы и интеграций
bpdf doctor

# Интеграция со скриптами в режиме NDJSON
bpdf --json merge *.jpg -o result.pdf

About

Быстрая и легкая CLI-утилита на Rust для работы с PDF, изображениями, RAW и офисными документами (объединение, OCR, печати, оптимизация), адаптированная для работы с Total Commander

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages