A web-based PDF viewer with non-destructive annotation capabilities, designed for study purposes such as IPA exams and educational materials.
β Launch PDFMark - No installation required!
Simply click the link above, drag and drop a PDF file, and start annotating immediately.
- π PDF Viewing - High-quality PDF rendering using PDF.js
- βοΈ Non-destructive Annotations - Draw over PDFs without modifying the original file
- πΎ Auto-save - Annotations automatically saved to browser storage
- π₯ Export/Import - Save and share annotations as JSON files
- β¨οΈ Keyboard Shortcuts - Efficient workflow with hotkeys
- Pen Tool - Freehand drawing with customizable colors and line widths
- Line Tool - Draw straight lines with preview
- Text Tool - Add text annotations at any position
- Eraser Tool - Remove annotations with adjustable eraser sizes
- π Zoom Controls - Multiple zoom levels including fit-to-width and fit-to-page
- β©οΈ Undo/Redo - Up to 50 operations history
- π¨ Color Presets - 8 preset colors plus custom color picker
- π± Touch Support - Works on tablets for handwritten notes
No installation needed! Simply visit the live demo and start using PDFMark immediately.
- Node.js 18.0 or higher
- npm 9.0 or higher
# Clone the repository
git clone https://github.com/techs-targe/pdfmark.git
cd pdfmark
# Install dependencies
npm install
# Start development server
npm run devThe development server will open at http://localhost:4567
-
Load a PDF
- Click the folder icon (π) or drag and drop a PDF file
- Maximum file size: 50MB
- Maximum pages: 500
-
Select a Tool
- Press 1-5 or click toolbar icons:
1or βοΈ - Pen Tool2or π§Ή - Eraser Tool3or π - Text Tool4or π - Line Tool5or π - Select Tool
- Press 1-5 or click toolbar icons:
-
Annotate
- Draw directly on the PDF
- Annotations are saved automatically every 5 seconds
-
Save/Export
- Click πΎ to export annotations as JSON
- Click π₯ to import previously saved annotations
| Shortcut | Action |
|---|---|
Ctrl+O |
Open PDF |
Ctrl+S |
Save annotations |
Ctrl+Z |
Undo |
Ctrl+Y |
Redo |
Ctrl++ |
Zoom in |
Ctrl+- |
Zoom out |
1-5 |
Switch tools |
β/β |
Previous/Next page |
pdfmark/
βββ src/
β βββ components/ # React components
β β βββ PDFViewer/ # PDF rendering component
β β βββ AnnotationLayer/ # Canvas overlay for annotations
β β βββ Toolbar/ # Tool selection and settings
β βββ tools/ # Drawing tool implementations
β βββ hooks/ # Custom React hooks
β βββ utils/ # Utility functions
β βββ types/ # TypeScript type definitions
βββ public/ # Static assets
βββ tmp/ # Temporary files (git-ignored)
# Development
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
npm run lint # Run ESLintnpm run buildThe built files will be in the dist/ directory.
- React 18.3 - UI framework
- TypeScript - Type safety
- PDF.js - PDF rendering
- Vite - Build tool
- Tailwind CSS - Styling
- Canvas API - Annotation layer
- Chrome 90+
- Firefox 88+
- Safari 14+
- Edge 90+
- 60fps annotation drawing
- Efficient canvas rendering
- Debounced auto-save
- Optimized for large PDFs
Annotations are stored in browser LocalStorage with the following structure:
{
"version": "1.0.0",
"pdfInfo": {
"fileName": "document.pdf",
"fileHash": "sha256_hash",
"totalPages": 100
},
"annotations": {
"page_1": [...],
"page_2": [...]
}
}- All processing happens locally in your browser
- No data is sent to external servers
- PDFs and annotations remain private
- Maximum PDF size: 50MB
- Maximum pages: 500
- Maximum annotations per page: 1000
- Concurrent tabs: 10 (when tab feature is implemented)
- Tab system for multiple PDF views
- Split screen view
- Cloud synchronization
- Collaborative annotations
- OCR text search
- Voice notes
- Annotation categories/tags
- PDF form filling
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (all code must be in English)
- Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
For issues and questions, please use the GitHub Issues page.
- PDF.js team for the excellent PDF rendering library
- React team for the robust UI framework
- All contributors and users of this project
Made with β€οΈ for students and learners worldwide