Skip to content

Commit 8bc03af

Browse files
Ishan Kaultaneliang
authored andcommitted
added custom renderer for entire layer
1 parent c91f2a5 commit 8bc03af

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

src/Page.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import type { PDFDocumentProxy, PDFPageProxy } from 'pdfjs-dist';
3636
import type { EventProps } from 'make-event-props';
3737
import type {
3838
CustomRenderer,
39+
CustomTextLayerRenderer,
3940
CustomTextRenderer,
4041
NodeOrRenderer,
4142
OnGetAnnotationsError,
@@ -66,6 +67,7 @@ export type PageProps = {
6667
children?: React.ReactNode;
6768
className?: string;
6869
customRenderer?: CustomRenderer;
70+
customTextLayerRenderer?: CustomTextLayerRenderer;
6971
customTextRenderer?: CustomTextRenderer;
7072
devicePixelRatio?: number;
7173
error?: NodeOrRenderer;
@@ -119,6 +121,7 @@ export default function Page(props: PageProps) {
119121
children,
120122
className,
121123
customRenderer: CustomRenderer,
124+
customTextLayerRenderer,
122125
customTextRenderer,
123126
devicePixelRatio,
124127
error = 'Failed to load the page.',
@@ -297,6 +300,7 @@ export default function Page(props: PageProps) {
297300
? {
298301
_className,
299302
canvasBackground,
303+
customTextLayerRenderer,
300304
customTextRenderer,
301305
devicePixelRatio,
302306
onGetAnnotationsError: onGetAnnotationsErrorProps,
@@ -323,6 +327,7 @@ export default function Page(props: PageProps) {
323327
[
324328
_className,
325329
canvasBackground,
330+
customTextLayerRenderer,
326331
customTextRenderer,
327332
devicePixelRatio,
328333
onGetAnnotationsErrorProps,

src/Page/TextLayer.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export default function TextLayer() {
2323
invariant(pageContext, 'Unable to find Page context.');
2424

2525
const {
26+
customTextLayerRenderer,
2627
customTextRenderer,
2728
onGetTextError,
2829
onGetTextSuccess,
@@ -210,7 +211,14 @@ export default function TextLayer() {
210211
? layer.querySelectorAll('.markedContent > *:not(.markedContent')
211212
: layer.children;
212213

213-
if (customTextRenderer) {
214+
if (customTextLayerRenderer) {
215+
customTextLayerRenderer({
216+
layerElement: layer,
217+
pageIndex,
218+
pageNumber,
219+
textContentItems: textContent.items,
220+
});
221+
} else if (customTextRenderer) {
214222
let index = 0;
215223
textContent.items.forEach((item, itemIndex) => {
216224
if (!isTextItem(item)) {
@@ -244,6 +252,7 @@ export default function TextLayer() {
244252
}
245253

246254
useLayoutEffect(renderTextLayer, [
255+
customTextLayerRenderer,
247256
customTextRenderer,
248257
onRenderError,
249258
onRenderSuccess,

src/shared/types.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ export type UnregisterPage = (pageIndex: number) => void;
6767
/* Complex types */
6868
export type CustomRenderer = React.FunctionComponent | React.ComponentClass;
6969

70+
export type CustomTextLayerRenderer = (props: {
71+
layerElement: HTMLDivElement;
72+
pageIndex: number;
73+
pageNumber: number;
74+
textContentItems: TextContent['items'];
75+
}) => void;
76+
7077
export type CustomTextRenderer = (
7178
props: { pageIndex: number; pageNumber: number; itemIndex: number } & TextItem,
7279
) => string;
@@ -144,6 +151,7 @@ export type DocumentContextType = {
144151
export type PageContextType = {
145152
_className?: string;
146153
canvasBackground?: string;
154+
customTextLayerRenderer?: CustomTextLayerRenderer;
147155
customTextRenderer?: CustomTextRenderer;
148156
devicePixelRatio?: number;
149157
onGetAnnotationsError?: OnGetAnnotationsError;

0 commit comments

Comments
 (0)