Skip to content

mertey19/pdfmanager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PDF Toolkit Pro

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.

Features

  • 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 .txt with 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.

Screenshots

Add screenshots here after launching the app:

  • Dashboard
  • Merge PDFs
  • Extract Text preview
  • Metadata viewer

Tech Stack

  • Python 3.11+
  • CustomTkinter
  • pypdf
  • PyMuPDF and Pillow for in-app page previews
  • pathlib and shutil
  • tkinter filedialog/messagebox
  • json
  • logging
  • pytest
  • PyInstaller

Installation

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.txt

How To Run

python -m app.main

You can also run:

python app\main.py

Usage Guide

  1. Open the app and choose a tool from the sidebar or dashboard.
  2. Select PDF files with the built-in file dialogs.
  3. Choose an output folder.
  4. Enter an output name when the tool supports it.
  5. Start the operation and watch the progress/status area.
  6. 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.

Folder Structure

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.

Safety Notes

  • 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.

Testing

python -m pytest -q

Tests 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.

Build .exe

See build_exe.md for a PyInstaller workflow.

Future Improvements

  • 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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages