qpdf

Проект qpdf (Jay Berkenbilt и Manfred Holger) · лицензия Apache-2.0

Склеивает и режет PDF, поворачивает страницы, ставит и снимает пароль. Содержимое страниц сохраняет, текст и картинки остаются в файле.

macOS · Windows · LinuxНа компьютере, на сервере и в контейнереБесплатно, Apache-2.0

✓ Проверено 07.10.2026: Ubuntu 24.04.5 (x86_64) в одноразовом контейнере Docker на сервере: qpdf 12.4.2 из готовых файлов выпуска на GitHub, для сравнения пакет qpdf 11.9.0 из apt. Что именно проверяли

Установить агентом ↓

Какую задачу решает

Склеивает и режет PDF, поворачивает страницы, ставит и снимает пароль. Сайт проекта описывает qpdf как программу, которая меняет устройство PDF и сохраняет содержимое страниц. Текст из PDF она не достаёт и страницы в картинки не переводит, так написано в README.

  • Собирает один PDF из нескольких файлов или из выбранных страниц: например, договор целиком и вторую страницу приложения.
  • Разрезает PDF на отдельные страницы или на куски по нескольку страниц (--split-pages).
  • Поворачивает нужные страницы на 90, 180 или 270 градусов (--rotate).
  • Ставит на файл пароль с шифрованием AES-256 и снимает пароль, если он известен (--encrypt, --decrypt).
  • Проверяет устройство файла (--check) и отвечает кодом выхода, зашифрован ли PDF (--is-encrypted) и нужен ли пароль, чтобы его открыть (--requires-password).

Пример результата

Говоришь агенту

В папке docs лежат contract.pdf и appendix.pdf. Собери из всего договора и второй страницы приложения один файл package.pdf, поверни в нём последнюю страницу на 90 градусов и сделай копию package-locked.pdf с паролем на открытие. Пароль я запишу в файл pw.txt.

Что получится

Рядом появятся package.pdf и package-locked.pdf. Агент назовёт число страниц и покажет итог qpdf --check, а для копии с паролем покажет ответ qpdf --requires-password: код 0 значит, что без пароля файл не открыть. Этот же порядок шагов мы прогнали на тестовых файлах: в копии с паролем последняя страница была повёрнута на 90 градусов, а контрольные суммы исходных файлов после работы не изменились.

Паспорт

Кто делает
Проект qpdf (Jay Berkenbilt и Manfred Holger)
Исходный код
github.com/qpdf/qpdf
Инструкция
qpdf.readthedocs.io/en/stable
Лицензия
Apache-2.0
Версия
12.4.2 на 07.10.2026
Системы
macOS · Windows · Linux
Где работает
На компьютере, на сервере и в контейнере
Цена
Бесплатно
Проверка
Проверено 07.10

Установить агентом

Для Claude Code, Codex, Hermes и любого агента с терминалом
Установи программу «qpdf». Работай по шагам и после каждого коротко говори, что сделал.

Что это за программа (каталог smyslokod.ru, официальные источники сверены 07.10.2026):
- официальный сайт: https://qpdf.sourceforge.io/
- исходный код: https://github.com/qpdf/qpdf
- инструкция по установке: https://qpdf.readthedocs.io/en/stable/
- актуальная версия на 07.10.2026: 12.4.2
- лицензия: Apache-2.0
- для работы нужно (в отдельных случаях): Homebrew - на Mac qpdf ставится через него
- для работы нужно (в отдельных случаях): unzip - распаковать готовые файлы выпуска для Linux так, чтобы ссылка на библиотеку libqpdf внутри архива осталась ссылкой

Правила:
1. Ничего не устанавливай и не меняй, пока я не скажу «да» на твой план.
2. Ставь только способами из этого промпта. Сторонние сборки, скрипты с форумов и из чужих репозиториев не бери.
3. Мои проекты не трогай: не меняй их файлы, виртуальные окружения и списки зависимостей (package.json, requirements.txt, pyproject.toml).
4. Команды с sudo, правку профиля оболочки (~/.zshrc, ~/.bashrc) и переменной PATH делай только после моего отдельного «да» на каждую.
5. Не проси у меня пароли и ключи и не выводи их. Если нужен пароль администратора, дай команду, я выполню её сам.
6. Исходные PDF не перезаписывай: результат сохраняй рядом под новым именем. Ключ --replace-input используй только с моего «да».
7. Пароль не проси в чат и не пиши в команду: попроси меня записать его в файл и передавай через --password-file или @файл. Для шифрования бери --bits=256.
8. Снимай защиту только с файлов, пароль от которых дал я сам. Ключ --remove-restrictions без моего разрешения не трогай. Если я разрешу, сначала предупреди, что подписи станут недействительными.
9. После работы прогони qpdf --check по новому файлу и назови мне число страниц (qpdf --show-npages).

