pdf-annotator-react
Version:
A React component library for PDF annotation
166 lines (137 loc) • 5.41 kB
Markdown
for PDF annotation. This library allows you to easily add annotation capabilities to PDFs in your React applications.
- View PDFs with page navigation
- Create and manage annotations:
- Highlights
- Underlines
- Strikeouts
- Rectangles
- Freehand drawing
- Text notes
- Comments
- Customize annotation colors
- Get callbacks for annotation events (create, update, delete, select)
- Modern React hooks-based API
## Installation
```bash
npm install pdf-annotator-react
# or
yarn add pdf-annotator-react
```
## Usage
### Basic Example
```jsx
import React, { useState } from 'react';
import { PdfAnnotator, AnnotationMode } from 'pdf-annotator-react';
const MyPdfAnnotator = () => {
const [annotations, setAnnotations] = useState([]);
const handleAnnotationCreate = (newAnnotation) => {
setAnnotations(prev => [...prev, newAnnotation]);
};
const handleAnnotationUpdate = (updatedAnnotation) => {
setAnnotations(prev =>
prev.map(a => a.id === updatedAnnotation.id ? updatedAnnotation : a)
);
};
const handleAnnotationDelete = (annotationId) => {
setAnnotations(prev => prev.filter(a => a.id !== annotationId));
};
return (
<div style={{ height: '100vh', width: '100%' }}>
<PdfAnnotator
url="https://example.com/sample.pdf"
annotations={annotations}
onAnnotationCreate={handleAnnotationCreate}
onAnnotationUpdate={handleAnnotationUpdate}
onAnnotationDelete={handleAnnotationDelete}
annotationMode={AnnotationMode.HIGHLIGHT}
/>
</div>
);
};
export default MyPdfAnnotator;
```
```jsx
import React, { useState } from 'react';
import { PdfAnnotator, AnnotationMode } from 'pdf-annotator-react';
const MyPdfAnnotator = () => {
const [annotations, setAnnotations] = useState([]);
const [mode, setMode] = useState(AnnotationMode.NONE);
// Annotation event handlers
const handleAnnotationCreate = (newAnnotation) => {
setAnnotations(prev => [...prev, newAnnotation]);
};
const handleAnnotationUpdate = (updatedAnnotation) => {
setAnnotations(prev =>
prev.map(a => a.id === updatedAnnotation.id ? updatedAnnotation : a)
);
};
const handleAnnotationDelete = (annotationId) => {
setAnnotations(prev => prev.filter(a => a.id !== annotationId));
};
const handleAnnotationSelect = (selectedAnnotation) => {
console.log('Selected annotation:', selectedAnnotation);
};
// Tools toolbar
const renderToolbar = () => (
<div style={{ marginBottom: '10px' }}>
<button onClick={() => setMode(AnnotationMode.NONE)}>Select</button>
<button onClick={() => setMode(AnnotationMode.HIGHLIGHT)}>Highlight</button>
<button onClick={() => setMode(AnnotationMode.UNDERLINE)}>Underline</button>
<button onClick={() => setMode(AnnotationMode.RECTANGLE)}>Rectangle</button>
<button onClick={() => setMode(AnnotationMode.DRAWING)}>Draw</button>
<button onClick={() => setMode(AnnotationMode.COMMENT)}>Comment</button>
</div>
);
return (
<div>
{renderToolbar()}
<div style={{ height: 'calc(100vh - 40px)', width: '100%' }}>
<PdfAnnotator
url="https://example.com/sample.pdf"
annotations={annotations}
onAnnotationCreate={handleAnnotationCreate}
onAnnotationUpdate={handleAnnotationUpdate}
onAnnotationDelete={handleAnnotationDelete}
onAnnotationSelect={handleAnnotationSelect}
annotationMode={mode}
onAnnotationModeChange={setMode}
// Custom colors
highlightColor="rgba(255, 230, 0, 0.4)"
underlineColor="rgba(0, 100, 255, 0.7)"
rectangleColor="rgba(255, 0, 0, 0.3)"
drawingColor="#22cc22"
/>
</div>
</div>
);
};
export default MyPdfAnnotator;
```
The `PdfAnnotator` component accepts the following props:
| Prop | Type | Description |
|------|------|-------------|
| `url` | string | URL of the PDF to display |
| `annotations` | Array | Array of annotation objects |
| `scale` | number | Scale factor for rendering (default: 1.0) |
| `pageNumber` | number | Initial page number to display (default: 1) |
| `onDocumentLoadSuccess` | function | Callback when PDF loads successfully |
| `onPageChange` | function | Callback when page changes |
| `annotationMode` | AnnotationMode | Current annotation mode |
| `onAnnotationModeChange` | function | Callback when annotation mode changes |
| `onAnnotationCreate` | function | Callback when an annotation is created |
| `onAnnotationUpdate` | function | Callback when an annotation is updated |
| `onAnnotationDelete` | function | Callback when an annotation is deleted |
| `onAnnotationSelect` | function | Callback when an annotation is selected |
| `highlightColor` | string | Custom color for highlight annotations |
| `underlineColor` | string | Custom color for underline annotations |
| `strikeoutColor` | string | Custom color for strikeout annotations |
| `rectangleColor` | string | Custom color for rectangle annotations |
| `drawingColor` | string | Custom color for drawing annotations |
| `textColor` | string | Custom color for text annotations |
| `commentColor` | string | Custom color for comment annotations |
## License
MIT
A modern React component library