Skip to content

Commit d636845

Browse files
Add ability to disable annotations including canvas appearance-data (wojtekmaj#963)
1 parent f77fe4e commit d636845

File tree

6 files changed

+54
-9
lines changed

6 files changed

+54
-9
lines changed

src/Page.jsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import mergeClassNames from 'merge-class-names';
66
import mergeRefs from 'merge-refs';
77
import invariant from 'tiny-invariant';
88
import warning from 'tiny-warning';
9+
import { AnnotationMode } from 'pdfjs-dist/legacy/build/pdf';
910

1011
import DocumentContext from './DocumentContext';
1112
import PageContext from './PageContext';
@@ -75,6 +76,7 @@ export class PageInternal extends PureComponent {
7576
}
7677

7778
const {
79+
annotationMode,
7880
canvasBackground,
7981
customTextRenderer,
8082
onGetAnnotationsError,
@@ -90,6 +92,7 @@ export class PageInternal extends PureComponent {
9092
} = this.props;
9193

9294
return {
95+
annotationMode,
9396
canvasBackground,
9497
customTextRenderer,
9598
onGetAnnotationsError,
@@ -355,11 +358,11 @@ export class PageInternal extends PureComponent {
355358
}
356359

357360
PageInternal.defaultProps = {
361+
annotationMode: AnnotationMode.ENABLE,
358362
error: 'Failed to load the page.',
359363
loading: 'Loading page…',
360364
noData: 'No page specified.',
361365
renderAnnotationLayer: true,
362-
renderForms: false,
363366
renderMode: 'canvas',
364367
renderTextLayer: true,
365368
scale: defaultScale,
@@ -369,6 +372,7 @@ const isFunctionOrNode = PropTypes.oneOfType([PropTypes.func, PropTypes.node]);
369372

370373
PageInternal.propTypes = {
371374
...eventProps,
375+
annotationMode: PropTypes.number,
372376
canvasBackground: PropTypes.string,
373377
children: PropTypes.node,
374378
className: isClassName,

src/Page/AnnotationLayer.jsx

+12-4
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,13 @@ export class AnnotationLayerInternal extends PureComponent {
2626
}
2727

2828
componentDidUpdate(prevProps) {
29-
const { page, renderForms } = this.props;
29+
const { annotationMode, page, renderForms } = this.props;
3030

31-
if ((prevProps.page && page !== prevProps.page) || renderForms !== prevProps.renderForms) {
31+
if (
32+
(prevProps.page && page !== prevProps.page) ||
33+
annotationMode !== prevProps.annotationMode ||
34+
renderForms !== prevProps.renderForms
35+
) {
3236
this.loadAnnotations();
3337
}
3438
}
@@ -96,7 +100,7 @@ export class AnnotationLayerInternal extends PureComponent {
96100
return;
97101
}
98102

99-
const { imageResourcesPath, linkService, page, renderForms } = this.props;
103+
const { annotationMode, imageResourcesPath, linkService, page, renderForms } = this.props;
100104

101105
const viewport = this.viewport.clone({ dontFlip: true });
102106

@@ -106,7 +110,10 @@ export class AnnotationLayerInternal extends PureComponent {
106110
imageResourcesPath,
107111
linkService,
108112
page,
109-
renderForms,
113+
renderForms:
114+
annotationMode !== null && annotationMode !== undefined
115+
? annotationMode === pdfjs.AnnotationMode.ENABLE_FORMS
116+
: renderForms,
110117
viewport,
111118
};
112119

@@ -135,6 +142,7 @@ export class AnnotationLayerInternal extends PureComponent {
135142
}
136143

137144
AnnotationLayerInternal.propTypes = {
145+
annotationMode: PropTypes.number,
138146
imageResourcesPath: PropTypes.string,
139147
linkService: isLinkService.isRequired,
140148
onGetAnnotationsError: PropTypes.func,

src/Page/PageCanvas.jsx

+10-4
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@ export class PageCanvasInternal extends PureComponent {
1818
}
1919

2020
componentDidUpdate(prevProps) {
21-
const { canvasBackground, page, renderForms } = this.props;
22-
if (canvasBackground !== prevProps.canvasBackground || renderForms !== prevProps.renderForms) {
21+
const { annotationMode, canvasBackground, page, renderForms } = this.props;
22+
if (
23+
annotationMode !== prevProps.annotationMode ||
24+
canvasBackground !== prevProps.canvasBackground ||
25+
renderForms !== prevProps.renderForms
26+
) {
2327
// Ensures the canvas will be re-rendered from scratch. Otherwise all form data will stay.
2428
page.cleanup();
2529
this.drawPageOnCanvas();
@@ -95,7 +99,7 @@ export class PageCanvasInternal extends PureComponent {
9599
}
96100

97101
const { renderViewport, viewport } = this;
98-
const { canvasBackground, page, renderForms } = this.props;
102+
const { annotationMode, canvasBackground, page, renderForms } = this.props;
99103

100104
canvas.width = renderViewport.width;
101105
canvas.height = renderViewport.height;
@@ -104,7 +108,8 @@ export class PageCanvasInternal extends PureComponent {
104108
canvas.style.height = `${Math.floor(viewport.height)}px`;
105109

106110
const renderContext = {
107-
annotationMode: renderForms ? ANNOTATION_MODE.ENABLE_FORMS : ANNOTATION_MODE.ENABLE,
111+
annotationMode:
112+
annotationMode ?? (renderForms ? ANNOTATION_MODE.ENABLE_FORMS : ANNOTATION_MODE.ENABLE),
108113
get canvasContext() {
109114
return canvas.getContext('2d');
110115
},
@@ -142,6 +147,7 @@ export class PageCanvasInternal extends PureComponent {
142147
}
143148

144149
PageCanvasInternal.propTypes = {
150+
annotationMode: PropTypes.number,
145151
canvasBackground: PropTypes.string,
146152
canvasRef: isRef,
147153
onRenderError: PropTypes.func,

test/LayerOptions.jsx

+23
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
3+
import { AnnotationMode } from 'pdfjs-dist/legacy/build/pdf';
34

45
export default function LayerOptions({
6+
annotationMode,
57
renderAnnotationLayer,
68
renderForms,
79
renderTextLayer,
10+
setAnnotationMode,
811
setRenderAnnotationLayer,
912
setRenderForms,
1013
setRenderTextLayer,
1114
}) {
15+
function onAnnotationModeChange(event) {
16+
const { value } = event.target;
17+
18+
setAnnotationMode(value.length > 0 ? Number(value) : null);
19+
}
20+
1221
function onRenderAnnotationLayerChange(event) {
1322
setRenderAnnotationLayer(event.target.checked);
1423
}
@@ -55,14 +64,28 @@ export default function LayerOptions({
5564
/>
5665
<label htmlFor="renderForms">Render forms</label>
5766
</div>
67+
68+
<div>
69+
<label htmlFor="annotationMode">Annotation mode</label>
70+
<select id="annotationMode" value={annotationMode ?? ''} onChange={onAnnotationModeChange}>
71+
<option value="">Unset</option>
72+
{Object.entries(AnnotationMode).map(([name, value]) => (
73+
<option key={name} value={value}>
74+
{name}
75+
</option>
76+
))}
77+
</select>
78+
</div>
5879
</fieldset>
5980
);
6081
}
6182

6283
LayerOptions.propTypes = {
84+
annotationMode: PropTypes.number,
6385
renderAnnotationLayer: PropTypes.bool,
6486
renderForms: PropTypes.bool,
6587
renderTextLayer: PropTypes.bool,
88+
setAnnotationMode: PropTypes.func.isRequired,
6689
setRenderAnnotationLayer: PropTypes.func.isRequired,
6790
setRenderForms: PropTypes.func.isRequired,
6891
setRenderTextLayer: PropTypes.func.isRequired,

test/Test.jsx

+4
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export const readAsDataURL = (file) =>
4848
/* eslint-disable no-console */
4949

5050
export default function Test() {
51+
const [annotationMode, setAnnotationMode] = useState(null);
5152
const [canvasBackground, setCanvasBackground] = useState(null);
5253
const [displayAll, setDisplayAll] = useState(false);
5354
const [externalLinkTarget, setExternalLinkTarget] = useState(null);
@@ -171,6 +172,7 @@ export default function Test() {
171172

172173
function getPageProps() {
173174
return {
175+
annotationMode,
174176
canvasBackground,
175177
className: 'custom-classname-page',
176178
height: pageHeight,
@@ -217,9 +219,11 @@ export default function Test() {
217219
<LoadingOptions file={file} setFile={setFile} setRender={setRender} />
218220
<PassingOptions file={file} passMethod={passMethod} setPassMethod={setPassMethod} />
219221
<LayerOptions
222+
annotationMode={annotationMode}
220223
renderAnnotationLayer={renderAnnotationLayer}
221224
renderForms={renderForms}
222225
renderTextLayer={renderTextLayer}
226+
setAnnotationMode={setAnnotationMode}
223227
setRenderAnnotationLayer={setRenderAnnotationLayer}
224228
setRenderForms={setRenderForms}
225229
setRenderTextLayer={setRenderTextLayer}

test/test.pdf

-2.66 KB
Binary file not shown.

0 commit comments

Comments
 (0)