Шаги:
0. Определи, где ты работаешь: мой компьютер, сервер или контейнер. Какая система и процессор, какие менеджеры пакетов есть (Homebrew, apt, winget, uv, pipx). Ставить нужно туда, где ты сам запускаешь команды.
   - на компьютере: на Mac проще поставить через Homebrew, на Linux пакетом дистрибутива, на Windows через winget.
   - на сервере: окно программе не нужно. В нашем прогоне вся задача со склейкой, разрезкой, поворотом, паролем и проверками шла меньше 3 секунд и не открыла ни одного сетевого соединения.
   - в контейнере: мы проверяли в контейнере Ubuntu 24.04. Для готовых файлов с GitHub нужен unzip: распаковка модулем zipfile из Python ломает ссылку на библиотеку внутри архива.
1. Проверь, не стоит ли программа уже: qpdf --version ; which -a qpdf. Если стоит и запускается, ничего не ставь и переходи к шагу 5.
2. Обязательных зависимостей у программы нет, то, что нужно в отдельных случаях, перечислено выше. Проверь свободное место на диске: нужно Готовые файлы 12.4.2 для Linux x86_64 после распаковки заняли 11 МБ, архив весит 4 040 257 байт. Пакеты apt в Ubuntu 24.04 по данным dpkg занимают 254 КБ (qpdf) и 2411 КБ (libqpdf29t64). Сколько займёт установка через Homebrew, мы не мерили..
3. Составь план: каким одним способом из списка ниже будешь ставить, что появится на диске и сколько места займёт, что поменяется в системе и как потом удалить. Покажи план и жди моего «да».
   Способы из официальных источников:
   - macOS, Homebrew: brew install qpdf (ставит текущую версию из формулы, на 07.10.2026 это 12.4.2, вместе с jpeg-turbo и openssl@3. На Mac мы не проверяли)
   - Windows, winget: winget install -e --id QPDF.QPDF (ставит установщик qpdf-12.4.2-msvc64.exe из выпуска на GitHub по манифесту winget для всех пользователей компьютера. Попадёт ли команда qpdf в PATH, мы не знаем: на Windows мы её не ставили)
   - Linux, apt: sudo apt-get update && sudo apt-get -y install qpdf (Debian и Ubuntu. Ставит версию из репозитория дистрибутива: в Ubuntu 24.04 это 11.9.0, в нашем прогоне встало два пакета, qpdf и libqpdf29t64)
   - Linux, готовые файлы с GitHub: curl -LO https://github.com/qpdf/qpdf/releases/download/v12.4.2/qpdf-12.4.2-bin-linux-x86_64.zip && mkdir -p ~/.local/opt/qpdf-12.4.2 && unzip -q qpdf-12.4.2-bin-linux-x86_64.zip -d ~/.local/opt/qpdf-12.4.2 (так мы ставили в прогоне, для x86_64 (для ARM есть bin-linux-aarch64.zip). Команда лежит в ~/.local/opt/qpdf-12.4.2/bin/qpdf, её вызывают полным путём или добавляют папку bin в PATH. Проект пишет, что этот архив не рассчитан на конечного пользователя и сделан для минимальных сред вроде контейнера Docker. Для последней версии на своём компьютере проект предлагает AppImage. Сверить архив можно по файлу qpdf-12.4.2.sha256 из того же выпуска)
4. Установи по согласованному плану. Если что-то идёт не так, как в плане, остановись и спроси.
5. Проверь результат:
   - qpdf --version: программа запускается без ошибки;
   - Сделай два PDF на 3 и 2 страницы с известными подписями на страницах. Склей все страницы первого и вторую страницу второго: в результате должно быть 4 страницы, подписи в нужном порядке. Разрежь результат на страницы, поверни вторую на 90 градусов и прочитай поворот через --json. Зашифруй файл AES-256 и убедись, что без пароля он не открывается. Потом сними пароль и сверь подписи страниц с исходными. Прогони qpdf --check по всем результатам. Повтори сценарий из примера: склейка, поворот последней страницы, копия с паролем, и сверь контрольные суммы исходников. Делай это во временной папке и не трогай мои файлы.
     qpdf --version
     qpdf --check a.pdf
     qpdf --empty --pages a.pdf b.pdf 2 -- merged.pdf
     qpdf --split-pages merged.pdf split/page-%d.pdf
     qpdf merged.pdf --rotate=+90:2 rotated.pdf
     qpdf merged.pdf @enc.args locked.pdf
     qpdf --is-encrypted locked.pdf
     qpdf --requires-password --password-file=user.pw locked.pdf
     qpdf --password-file=user.pw --decrypt locked.pdf unlocked.pdf
     qpdf --linearize --replace-input web.pdf
     qpdf package.pdf --replace-input --rotate=+90:z
   - если ты работаешь в папке моего проекта, покажи git status: от установки в проекте не должно появиться изменений.
6. Итог одним сообщением: что установлено, какой версии и куда, сколько места заняло, что поменялось в системе и как всё удалить (macOS, Homebrew: brew uninstall qpdf; Windows, winget: winget uninstall -e --id QPDF.QPDF; Linux, apt: sudo apt-get remove qpdf; Linux, готовые файлы с GitHub: rm -rf ~/.local/opt/qpdf-12.4.2).

Если на любом шаге ошибка, не чини наугад: покажи текст ошибки и скажи, что, по-твоему, случилось. Частые проблемы: https://smyslokod.ru/cli/qpdf#problemy

Промпт собран из официальных инструкций, сверенных 07.10.2026. Агент сначала проверит, что уже стоит, покажет план с местом на диске и способом удаления и без твоего «да» ничего не поставит.

Как ставят вручную

Способы из официальных источников, у каждого ссылка на первоисточник.

  • macOS · Homebrew · источник

    brew install qpdf

    ставит текущую версию из формулы, на 07.10.2026 это 12.4.2, вместе с jpeg-turbo и openssl@3. На Mac мы не проверяли

  • Windows · winget · источник

    winget install -e --id QPDF.QPDF

    ставит установщик qpdf-12.4.2-msvc64.exe из выпуска на GitHub по манифесту winget для всех пользователей компьютера. Попадёт ли команда qpdf в PATH, мы не знаем: на Windows мы её не ставили

  • Linux · apt · источник

    sudo apt-get update && sudo apt-get -y install qpdf

    Debian и Ubuntu. Ставит версию из репозитория дистрибутива: в Ubuntu 24.04 это 11.9.0, в нашем прогоне встало два пакета, qpdf и libqpdf29t64

  • Linux · готовые файлы с GitHub · источник

    curl -LO https://github.com/qpdf/qpdf/releases/download/v12.4.2/qpdf-12.4.2-bin-linux-x86_64.zip && mkdir -p ~/.local/opt/qpdf-12.4.2 && unzip -q qpdf-12.4.2-bin-linux-x86_64.zip -d ~/.local/opt/qpdf-12.4.2

    так мы ставили в прогоне, для x86_64 (для ARM есть bin-linux-aarch64.zip). Команда лежит в ~/.local/opt/qpdf-12.4.2/bin/qpdf, её вызывают полным путём или добавляют папку bin в PATH. Проект пишет, что этот архив не рассчитан на конечного пользователя и сделан для минимальных сред вроде контейнера Docker. Для последней версии на своём компьютере проект предлагает AppImage. Сверить архив можно по файлу qpdf-12.4.2.sha256 из того же выпуска

Как удалить

  • macOS, Homebrew: brew uninstall qpdf
  • Windows, winget: winget uninstall -e --id QPDF.QPDF
  • Linux, apt: sudo apt-get remove qpdf
  • Linux, готовые файлы с GitHub: rm -rf ~/.local/opt/qpdf-12.4.2

Что нужно для работы

  • Homebrew (в отдельных случаях) - на Mac qpdf ставится через него
  • unzip (в отдельных случаях) - распаковать готовые файлы выпуска для Linux так, чтобы ссылка на библиотеку libqpdf внутри архива осталась ссылкой

Системы

  • macOS - ставится через Homebrew. С 12.4.2 у выпуска есть и готовые файлы для Mac на Apple silicon и Intel, они не подписаны Apple, и README объясняет, как снять с них карантин. Сами мы на Mac qpdf не ставили и не запускали.
  • Windows - через winget ставится установщик выпуска для 64-битной Windows, сами мы его не запускали.
  • Linux - по словам сайта проекта, пакет qpdf есть в большинстве дистрибутивов, но версия бывает старше: в Ubuntu 24.04 это 11.9.0. Свежую версию дают готовые файлы выпуска на GitHub.

Где запускать

Ставить нужно туда, где работает агент: на твой компьютер, сервер или в контейнер.

  • На компьютере - на Mac проще поставить через Homebrew, на Linux пакетом дистрибутива, на Windows через winget.
  • На сервере - окно программе не нужно. В нашем прогоне вся задача со склейкой, разрезкой, поворотом, паролем и проверками шла меньше 3 секунд и не открыла ни одного сетевого соединения.
  • В контейнере - мы проверяли в контейнере Ubuntu 24.04. Для готовых файлов с GitHub нужен unzip: распаковка модулем zipfile из Python ломает ссылку на библиотеку внутри архива.

