PDF Toolkit Pro is a production-style Python desktop application for common PDF workflows. It uses a modern CustomTkinter interface and keeps all PDF business logic in testable core modules.
- Merge multiple PDFs with ordering controls and safe auto-renamed output files.
- Preview PDF pages inside the app before editing or exporting.
- Fast PDF viewer with fit-to-page/fit-width zoom, rotation, page cache, adjacent-page preloading, and text search navigation.
- Split PDFs by every page, custom ranges, or every N pages.
- Extract selected pages into a new PDF.
- Delete selected pages from a new copy without changing the original PDF.
- Extract text to
.txtwith preview, page labels, and optional page ranges. - View basic PDF metadata including encryption status.
- Best-effort PDF compression using
pypdf. - Recent files stored in
data/recent_files.json. - Settings stored in
data/settings.json. - Activity log shown in the app and written to
data/app.log. - Background operations with progress feedback and disabled action buttons.
- Pytest coverage for parsing, validation, safe filenames, and PDF operations.
- PyInstaller-ready Windows build with a custom application icon.
Add screenshots here after launching the app:
- Dashboard
- Merge PDFs
- Extract Text preview
- Metadata viewer
- Python 3.11+
- CustomTkinter
- pypdf
- PyMuPDF and Pillow for in-app page previews
- pathlib and shutil
- tkinter filedialog/messagebox
- json
- logging
- pytest
- PyInstaller
git clone https://github.com/mertey19/pdfmanager.git
cd pdfmanager
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txtpython -m app.mainYou can also run:
python app\main.py- Open the app and choose a tool from the sidebar or dashboard.
- Select PDF files with the built-in file dialogs.
- Choose an output folder.
- Enter an output name when the tool supports it.
- Start the operation and watch the progress/status area.
- Review the activity log for output paths, processed files, page counts, and errors.
Page ranges use 1-based page numbers:
1-3, 5, 8-10
The app converts these internally to 0-based indexes for pypdf.
pdf-toolkit-pro/
app/
main.py
gui/
main_window.py
sidebar.py
pdf_viewer_view.py
merge_view.py
split_view.py
extract_pages_view.py
delete_pages_view.py
extract_text_view.py
metadata_view.py
recent_files_view.py
settings_view.py
components.py
core/
pdf_merger.py
pdf_splitter.py
page_extractor.py
page_deleter.py
text_extractor.py
metadata_reader.py
page_range_parser.py
pdf_renderer.py
services/
file_service.py
settings_service.py
recent_files_service.py
log_service.py
utils/
safe_filename.py
validators.py
formatters.py
threading_utils.py
exceptions/
pdf_toolkit_exception.py
tests/
data/
assets/
README.md
requirements.txt
build_exe.md
Additional files include app/core/pdf_compressor.py, app/core/pdf_writer_utils.py, and app/core/result.py for compression, safe writes, and operation summaries.
- Original PDFs are never deleted or modified.
- Existing output files are never overwritten silently.
- Output names auto-increment, for example
merged.pdf,merged (1).pdf,merged (2).pdf. - PDF writes go through temporary files before final output creation.
- Invalid, corrupted, missing, encrypted, or password-protected PDFs produce user-facing errors.
- Delete Pages always creates a new PDF and asks for confirmation.
- The app rejects invalid page ranges, reversed ranges, page zero, negative pages, and out-of-bounds pages.
python -m pytest -qTests generate temporary PDFs and do not depend on user files. Current coverage includes the page range parser, safe filenames, validators, core PDF operations, and PDF viewer rendering/search behavior.
See build_exe.md for a PyInstaller workflow.
- Drag-and-drop support.
- OCR for scanned PDFs.
- PDF compression with external tools.
- PDF password unlock if the user provides the password.
- PDF preview thumbnails.
- Batch operations.
- Cloud sync.
- Multi-language UI.