A modern, professional PDF reader and annotator for Windows, built with Tkinter and PyMuPDF. Inspired by Adobe Photoshop, with a dark theme, responsive UI, annotation tools, and form fill support.
- Dark, modern UI (Photoshop-inspired)
- Sidebar with page thumbnails (active page highlighted with page number badges)
- Main PDF display with zoom, fit, and rotation
- Keyboard scrolling: Up/Down arrows for vertical scrolling, Ctrl+Left/Right for horizontal scrolling
- Session restore: Automatically remembers last opened PDF and page position
- Default PDF association: Can be set as default PDF reader for Windows
- Toolbar with annotation tools:
- Highlight, Draw, Text Note, Image, Form Fill, Eraser
- Undo/Redo for all annotation actions (Ctrl+Z, Ctrl+Y)
- Keyboard shortcuts for all major actions
- Form fill: text, checkbox, radio, dropdown, list
- Windows auto-startup option
- Build to standalone
.exe
(no Python required) - Professional Windows installer with Inno Setup
- Python 3.8+
- PyMuPDF
- Pillow
- pywin32
- pystray
- requests
- (Tkinter is included with standard Python on Windows)
- Clone this repo
- Install Python 3.8+ (Windows recommended)
- Install PyInstaller (for building .exe):
pip install pyinstaller
- Build the app:
The standalone
python build.py
.exe
will be in the/public/
folder. The/public
folder will contain the built.exe
, an Inno Setup script, and (optionally) the installer. All build and dist folders are inside/public
.
- Install Inno Setup (Download here)
- After running
python build.py
, the installer will be created automatically if Inno Setup is installed. - If Inno Setup is not found, open
/public/installer.iss
in Inno Setup and click "Compile". - The installer (e.g.,
AdvancedPDFReader-Setup-v1.0.0.exe
) will be created in/public
.
- Run
pdfReader.py
(orPDFReader.exe
after build) - Open a PDF, use the toolbar and sidebar to navigate and annotate
- Keyboard scrolling: Use Up/Down arrows to scroll vertically, Ctrl+Left/Right for horizontal scrolling
- Session restore: App automatically opens your last PDF and page when launched
- Default PDF reader: Set as default to open PDFs directly by double-clicking
- Use keyboard shortcuts for fast workflow (see Help > Shortcuts)

MIT License
- Only one
Tk()
root window is ever created. - The splash screen is a
Toplevel
child of the main (hidden) root, or the root itself if you want no flicker. - The main window is hidden (
withdraw()
) until the splash is destroyed, then shown (deiconify()
). - Only one
mainloop()
is called (on the main app). - This ensures no small/empty window flicker and a professional user experience.
- Use
bindtags
to ensure mouse wheel events on thumbnails propagate to the sidebar canvas. - Dynamically set
bindtags
for each thumbnail and the sidebar frame.
- After building, the
/public
folder contains:PDFReader-vX.Y.Z.exe
— The standalone portable executable/public/dist/
— PyInstaller distribution files/public/build/
— PyInstaller build files (can be deleted after distribution)/public/assets/
— Copied assets for the installerinstaller.iss
— Inno Setup scriptAdvancedPDFReader-Setup-vX.Y.Z.exe
— Windows installer (if Inno Setup is installed)
- Use the
/public
folder to distribute your app or upload to GitHub Releases.
- Right-click any PDF file
- Select "Open with" → "Choose another app"
- Select "Advanced PDF Reader"
- Check "Always use this app to open .pdf files"
- Open Windows Settings (
Windows + I
) - Go to "Apps" → "Default apps"
- Scroll down and click "Choose default apps by file type"
- Find ".pdf" and select "Advanced PDF Reader"
For questions or contributions, contact [email protected] or visit github.com/needyamin.