Сколько ресурсов нужно

Место на диске
Готовые файлы 12.4.2 для Linux x86_64 после распаковки заняли 11 МБ, архив весит 4 040 257 байт. Пакеты apt в Ubuntu 24.04 по данным dpkg занимают 254 КБ (qpdf) и 2411 КБ (libqpdf29t64). Сколько займёт установка через Homebrew, мы не мерили.
Видеокарта
В нашем прогоне видеокарта не понадобилась.
Сеть
Нужна только при установке. В прогоне apt ходил к archive.ubuntu.com и security.ubuntu.com, а ещё к deb.nodesource.com: этот источник Node.js заранее прописан в образе нашей песочницы, qpdf он не нужен. Архив выпуска скачивался с github.com, оттуда загрузка переадресуется на release-assets.githubusercontent.com. Во время задачи qpdf не открыла ни одного сетевого соединения, это записано в прогоне.

На маленьких тестовых файлах вся задача заняла меньше 3 секунд. Описание выпуска 12.4.2 говорит, что линеаризация для части файлов стала заметно экономнее по памяти.

Лицензия и платные замены

Лицензия Apache-2.0. Свободная лицензия Apache License 2.0, так написано на сайте и в README. По README версии до 7-й выходили под Artistic License 2.0, и проект разрешает по желанию считать qpdf лицензированной и на этих условиях. Текст лицензии

Цена: Бесплатно

Платные замены

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

Бесплатные замены

  • Poppler - Набор консольных программ под GPL: pdfseparate и pdfunite режут и склеивают PDF, pdftotext достаёт текст, pdftoppm сохраняет страницы картинками.
  • Ghostscript - Консольная программа под AGPL-3.0-or-later, Artifex продаёт её и по коммерческой лицензии. Сжимает PDF, переводит страницы в картинки и склеивает файлы.

О чём помнить

  • Безопасность. Агент запускает qpdf в терминале сам (exec). Программа читает те PDF, которые агент ей передал (read), и пишет новый файл по пути, который задаёт агент, в любую папку, куда у пользователя есть право записи (write). Файл с тем же именем она перезаписывает без вопроса, в прогоне так и вышло. Заменить файл (acts) qpdf может при ключе --replace-input: по документации она пишет результат во временный файл рядом и ставит его на место исходного, при предупреждениях старый файл остаётся рядом с окончанием .~qpdf-orig. Входа в аккаунты и ключей qpdf не просит, в сеть во время работы в нашем прогоне не ходила.
  • Документация предлагает передавать пароль из файла, чтобы не писать его в команде: --password-file для открытия и @файл для аргументов шифрования. Так мы и делали в прогоне. Ещё одно место, где виден пароль: qpdf --show-encryption в нашем прогоне напечатал пароль на открытие, с которым файл открыли.
  • В прогоне мы сняли шифрование с файла, передав известный пароль через --password-file. Документация отдельно пишет, что --decrypt не предназначен для обхода ограничений, которые поставил автор файла. Ключ --remove-restrictions, по документации, делает электронные подписи в файле недействительными и отключает их.
  • По документации 40-битное шифрование и 128-битное без AES небезопасны, нужен --bits=256. Одинаковые пароли на открытие и для владельца или пустой пароль владельца документация тоже называет небезопасными.
  • Команды brew, apt и winget без номера версии ставят ту, что сейчас в их каталоге. Мы проверили 12.4.2, а в Ubuntu 24.04 apt ставит 11.9.0. Если стоят обе, which -a qpdf покажет, какая вызывается первой, а qpdf --version назовёт её версию.
  • Общие коды выхода при обработке PDF, по документации: 0 - ни ошибок, ни предупреждений, 2 - найдены ошибки и файл не обработан, 3 - есть предупреждения без ошибок. При коде 3 предупреждения стоит прочитать. У проверок --is-encrypted и --requires-password коды свои: например, --requires-password с верным паролем отвечает 3, и это не предупреждение.

Частые проблемы

qpdf: error while loading shared libraries: .../lib/libqpdf.so.30: file too short

Архив готовых файлов для Linux распаковали модулем zipfile из Python или другой программой, которая не сохраняет ссылки: libqpdf.so.30 внутри архива - ссылка на libqpdf.so.30.4.2, а после такой распаковки на её месте оказался обычный файл. Так вышло в нашей первой попытке. Удали папку и распакуй архив заново командой unzip, она сохраняет ссылки.

qpdf: файл.pdf: invalid password, код выхода 2

На файле стоит пароль на открытие, а его не передали или передали неверный. Так отвечала qpdf в прогоне при попытке открыть файл без пароля. Проверь, нужен ли пароль: qpdf --requires-password файл.pdf вернёт 0, если без пароля файл не открыть, и 2, если файл не зашифрован. Затем передай пароль через --password-file.

qpdf --version показывает 11.9.0 или другую старую версию, хотя ставили 12.4.2

Стоят две копии: пакет дистрибутива в /usr/bin и готовые файлы в ~/.local/opt, и первой в PATH стоит старая. Посмотри which -a qpdf и вызывай нужную копию полным путём. Правку PATH агент делает только с твоего «да».

Проверка

✓ Проверено 07.10.2026: Ubuntu 24.04.5 (x86_64) в одноразовом контейнере Docker на сервере: qpdf 12.4.2 из готовых файлов выпуска на GitHub, для сравнения пакет qpdf 11.9.0 из apt.

Когда
07.10.2026
Среда
Ubuntu 24.04.5 (x86_64) в одноразовом контейнере Docker на сервере: qpdf 12.4.2 из готовых файлов выпуска на GitHub, для сравнения пакет qpdf 11.9.0 из apt
Объём
Установили и прогнали задачу на тестовых данных
Что именно сделали
  1. Одноразовый контейнер Ubuntu 24.04.5 без данных и ключей. Поставили пакет qpdf из apt: встало два пакета, qpdf 11.9.0 и библиотека libqpdf29t64.
  2. Скачали с GitHub архив qpdf-12.4.2-bin-linux-x86_64.zip (4 040 257 байт), сверили его контрольную сумму с файлом qpdf-12.4.2.sha256 из выпуска и распаковали командой unzip в ~/.local/opt/qpdf-12.4.2. Папка заняла 11 МБ, qpdf --version вывел «qpdf version 12.4.2».
  3. Скрипт прогона сам собрал два тестовых PDF: на 3 и на 2 страницы, на каждой странице подпись вроде «DOC-A page 1». qpdf --check прошёл без ошибок.
  4. Склеили все страницы первого файла и вторую страницу второго. В результате 4 страницы, подписи идут в нужном порядке.
  5. Разрезали результат на 4 отдельных файла. Повернули вторую страницу на 90 градусов, поворот по страницам прочитали через qpdf --json: 0, 90, 0, 0.
  6. Зашифровали файл AES-256, пароли передали из файла, а не в строке команды. Без пароля qpdf файл не открыла (invalid password, код 2), --requires-password ответил 0 без пароля и 3 с верным паролем.
  7. Сняли пароль ключом --decrypt, передав его из файла. Новый файл не зашифрован, подписи страниц совпали с исходными. qpdf --check прошёл по всем результатам.
  8. Линеаризовали копию на месте через --replace-input, проверка линеаризации ошибок не нашла. Запись в уже существующий файл qpdf сделала без вопроса и заменила его.
  9. Повторили сценарий из примера карточки: склеили весь первый файл и вторую страницу второго, повернули последнюю страницу на 90 градусов и сделали копию с паролем. В копии 4 страницы, поворот 0, 0, 0, 90, без пароля она не открывается, контрольные суммы исходных файлов не изменились.
  10. Каждый результат скрипт сверил сам и только после этого напечатал TASK_OK. Вся задача с проверками заняла меньше 3 секунд.
  11. Склейку и пароль повторили пакетом apt 11.9.0, результат тот же.
  12. Сетевые соединения записаны по этапам. apt ходил к archive.ubuntu.com и security.ubuntu.com, а ещё к deb.nodesource.com: этот источник Node.js уже был прописан в образе песочницы, к qpdf он отношения не имеет. Архив скачивался с github.com и release-assets.githubusercontent.com. Во время задачи qpdf не открыла ни одного соединения.
  13. Папку с готовыми файлами удалили, пакет apt убрали командой apt-get remove qpdf. Контейнер удалён.
ДатаВерсияОбъёмГдеИтог
07.10.202612.4.2задачаконтейнер, Linuxполучилось
07.10.202612.4.2задачаконтейнер, Linuxполучилось

«Проверено» ставим, только когда сами поставили программу и прогнали её на задаче. Сверка ссылок и вывод версии так не называются.

Программу делают её авторы. Мы сверяем официальные источники и описываем, что ей нужно, но код остаётся чужим. Перед установкой посмотри план агента: что он поставит и что поменяет в системе.