Skip to content

Commit bf88495

Browse files
Ishan Kaultaneliang
authored andcommitted
added custom renderer for entire layer
1 parent f944b85 commit bf88495

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

packages/react-pdf/src/Page.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import type { EventProps } from 'make-event-props';
3737
import type {
3838
ClassName,
3939
CustomRenderer,
40+
CustomTextLayerRenderer,
4041
CustomTextRenderer,
4142
NodeOrRenderer,
4243
OnGetAnnotationsError,
@@ -67,6 +68,7 @@ export type PageProps = {
6768
children?: React.ReactNode;
6869
className?: ClassName;
6970
customRenderer?: CustomRenderer;
71+
customTextLayerRenderer?: CustomTextLayerRenderer;
7072
customTextRenderer?: CustomTextRenderer;
7173
devicePixelRatio?: number;
7274
error?: NodeOrRenderer;
@@ -120,6 +122,7 @@ const Page: React.FC<PageProps> = function Page(props) {
120122
children,
121123
className,
122124
customRenderer: CustomRenderer,
125+
customTextLayerRenderer,
123126
customTextRenderer,
124127
devicePixelRatio,
125128
error = 'Failed to load the page.',
@@ -298,6 +301,7 @@ const Page: React.FC<PageProps> = function Page(props) {
298301
? {
299302
_className,
300303
canvasBackground,
304+
customTextLayerRenderer,
301305
customTextRenderer,
302306
devicePixelRatio,
303307
onGetAnnotationsError: onGetAnnotationsErrorProps,
@@ -324,6 +328,7 @@ const Page: React.FC<PageProps> = function Page(props) {
324328
[
325329
_className,
326330
canvasBackground,
331+
customTextLayerRenderer,
327332
customTextRenderer,
328333
devicePixelRatio,
329334
onGetAnnotationsErrorProps,

packages/react-pdf/src/Page/TextLayer.tsx

Lines changed: 11 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,
@@ -206,7 +207,15 @@ export default function TextLayer() {
206207

207208
const layerChildren = layer.querySelectorAll('[role="presentation"]');
208209

209-
if (customTextRenderer) {
210+
if (customTextLayerRenderer) {
211+
customTextLayerRenderer({
212+
layerChildren,
213+
layerElement: layer,
214+
pageIndex,
215+
pageNumber,
216+
textContentItems: textContent.items,
217+
});
218+
} else if (customTextRenderer) {
210219
let index = 0;
211220
textContent.items.forEach((item, itemIndex) => {
212221
if (!isTextItem(item)) {
@@ -240,6 +249,7 @@ export default function TextLayer() {
240249
}
241250

242251
useLayoutEffect(renderTextLayer, [
252+
customTextLayerRenderer,
243253
customTextRenderer,
244254
onRenderError,
245255
onRenderSuccess,

packages/react-pdf/src/shared/types.ts

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

70+
export type CustomTextLayerRenderer = (props: {
71+
layerChildren: NodeListOf<Element>;
72+
layerElement: HTMLDivElement;
73+
pageIndex: number;
74+
pageNumber: number;
75+
textContentItems: TextContent['items'];
76+
}) => void;
77+
7078
export type CustomTextRenderer = (
7179
props: { pageIndex: number; pageNumber: number; itemIndex: number } & TextItem,
7280
) => string;
@@ -139,6 +147,7 @@ export type DocumentContextType = {
139147
export type PageContextType = {
140148
_className?: string;
141149
canvasBackground?: string;
150+
customTextLayerRenderer?: CustomTextLayerRenderer;
142151
customTextRenderer?: CustomTextRenderer;
143152
devicePixelRatio?: number;
144153
onGetAnnotationsError?: OnGetAnnotationsError;

0 commit comments

Comments
 (0)