PDFeditor
PDFeditor — Редактор и компрессор PDF
📋 Описание проекта
PDFeditor — это мощное приложение с графическим интерфейсом для сжатия PDF-документов. Программа позволяет значительно уменьшить размер PDF-файлов с минимальными потерями качества, поддерживает пакетную обработку и drag-and-drop интерфейс.
✨ Основной функционал
1. Интенсивное сжатие PDF
- Двухуровневая система сжатия (pypdfium2 + pypdf)
- Конвертация страниц в изображения с оптимальным качеством
- Сжатие потоков контента
- Значительное уменьшение размера файла (до 50-80%)
2. Пакетная обработка
- Добавление множества файлов одновременно
- Обработка всех файлов одной кнопкой
- Отображение прогресса для каждого файла
- Автоматическое сохранение с суффиксом "(сжато)"
3. Drag and Drop
- Перетаскивание файлов в окно программы
- Автоматическое добавление в список
- Фильтрация только PDF файлов
- Визуальная индикация области перетаскивания
4. Управление списком
- Добавление файлов через диалог выбора
- Удаление отдельных файлов из списка
- Очистка всего списка
- Предварительный просмотр списка перед обработкой
5. Визуальные индикаторы
- Эмодзи-статусы для каждого файла
- Прогресс обработки в реальном времени
- Информация о завершении работы
- Отчет об успешно обработанных файлах
🚀 Установка и запуск
🎯 Быстрый старт (Windows)
Проект имеет автоматизированную систему развертывания:
1. Установка (один раз):
setup.bat
Скрипт автоматически:
- Проверит наличие Python 3.8+
- Создаст виртуальное окружение
- Установит все зависимости
2. Запуск:
run.bat
💡 Подсказка: Просто дважды кликните на
setup.batдля первичной установки, затем используйтеrun.batдля запуска.
Требования
- Python 3.8 или выше (указано в
runtime.txt) - Windows / Linux / macOS
Установка зависимостей (альтернативный способ)
- Убедитесь, что Python установлен на вашем компьютере
- Откройте командную строку (терминал) в папке проекта
- Установите необходимые библиотеки:
pip install -r requirements.txt
Файл requirements.txt содержит все необходимые зависимости:
pypdf— базовая библиотека для работы с PDFtkinterdnd2— поддержка drag-and-droppillow— обработка изображенийpypdfium2— продвинутое сжатие PDF
Запуск программы
python pdf_editor.py
📖 Инструкция по использованию
Способ 1: Drag and Drop (перетаскивание)
- Запустите программу
- Перетащите PDF файлы в серую область с надписью "Перетащите PDF файлы сюда…"
- Файлы автоматически добавятся в список
- Нажмите кнопку "Сжать PDF"
Способ 2: Выбор через диалог
- Нажмите кнопку "Выбрать файлы"
- В открывшемся диалоге выберите один или несколько PDF файлов
- Нажмите "Открыть"
- Файлы добавятся в список
- Нажмите кнопку "Сжать PDF"
Управление списком
- Удалить файл: Выберите файл в списке и нажмите "Удалить выбранный"
- Очистить список: Нажмите "Очистить список" для удаления всех файлов
Процесс сжатия
- Кнопка "Сжать PDF" изменится на "Обработка…"
- Каждый файл получит статус:
- ⏳ Ожидает — файл в очереди
- 🔄 Обработка — файл сжимается
- ✅ Готово — файл успешно сжат
- ❌ Ошибка — произошла ошибка
- По завершении появится окно с итоговой статистикой
Сохранение результатов
Сжатые файлы сохраняются автоматически в той же папке, где находится оригинал, с суффиксом "(сжато)":
Оригинал: Документ.pdf
Результат: Документ (сжато).pdf
📁 Структура проекта
PDFeditor/
├── pdf_editor.py # Основной исполняемый файл
├── requirements.txt # Список зависимостей
└── README.md # Данная документация
⚙️ Технические детали компрессии
Метод 1: pypdfium2 (основной)
- Рендеринг каждой страницы в изображение (масштаб 1.5x)
- Конвертация в RGB формат
- Оптимизация изображения
- Создание нового PDF из оптимизированных изображений
- Преимущество: Максимальное сжатие (до 80%)
Метод 2: pypdf (резервный)
- Сжатие потоков контента
- Оптимизация структуры PDF
- Сохранение метаданных
- Преимущество: Быстрая обработка, сохранение качества текста
Автоматический выбор метода
Программа автоматически выбирает лучший доступный метод:
- Пробует pypdfium2 (если установлен)
- При ошибке переключается на pypdf
- Логирует использованный метод в консоль
🔧 Технические характеристики
- Язык программирования: Python 3
- Библиотека GUI: Tkinter + TkinterDnD
- Обработка PDF: pypdf + pypdfium2
- Обработка изображений: Pillow (PIL)
- Многопоточность: Обработка в отдельном потоке (GUI не зависает)
📊 Статусы файлов
| Эмодзи | Статус | Описание |
|---|---|---|
| 📄 | Без статуса | Файл только добавлен |
| ⏳ | Ожидает | Файл в очереди на обработку |
| 🔄 | Обработка | Файл сжимается |
| ✅ | Готово | Файл успешно сжат |
| ❌ | Ошибка | Произошла ошибка при сжатии |
⚠️ Возможные проблемы и решения
Проблема: Ошибка "ModuleNotFoundError: No module named 'tkinterdnd2'"
Решение: Установите зависимости: pip install -r requirements.txt
Проблема: Ошибка при сжатии: "pypdfium2 не найден"
Решение:
pip install pypdfium2
Или программа автоматически переключится на резервный метод
Проблема: Результат сжатия незначительный
Решение:
- PDF уже был сжат
- Файл содержит только текст (минимальное сжатие)
- Используйте pypdfium2 для лучшего результата
Проблема: Долгая обработка больших файлов
Решение:
- Метод pypdfium2 медленнее, но эффективнее
- Для больших файлов (>100 страниц) требуется несколько минут
- Не закрывайте программу во время обработки
Проблема: Ошибка "Permission denied"
Решение:
- Закройте файл в других программах
- Проверьте права на запись в папке
- Запустите программу от имени администратора
💡 Советы по использованию
-
Пакетная обработка: Добавьте сразу все файлы для одновременной обработки
-
Качество сжатия: pypdfium2 дает лучшее сжатие, но медленнее
-
Резервные копии: Программа не удаляет оригиналы, но всё равно делайте резервные копии важных документов
-
Проверка результата: Всегда проверяйте сжатый PDF перед удалением оригинала
-
Текстовые PDF: Для PDF с текстом сжатие будет меньше, чем для PDF со сканами
📈 Примеры сжатия
| Тип документа | Оригинал | Сжато | Процент |
|---|---|---|---|
| Сканы (изображения) | 50 MB | 8 MB | -84% |
| Текст + изображения | 20 MB | 6 MB | -70% |
| Только текст | 5 MB | 3 MB | -40% |
| Презентация | 100 MB | 25 MB | -75% |
Результаты зависят от содержимого и исходного сжатия
🎯 Варианты использования
Пример 1: Сжатие сканов документов
Входные файлы: Паспорт.pdf, Диплом.pdf, Справка.pdf
Результат: Все файлы уменьшены до 10-20% от оригинала
Пример 2: Подготовка к отправке по email
Проблема: Файл 30 MB не принимается почтовым сервером
Решение: Сжатие до 5-8 MB
Пример 3: Архивация документов
Задача: Уменьшить объем архива с 500 MB до 100 MB
Действие: Пакетная обработка всех PDF
🔐 Безопасность
- Программа работает только локально
- Файлы не отправляются в интернет
- Оригиналы не изменяются
- Создаются новые файлы с суффиксом "(сжато)"
📄 Лицензия
Этот проект создан для личного использования.
👤 Автор
Разработано для эффективного сжатия PDF-документов
🛠️ Планы развития
- Настройка уровня сжатия
- Поддержка OCR для сканов
- Объединение нескольких PDF
- Разделение PDF на страницы
- Водяные знаки
- Защита паролем
🙏 Благодарности
- pypdf — за базовую работу с PDF
- pypdfium2 — за мощное сжатие
- TkinterDnD — за drag-and-drop функциональность