PDF editor and manager for Windows, macOS and Linux — fast, offline and subscription-free.
Most PDF tools are either paid, browser-based, or require uploading your files to the cloud. PDFApps is different:
- 100% offline — your files never leave your computer
- No subscriptions — free and open source, forever
- All-in-one — split, merge, compress, encrypt, OCR, convert, edit and more in a single app
- Cross-platform — works on Windows, macOS and Linux
- Fast — lazy rendering opens large PDFs instantly
Integrated PDF viewer with continuous scroll and lazy rendering
Visual PDF editor — redact, insert text, images, highlights and notes
All-in-one PDF tools — split, merge, compress, encrypt, OCR and more
| Tool | Description |
|---|---|
| Split | Split the PDF into multiple files by user-defined page ranges |
| Merge | Combine multiple PDFs (drag and drop) into a single output, with free ordering |
| Rotate | Rotate individual pages or the entire document at any angle |
| Extract pages | Export a subset of pages to a new PDF |
| Reorder | Drag-and-drop interface to reorder or remove pages with preview |
| Compress | Reduce file size with three compression levels (extreme / recommended / low) |
| Encrypt | Protect the PDF with a password or remove existing protection |
| Watermark | Overlay a watermark/stamp PDF on pages with opacity and position control |
| OCR | Recognise text in scanned PDFs — supports PT, EN, ES, FR and DE |
| Convert | Convert PDF to images (PNG/JPG with DPI control), Word (DOCX) or plain text (TXT) |
| Edit | Inline visual editor: redact, insert text, image, highlight, notes, forms and edit existing text |
| Info | Show metadata, page count, size and document properties |
- Continuous scroll through all pages (Adobe Acrobat style)
- Lazy rendering — opens instantly; pages rendered in background as they are viewed
- Zoom with Ctrl+scroll or zoom buttons
- Text selection and copy by dragging
- Password-protected PDF support
- Drag & drop file support
- Modern dark/light theme with collapsible sidebar
- Full drag and drop support across all file fields
- Cross-platform: Windows, macOS and Linux
- Installer with automatic OCR engine (Tesseract) detection and installation — Windows
| Platform | How to get it |
|---|---|
| Windows 10/11 64-bit | Download PDFAppsSetup.exe from Releases |
| macOS 10.14+ | Build from source (see below) — Tesseract via brew install tesseract tesseract-lang |
| Linux | Build from source (see below) — Tesseract via sudo apt install tesseract-ocr |
# Clone the repository
git clone https://github.com/nelsonduarte/PDFApps-en.git
cd PDFApps-en
# Create virtual environment
python -m venv venv
# Activate — Windows
venv\Scripts\activate
# Activate — macOS / Linux
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Run
python pdfapps.pyTesseract OCR is required for text recognition:
- Windows: the installer handles this automatically
- macOS:
brew install tesseract tesseract-lang- Linux:
sudo apt install tesseract-ocr tesseract-ocr-por tesseract-ocr-eng
The build process generates three executables in the dist/ folder:
# 1. Main application
python -m PyInstaller --noconfirm pdfapps.spec
# 2. Uninstaller
python -m PyInstaller --noconfirm uninstaller.spec
# 3. Installer (bundles the two above)
python -m PyInstaller --noconfirm installer.spec| File | Description |
|---|---|
dist/PDFApps.exe |
Main application (~78 MB) |
dist/PDFAppsUninstall.exe |
Standalone uninstaller (~11 MB) |
dist/PDFAppsSetup.exe |
Installer for distribution (~99 MB) |
PyInstaller does not cross-compile — the binary must be built on the target platform.
| Component | Technology | Version |
|---|---|---|
| GUI | PySide6 (Qt 6) | 6.10.2 |
| PDF rendering | PyMuPDF (fitz) | 1.27.2 |
| PDF manipulation | pypdf | 6.8.0 |
| OCR | Tesseract + pytesseract | 0.3.13 |
| DOCX export | python-docx | 1.2.0 |
| Image processing | Pillow | 12.1.1 |
| Icons | QtAwesome | 1.4.1 |
| Packaging | PyInstaller | 6.19.0 |
PDFApps/
├── pdfapps.py # Application entry point
├── installer.py # Installer (tkinter UI)
├── uninstaller.py # Uninstaller
├── pdfapps.spec # PyInstaller config — app
├── installer.spec # PyInstaller config — installer
├── uninstaller.spec # PyInstaller config — uninstaller
├── icon.ico # Application icon
├── requirements.txt # Python dependencies
├── app/ # Modular source code
│ ├── constants.py # Colours and design constants
│ ├── styles.py # Qt stylesheet (dark/light theme)
│ ├── utils.py # Shared utilities
│ ├── widgets.py # Reusable widgets (DropFileEdit, etc.)
│ ├── base.py # Base class for tools (BasePage)
│ ├── window.py # Main window (MainWindow)
│ ├── tools/ # PDF manipulation tools
│ │ ├── split.py
│ │ ├── merge.py
│ │ ├── rotate.py
│ │ ├── extract.py
│ │ ├── reorder.py
│ │ ├── compress.py
│ │ ├── encrypt.py
│ │ ├── watermark.py
│ │ ├── convert.py
│ │ ├── info.py
│ │ └── ocr.py
│ ├── viewer/ # Integrated PDF viewer
│ │ ├── canvas.py # Lazy page rendering in background threads (fitz)
│ │ └── panel.py # Viewer panel with controls
│ └── editor/ # Visual PDF editor
│ ├── canvas.py # Edit canvas (PdfEditCanvas)
│ ├── tab.py # Edit tab (TabEditar)
│ └── dialogs.py # Auxiliary dialogs
└── dist/ # Generated executables (after build)
Contributions are welcome! Feel free to open issues or submit pull requests.
If you find PDFApps useful, consider sponsoring the project to help keep it alive and growing.
Be the first Gold sponsor — become one
Be the first Backer — become one
Be the first Supporter — become one
This project is licensed under the MIT License.
