NeoView PDF viewer with rectangular crop/measure tool
Project description
NeoView
NeoView is a free all-in-one desktop PDF viewer for Linux and Windows. It brings together font inspection, measurement, crop/export, annotations, search, bookmarks, thumbnails, and reload in one practical workspace.
It started as a precise crop and measurement tool, and has grown into a practical review app for LaTeX, proofreading, QA, layout checks, and document-inspection workflows where a normal PDF reader is not enough.
Why NeoView
Most free PDF viewers only cover part of the workflow. NeoView is built for the moments where you need more than reading:
- inspect fonts and text details
- measure layout regions precisely
- crop/export selected areas
- annotate and review in place
- search, bookmark, and navigate longer PDFs
- reload changing PDFs without losing your session
Highlights
- Free all-in-one PDF viewer for technical review workflows
- Live PDF reload while external tools rebuild the file
- Multi-tab viewing with per-document session restore
- Text find panel with live results, search navigation, and highlight overlays
- Outline, bookmarks, thumbnails, and page info side panels
- Measurement and rectangular selection tools with pt, pica, and mm readouts
- Crop/export workflow for selected regions as PNG
- Annotation workflows:
- highlight, underline, note
- rectangle, ellipse, text-box, line, arrow, freehand
- on-canvas drawing and properties editing
- export a PDF copy with annotations embedded
- Native PDF annotation visibility in the viewer
- Font inspection for text under the cursor
- PNG export from selections at multiple DPI values
- Keyboard-driven navigation, editing, and selection adjustment
- Automated test coverage for logic and Qt interaction flows
Repo Overview
Main code areas
- src/neoview/ui
Qt main window, viewer widget, dialogs, annotation UI, toolbars, and page rendering. - src/neoview/models
Typed state records for annotations, bookmarks, search results, and per-tab state. - src/neoview/persistence
Sidecar storage for annotations and bookmarks. - src/neoview/utils
Small helpers such as unit formatting. - src/neoview/assets
Packaged icons and app assets. - tests
Fast pytest coverage, includingpytest-qtinteraction tests.
Important entry points
- App entry: src/neoview/app.py
- Main window: src/neoview/ui/main_window.py
- Viewer widget: src/neoview/ui/pdf_view.py
- Legacy shim: pdf_crop_measure.py
- Website page: docs/index.html
Feature Overview
NeoView is designed to reduce tool switching. Instead of opening one app for reading, another for measuring, another for markup, and another for export, it keeps the common PDF review tasks in one place.
Viewing and navigation
- Open one or many PDFs in tabs
- Reuse an already-open tab for the same file
- Page navigation with page combo, PgUp/PgDn, Home/End
- Fit Width, Fit Page, Actual Size, custom zoom, Ctrl+wheel, and pinch zoom
- Rotation controls and fullscreen mode
- Outline panel for PDF table of contents
- Thumbnail panel for quick page jumping
- Page info / document info panel
Search
- Find panel with live typing updates
- Explicit next/previous search navigation
- Highlight overlays for current and visible-page matches
- Search state preserved per tab
- Batched search execution to keep the UI responsive on larger PDFs
Selection and measurement
- Drag to create a selection rectangle
- Resize by handles or keyboard
- Move by drag or keyboard
- Measurements in points, picas, and millimeters
- Copy measurement values to the clipboard
- Export selection as PNG at multiple DPI levels
Annotations
- Create annotations from a selection or directly on the canvas
- Supported types include:
- highlight
- underline
- note
- text-box
- rectangle
- ellipse
- line
- arrow
- freehand
- Annotation list with filtering
- Annotation properties editing
- Delete annotations from the list, keyboard, or context menu
- Export annotated PDF copies
- Read-only viewing of annotations already embedded in the source PDF
Bookmarking and session behavior
- Add custom bookmarks per document
- Rename and delete bookmarks
- Restore last page and zoom per file
- Auto-reload on file changes for LaTeX / Typst / generated PDF workflows
Requirements
- Python 3.10+
- PySide6
- PyMuPDF
Installation
Install from PyPI
pip install neoview
Install from source
python3 -m pip install .
Editable development install
python3 -m pip install -e .[dev]
Recommended local launcher
./run.sh
This bootstraps a virtual environment and launches NeoView.
Running NeoView
Installed command
neoview
neoview /path/to/document.pdf
Module entry
python -m neoview
Legacy shim
python pdf_crop_measure.py
python pdf_crop_measure.py /path/to/document.pdf
Windows
Install via pip
py -m pip install neoview
neoview
Standalone executable
Tagged releases can include a prebuilt neoview.exe from GitHub Releases.
Build the Windows executable yourself
py -m pip install .[dev]
pyinstaller neoview.spec
Output:
dist\neoview.exe
Advanced Usage
Container usage exists for niche reproducible-environment or development scenarios, but it is not a primary installation path for NeoView. Most users should prefer the native Linux install or the Windows executable.
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Ctrl+O |
Open PDF |
Ctrl+Q |
Quit |
Ctrl+F |
Find |
Ctrl+Shift+F |
Toggle search panel |
Ctrl+Shift+O |
Toggle navigation panel |
Ctrl+Shift+T |
Toggle thumbnails panel |
Ctrl+Shift+I |
Toggle page info panel |
Ctrl+D |
Add bookmark |
Ctrl+Wheel |
Zoom in or out |
W |
Fit width |
F |
Fit page |
Ctrl+1 |
Actual size |
PgUp / PgDn |
Previous / next page |
Home / End |
First / last page |
Ctrl+L / Ctrl+R |
Rotate left / right |
Ctrl+0 |
Reset rotation |
Ctrl+C |
Copy measurements or selected text context |
Ctrl+S |
Export selection as PNG |
Ctrl+Shift+H |
Add highlight from selection |
Ctrl+Shift+U |
Add underline from selection |
Ctrl+Shift+N |
Add note from selection |
Arrow |
Move selection by 1 pt |
Shift+Arrow |
Move selection by 10 pt |
Ctrl+Arrow |
Resize selection by 1 pt |
Ctrl+Shift+Arrow |
Resize selection by 10 pt |
Delete / Backspace |
Delete selected annotation |
Escape |
Clear selection |
Development
Install dependencies
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -e .[dev]
Run tests
PYTHONPATH=src pytest -q
On Windows PowerShell:
$env:PYTHONPATH = "src"
python -m pytest -q
Current automated coverage
- Unit tests for measurement and state helpers
- Sidecar persistence tests
- UI behavior tests for reload, session restore, and navigation
pytest-qtinteraction tests for:- search
- reload
- thumbnails
- outline navigation
- bookmarks
- annotation create/edit/delete flows
- export flows
- text selection and copy
The suite is intended to stay fast enough for local development and CI.
Packaging
- Canonical metadata: pyproject.toml
- Older editable-install support: setup.py
- Windows build spec: neoview.spec
- Publish helper: publish.sh
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file neoview-0.3.tar.gz.
File metadata
- Download URL: neoview-0.3.tar.gz
- Upload date:
- Size: 103.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
845a0598c9a0b1b2862d5c8e2494e2bc075deae6659d84c19115209e4448aa1b
|
|
| MD5 |
59cd6b8342b1f20f806a0bff98d7a71e
|
|
| BLAKE2b-256 |
0b0e8c04a31c668932376c0a0b6c16ed7cf5e7c16c6a1642f09b7e9b48e46a8f
|
File details
Details for the file neoview-0.3-py3-none-any.whl.
File metadata
- Download URL: neoview-0.3-py3-none-any.whl
- Upload date:
- Size: 88.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1281fd1cacd1b2e2c41fb505f1a067d922684e038e73268268bea4655bd9f3ac
|
|
| MD5 |
898b7665261b13f57174183a3dbc5052
|
|
| BLAKE2b-256 |
06ee191dd7839828f9ce731941fff9859be3b7f9a9fd8c8ebdeb3103853006cf
|