From f4f2c70565037b6c3d17d5d1964b870c7ae5146a Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 15 Oct 2025 12:43:04 +0530 Subject: [PATCH 01/47] 984044: annotations module --- .../PDF/PDF-Viewer/angular/accessibility.md | 2 +- .../react/annotation/annotation-event.md | 1140 +++++++++++++++++ .../annotation/annotations-in-mobile-view.md | 122 ++ .../PDF-Viewer/react/annotation/comments.md | 143 ++- .../react/annotation/free-text-annotation.md | 104 +- .../react/annotation/ink-annotation.md | 66 +- .../annotation/line-angle-constraints.md | 45 +- .../annotation/measurement-annotation.md | 56 +- .../react/annotation/shape-annotation.md | 52 +- .../react/annotation/signature-annotation.md | 52 +- .../react/annotation/stamp-annotation.md | 45 +- .../annotation/sticky-notes-annotation.md | 52 +- .../annotation/text-markup-annotation.md | 156 +-- 13 files changed, 1679 insertions(+), 356 deletions(-) create mode 100644 Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md diff --git a/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md b/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md index 685ded52b..0d7180fd5 100644 --- a/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md +++ b/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md @@ -8,7 +8,7 @@ documentation: ug domainurl: ##DomainURL## --- -# Accessibility in Syncfusion® Angular PDF Viewer components +# Accessibility in Syncfusion PDF Viewer components REACT The PDF Viewer component followed the accessibility guidelines and standards, including [ADA](https://www.ada.gov/), [Section 508](https://www.section508.gov/), [WCAG 2.2](https://www.w3.org/TR/WCAG22/) standards, and [WCAG roles](https://www.w3.org/TR/wai-aria/#roles) that are commonly used to evaluate accessibility. diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md new file mode 100644 index 000000000..ce6a18e69 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md @@ -0,0 +1,1140 @@ +--- +title: Annotations Events in React Pdfviewer control | Syncfusion +description: Learn here all about Annotations Events in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +documentation: ug + +domainurl: ##DomainURL## +--- + +# Annotations Events in React Pdf viewer control + +The PDF Viewer component triggers various events based on user interactions and changes in the component's state. These events can be used to perform actions when a specific event occurs. This section describes the events available in the PDF Viewer component. + +| Event | Description | +| ------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | +| [`annotationAdd`](#annotationadd) | Triggers when an annotation is added to a page in the PDF document. | +| [`annotationDoubleClick`](#annotationdoubleclick) | Triggers when an annotation is double-clicked. | +| [`annotationMouseLeave`](#annotationmouseleave) | Triggers when the mouse pointer moves away from an annotation object. | +| [`annotationMouseover`](#annotationmouseover) | Triggers when the mouse pointer moves over an annotation object. | +| [`annotationMove`](#annotationmove) | Triggers when an annotation is moved on a page in the PDF document. | +| [`annotationMoving`](#annotationmoving) | Triggers while an annotation is being moved. | +| [`annotationPropertiesChange`](#annotationpropertieschange) | Triggers when the properties of an annotation are modified on a PDF page. | +| [`annotationRemove`](#annotationremove) | Triggers when an annotation is removed from a page in the PDF document. | +| [`annotationResize`](#annotationresize) | Triggers when an annotation is resized on a page in the PDF document. | +| [`annotationSelect`](#annotationselect) | Triggers when an annotation is selected on a page in the PDF document. | +| [`annotationUnSelect`](#annotationunselect) | Triggers when an annotation is unselected on a page in the PDF document. | +| [`beforeAddFreeText`](#beforeaddfreetext) | Triggers before adding a text in the freeText annotation. | +| [`addSignature`](#addsignature) | Triggers when a signature is added to a page in the PDF document. | +| [`removeSignature`](#removesignature) | Triggers when a signature is removed from a page in the PDF document. | +| [`resizeSignature`](#resizesignature) | Triggers when a signature is resized on a page in the PDF document. | +| [`signaturePropertiesChange`](#signaturepropertieschange) | Triggers when the properties of a signature are changed on a page in the PDF document. | +| [`signatureSelect`](#signatureselect) | Triggers when a signature is selected on a page in the PDF document. | +| [`signatureUnselect`](#signatureunselect) | Triggers when a signature is unselected on a page in the PDF document. | + + +### annotationAdd + +The [annotationAdd](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationaddevent) event is triggered when an annotation is added to a PDF document's page. + +#### Event Arguments + +For event data, see [AnnotationAddEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationAddEventArgs/). It provides properties such as `annotationId`, `pageNumber`, `annotationType`, and `bounds`. + +The following example illustrates how to handle the `annotationAdd` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```react +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + annotationAdd: function (args: any) { + console.log('Annotation added with ID: ' + args.annotationId); + console.log('Annotation type: ' + args.annotationType); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### annotationDoubleClick + +The [annotationDoubleClick](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationdoubleclickevent) event is triggered when an annotation is double-clicked. + +#### Event Arguments + +For event data, see [AnnotationDoubleClickEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationDoubleClickEventArgs/). + +The following example illustrates how to handle the `annotationDoubleClick` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```react +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + annotationDoubleClick: function (args: any) { + console.log('Annotation double-clicked on page: ' + args.pageIndex); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### annotationMouseLeave + +The [annotationMouseLeave](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationmouseleaveevent) event is triggered when the user's mouse pointer moves away from an annotation object. + +#### Event Arguments + +For event data, see [AnnotationMouseLeaveEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationMouseLeaveEventArgs/). + +The following example illustrates how to handle the `annotationMouseLeave` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```react +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + annotationMouseLeave: function (args: any) { + console.log('Annotation mouse leave event is triggered for annotation with ID: ' + args.pageIndex); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### annotationMouseover + +The [annotationMouseover](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationmouseoverevent) event is triggered when the mouse is moved over an annotation object. + +#### Event Arguments + +For event data, see [AnnotationMouseOverEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationMouseOverEventArgs/). + +The following example illustrates how to handle the `annotationMouseover` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + annotationMouseover: function (args: any) { + console.log('Annotation mouse over event is triggered for annotation with ID: ' + args.annotationId); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### annotationMove + +The [annotationMove](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationmoveevent) event is triggered when an annotation is moved over the page of the PDF document. + +#### Event Arguments + +For event data, see [AnnotationMoveEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationMoveEventArgs/). + +The following example illustrates how to handle the `annotationMove` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + annotationMove: function (args: any) { + console.log('Annotation moved. ID: ' + args.annotationId + ' on page ' + args.pageIndex); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### annotationMoving + +The [annotationMoving](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationmovingevent) event is triggered while an annotation is being moved. + +#### Event Arguments + +For event data, see [AnnotationMovingEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationMovingEventArgs/). + +The following example illustrates how to handle the `annotationMoving` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + annotationMoving: function (args: any) { + console.log('Annotation is being moved. Current Action: ' + args.currentPosition); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### annotationPropertiesChange + +The [annotationPropertiesChange](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationpropertieschangeevent) event is triggered when an annotation's property is modified on a PDF document page. + +#### Event Arguments + +For event data, see [AnnotationPropertiesChangeEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationPropertiesChangeEventArgs/). It provides properties such as `annotationId`, `pageNumber`, and `action`. + +The following example illustrates how to handle the `annotationPropertiesChange` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + annotationPropertiesChange: function (args: any) { + console.log('Annotation properties changed for ID: ' + args.annotationId); + console.log('isThicknessChanged: ' + args.isThicknessChanged); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### annotationRemove + +The [annotationRemove](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationremoveevent) event is triggered when an annotation is removed from a PDF document's page. + +#### Event Arguments + +For event data, see [AnnotationRemoveEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationRemoveEventArgs/). It provides properties such as `annotationId` and `pageNumber`. + +The following example illustrates how to handle the `annotationRemove` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + annotationRemove: function (args: any) { + console.log('Annotation removed with ID: ' + args.annotationId); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### annotationResize + +The [annotationResize](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationresizeevent) event is triggered when an annotation is resized on a PDF document page. + +#### Event Arguments + +For event data, see [AnnotationResizeEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationResizeEventArgs/). + +The following example illustrates how to handle the `annotationResize` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + annotationResize: function (args: any) { + console.log('Annotation resized. ID: ' + args.annotationId); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### annotationSelect + +The [annotationSelect](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationselectevent) event is triggered when an annotation is selected on a PDF document's page. + +#### Event Arguments + +For event data, see [AnnotationSelectEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationSelectEventArgs/). + +The following example illustrates how to handle the `annotationSelect` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + annotationSelect: (args: any) => { + console.log('Annotation selected with ID: ' + args.annotationId); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### annotationUnselect + +The [annotationUnselect](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationunselectevent) event is triggered when an annotation is unselected from the PDF document's page. + +#### Event Arguments + +For event data, see [AnnotationUnSelectEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationUnSelectEventArgs/). + +The following example illustrates how to handle the `annotationUnselect` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + annotationUnselect: function (args: any) { + console.log('Annotation unselected with ID: ' + args.annotationId); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### beforeAddFreeText + +The [beforeAddFreeText](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#beforeaddfreetextevent) event is triggered before adding a text in the freeText annotation. + +#### Event Arguments + +For event data, see [BeforeAddFreeTextEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/beforeAddFreeTextEventArgs/). + +The following example illustrates how to handle the `beforeAddFreeText` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + beforeAddFreeText: function (args: any) { + console.log('Before adding free text on page: ' + args.pageIndex); + // Set args.cancel to true to prevent adding the free text annotation + // args.cancel = true; + } +}); +viewer.appendTo('#pdfViewer'); +``` + +## Signature-related events + +### addSignature + +The [addSignature](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#addsignatureevent) event is triggered when a signature is added to a page of a PDF document. + +#### Event Arguments + +For event data, see [AddSignatureEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/addSignatureEventArgs/). It provides properties such as `pageNumber`. + +The following example illustrates how to handle the `addSignature` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + addSignature: function (args: any) { + console.log('Signature added to page: ' + args.pageIndex); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### removeSignature + +The [removeSignature](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#removesignatureevent) event is triggered when the signature is removed from the page of a PDF document. + +#### Event Arguments + +For event data, see [RemoveSignatureEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/removeSignatureEventArgs/). It provides properties such as `pageNumber`. + +The following example illustrates how to handle the `removeSignature` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + removeSignature: function (args: any) { + console.log('Signature removed from page: ' + args.pageIndex); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### resizeSignature + +The [resizeSignature](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#resizesignatureevent) event is triggered when the signature is resized and placed on a page of a PDF document. + +#### Event Arguments + +For event data, see [ResizeSignatureEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/resizeSignatureEventArgs/). + +The following example illustrates how to handle the `resizeSignature` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + resizeSignature: function (args: any) { + console.log('Signature resized on page ' + args.pageIndex); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### signaturePropertiesChange + +The [signaturePropertiesChange](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#signaturepropertieschangeevent) event is triggered when the property of the signature is changed in the page of the PDF document. + +#### Event Arguments + +For event data, see [SignaturePropertiesChangeEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/signaturePropertiesChangeEventArgs/). + +The following example illustrates how to handle the `signaturePropertiesChange` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + signaturePropertiesChange: function (args: any) { + console.log('Signature properties changed on page ' + args.pageIndex); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### signatureSelect + +The [signatureSelect](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#signatureselectevent) event is triggered when signature is selected over the page of the PDF document. + +#### Event Arguments + +For event data, see [SignatureSelectEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/signatureSelectEventArgs/). + +The following example illustrates how to handle the `signatureSelect` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + signatureSelect: function (args: any) { + console.log('Signature selected on page ' + args.pageIndex); + } +}); +viewer.appendTo('#pdfViewer'); +``` + +### signatureUnselect + +The [signatureUnselect](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#signatureunselectevent) event is triggered when signature is unselected over the page of the PDF document. + +#### Event Arguments + +For event data, see [SignatureUnSelectEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/signatureUnSelectEventArgs/). + +The following example illustrates how to handle the `signatureUnselect` event. + +```html + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + +``` + +```typescript +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, + TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, + BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); + +let viewer: PdfViewer = new PdfViewer({ + documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', + signatureUnselect: function (args: any) { + console.log('Signature unselected on page ' + args.pageIndex); + } +}); +viewer.appendTo('#pdfViewer'); +``` \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md new file mode 100644 index 000000000..95f063dc6 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md @@ -0,0 +1,122 @@ +--- +layout: post +title: Annotations mobileView in React PDF Viewer control | Syncfusion +description: Learn how to use annotations in mobile view with the Syncfusion React PDF Viewer (Essential JS 2). +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- +# Annotations in mobile view in React PDF Viewer control + +## Open the annotation toolbar + +**Step 1:** Click Edit Annotation on the toolbar to enable the annotation toolbar. + +![Enable the annotation toolbar](../images/edit-annotation.png) + +**Step 2:** The annotation toolbar appears below the main toolbar. + +![Annotation toolbar displayed](../images/after-enabling-annotation-toolbar.png) + +## Add sticky note annotations + +**Step 1:** Click the Sticky Notes icon, then tap the page where the note should be placed. + +![Open sticky note tool](../images/add-sticky-notes.png) + +**Step 2:** Tap the page to add the sticky note annotation. + +![Sticky note annotation added on the page](../images/sticky-notes-in-page.png) + +## Add text markup annotations + +**Step 1:** Tap a text markup icon, select the text to mark, then tap the selection to apply the markup. + +![Select text for markup](../images/select-text.png) + +**Step 2:** The text markup annotation is applied to the selected text. + +![Text markup applied on the page](../images/add-text-markup.png) + +## Add shape and measurement annotations + +**Step 1:** Tap the Shape or Measure icon to open the corresponding toolbar. + +![Open shape and measurement tools](../images/add-shapes.png) + +**Step 2:** Choose a shape or measurement type, then draw it on the page. + +![Select measurement type](../images/open-radius.png) + +**Step 3:** The annotation appears on the PDF page. + +![Measurement annotation placed on the page](../images/radius-annotation.png) + +## Add stamp annotations + +**Step 1:** Tap the Stamp icon and select a stamp type from the menu. + +![Open stamp tool](../images/open-stamp.png) + +**Step 2:** Tap the page to place the stamp annotation. + +![Stamp annotation added on the page](../images/add-revised.png) + +## Add signature annotations + +**Step 1:** Tap the Signature icon to open the canvas. Draw the signature, tap Create, then tap the viewer to place it. + +![Open signature canvas](../images/add-signature.png) + +**Step 2:** The signature is added to the page. + +![Signature placed on the page](../images/adding-signature.png) + +## Add ink annotations + +**Step 1:** Tap the Ink tool and draw on the page. + +![Open ink tool](../images/open-ink.png) + +**Step 2:** The ink annotation appears on the page. + +![Ink annotation drawn on the page](../how-to/images/ink-annotation.png) + +## Change annotation properties (before adding) + +**Step 1:** Change properties before placing the annotation. + +**Step 2:** Tap the annotation icon to open the property toolbar, adjust properties, then place the annotation on the page. + +![Adjust fill color before adding](../images/open-fillcolor.png) + +## Change annotation properties (after adding) + +**Step 1:** Change annotation properties after adding the annotation. + +**Step 2:** Select the annotation to show the property toolbar, then adjust the properties. + +![Edit annotation properties after adding](../images/change-property.png) + +## Delete annotations + +**Step 1:** Select the annotation to show the property toolbar, then tap the Delete icon to remove it. + +![Delete icon in the property toolbar](../images/delete-icon.png) + +## Open the comment panel + +**Step 1:** Open the comment panel using the icon in the property toolbar or the annotation toolbar. + +![Open the comment panel](../images/open-comment.png) + +**Step 2:** The comment panel appears. + +![Comment panel displayed](../images/comment-panel.png) + +## Close the comment panel + +**Step 1:** Tap the Close button to close the comment panel. + +![Close the comment panel](../images/close-comment-panel.png) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/comments.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/comments.md index 5b8913683..73b574ba6 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/comments.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/comments.md @@ -1,16 +1,16 @@ --- layout: post title: Comments in React Pdfviewer component | Syncfusion -description: Learn here all about Comments in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Comments +description: Learn about comments, replies, and status in the Syncfusion React PDF Viewer control (Essential JS 2). +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Comments in React Pdfviewer component +# Comments in React PDF Viewer -The PDF Viewer control provides options to add, edit, and delete the comments to the following annotation in the PDF documents: +The PDF Viewer control provides options to add, edit, and delete comments for the following annotations in PDF documents: * Shape annotation * Stamp annotation @@ -20,11 +20,11 @@ The PDF Viewer control provides options to add, edit, and delete the comments to * Free text annotation * Ink annotation -![Comments](../images/commentannot.png) +![Comments panel overview](../images/commentannot.png) ## Adding a comment to the annotation -Annotation comment, comment replies, and status can be added to the PDF document using the comment panel. +Annotation comments replies, and status can be managed to the PDF document using the comment panel. ### Comment panel @@ -33,78 +33,137 @@ Annotation comments can be added to the PDF using the comment panel. The comment 1. Using the annotation menu * Click the Edit Annotation button in the PDF Viewer toolbar. A toolbar appears below it. - * Click the Comment Panel button. A comment panel will appear. + * Click the Comment Panel button. The comment panel opens. 2. Using Context menu - * Select annotation in the PDF document and right-click it. - * Select the comment option in the context menu that appears. + * Select the annotation in the PDF document and right-click it. + * Select Comment from the context menu. 3. Using the Mouse click - * Select annotation in the PDF document and double click it, a comment panel will appear. + * Select the annotation in the PDF document and double-click it. The comment panel opens. -If the comment panel is already in the open state, you can select the annotations and add annotation comments using the comment panel. +If the comment panel is already open, select the annotation and add comments using the panel. ### Adding comments -* Select annotation in the PDF document and click it. -* The selected annotation comment container is highlighted in the comment panel. -* Now, you can add comment and comment replies using the comment panel. +* Select the annotation in the PDF document. +* The corresponding comment thread is highlighted in the comment panel. +* Add comments and replies using the comment panel. -![AddingComments](../images/stickycomment.png) +![Adding comments to a sticky note annotation](../images/stickycomment.png) ### Adding Comment Replies -* The PDF Viewer control provides an option to add multiple replies to the comment. -* After adding the annotation comment, you can add a reply to the comment. +* Multiple replies can be added to a comment. +* After adding a comment, add replies as needed. ### Adding Comment or Reply Status -* Select the Annotation Comments in the comment panel. -* Click the more options button showing in the Comments or reply container. -* Select the Set Status option in the context menu that appears. -* Select the status of the annotation comment in the context menu that appears. +* Select the annotation comment in the comment panel. +* Click More options in the comment or reply container. +* Select Set Status from the context menu. +* Choose a status for the comment. -![CommentStatus](../images/commentstatus.png) +![Set status for a comment](../images/commentstatus.png) ### Editing the comments and comments replies of the annotations -The comment, comment replies, and status of the annotation can be edited using the comment panel. +Comments, replies, and status can be edited using the comment panel. ### Editing the Comment or Comment Replies -The annotation comment and comment replies can be edited in the following ways: +Edit comments and replies in the following ways: 1. Using the Context menu - * Select the Annotation Comments in the comment panel. - * Click the More options button showing in the Comments or reply container. - * Select the Edit option in the context menu that appears. - * Now, an editable text box appears. You can change the content of the annotation comment or comment reply. + * Select the annotation comment in the comment panel. + * Click More options in the comment or reply container. + * Select Edit from the context menu. + * An editable text box appears. Change the content of the comment or reply. 2. Using the Mouse Click - * Select the annotation comments in the comment panel. - * Double click the comment or comment reply content. - * Now, an editable text box appears. You can change the content of the annotation comment or comment reply. + * Select the annotation comment in the comment panel. + * Double-click the comment or reply content. + * An editable text box appears. Change the content of the comment or reply. ### Editing Comment or Reply Status -* Select the Annotation Comments in the comment panel. -* Click the more options button showing in the Comments or reply container. -* Select the Set Status option in the context menu that appears. -* Select the status of the annotation comment in the context menu that appears. -* Status ‘None’ is the default state. If the status is set to ‘None,’ the comments or reply does not appear. +* Select the annotation comment in the comment panel. +* Click More options in the comment or reply container. +* Select Set Status from the context menu. +* Choose a status for the comment. +* None is the default state. Selecting None clears the status indicator; the comment or reply remains visible. -![CommentEdit](../images/commentsedit.png) +![Edit comments and replies](../images/commentsedit.png) ### Delete Comment or Comment Replies -* Select the Annotation Comments in the comment panel. -* Click the more options button shown in the Comments or reply container. -* Select the Delete option in the context menu that appears. +* Select the annotation comment in the comment panel. +* Click More options in the comment or reply container. +* Select Delete from the context menu. -![CommentDelete](../images/commentsdelete.png) +![Delete comments or replies](../images/commentsdelete.png) ->The annotation will be deleted on deleting the comment using comment panel. +>Deleting the root comment from the comment panel also deletes the associated annotation. +```html + +## How to check the comments added by the user + +Comments added to the PDF document can be read using the annotation's `comments` property. + +The following example logs comments in response to a button click. + +```html + +``` + +{% tabs %} +{% highlight html tabtitle="Standalone" %} + +import { PdfViewer, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer} from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject(Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer); + +let pdfviewer: PdfViewer = new PdfViewer(); +pdfviewer.documentPath = "https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf"; +pdfviewer.resourceUrl = "https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib"; +pdfviewer.appendTo('#PdfViewer'); + + +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +import { PdfViewer, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer} from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject(Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer); + +let pdfviewer: PdfViewer = new PdfViewer(); +pdfviewer.serviceUrl = 'https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/'; +pdfviewer.documentPath = "https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf"; +pdfviewer.appendTo('#PdfViewer'); + +{% endhighlight %} +{% endtabs %} + +```typescript +//Method to check the comments added in the PDF document. +document.getElementById('checkComments').addEventListener('click', function () { + var annotationCollections = pdfviewer.annotationCollection; + for (var x = 0; x < annotationCollections.length; x++) { + //Prints the annotation id in the console window. + console.log("annotation Id : " +annotationCollections[x].annotationId); + var comments = annotationCollections[x].comments; + for (var y = 0; y < comments.length; y++) { + var comment = comments[y]; + //Prints the PDF document's comments in the console window. + console.log("comment" + "[" + y + "] :" + comment.note); + } + var note = annotationCollections[x].note; + console.log("note : " + note); + } +}); + +``` \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/free-text-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/free-text-annotation.md index 38397ead7..9971d99fd 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/free-text-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/free-text-annotation.md @@ -1,30 +1,30 @@ --- layout: post -title: Free text annotation in React Pdfviewer component | Syncfusion -description: Learn here all about Free text annotation in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Free text annotation +title: Free text annotation in React PDF Viewer control | Syncfusion +description: Learn about free text annotations in the Syncfusion React PDF Viewer (Essential JS 2): add, edit, delete, and default settings. +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Free text annotation in React Pdfviewer component +# Free text annotation in React PDF Viewer -The PDF Viewer control provides the options to add, edit, and delete the free text annotations. +The PDF Viewer control provides options to add, edit, and delete free text annotations. -## Adding a free text annotation to the PDF document +## Add a free text annotation to the PDF document -The Free text annotations can be added to the PDF document using the annotation toolbar. +The PDF Viewer control provides options to add, edit, and delete free text annotations. -* Click the **Edit Annotation** button in the PDF Viewer toolbar. A toolbar appears below it. -* Select the **Free Text Annotation** button in the annotation toolbar. It enables the Free Text annotation mode. -* You can add the text over the pages of the PDF document. +* Click the **Edit Annotation** button in the PDF Viewer toolbar. The annotation toolbar appears below it. +* Select the **Free Text Annotation** button to enable free text annotation mode. +* Add text anywhere on the pages of the PDF document. -In the pan mode, if the free text annotation mode is entered, the PDF Viewer control will switch to text select mode. +When in pan mode, selecting free text annotation switches the PDF Viewer to text select mode. -![FreeTextAnnotation](../images/freetext_tool.png) +![Free text tool in the annotation toolbar](../images/freetext_tool.png) -Refer to the following code sample to switch to the Free Text annotation mode. +The following example switches to free text annotation mode using a button click. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -101,11 +101,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Adding a Free Text annotation to the PDF document Programmatically +## Add a Free Text annotation to the PDF document Programmatically -With the PDF Viewer library, you can add a Free Text annotation to the PDF Viewer control programmatically using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotationn) method. +The PDF Viewer library allows adding a free text annotation programmatically using the [addAnnotation()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#annotation) method. -Here's a example of how you can utilize the **addAnnotation()** method to include a Free Text annotation programmatically +Here is an example of adding a free text annotation programmatically using addAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -212,11 +212,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Change the content of an existing Free text annotation programmatically +## Change the content of an existing free text annotation programmatically -To change the content of an existing free text annotation in the Syncfusion® PDF viewer programmatically, you can use the **editAnnotation()** method. +To change the content of an existing free text annotation programmatically, use the editAnnotation() method. -Here is an example of how you can use the **editAnnotation()** method to change the content of a free text annotation: +Here is an example of changing the content of a free text annotation using editAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -311,69 +311,71 @@ root.render(); {% endhighlight %} {% endtabs %} -## Editing the properties of free text annotation +N> The current version of the PDF Viewer does not edit existing document text. New free text annotations can be added and modified within the document. -The font family, font size, font styles, font color, text alignment, fill color, the border stroke color, border thickness, and opacity of the free text annotation can be edited using the Font Family tool, Font Size tool, Font Color tool, Text Align tool, Font Style tool Edit Color tool, Edit Stroke Color tool, Edit Thickness tool, and Edit Opacity tool in the annotation toolbar. +## Edit the properties of free text annotations -### Editing font family +Font family, font size, styles, font color, text alignment, fill color, stroke color, border thickness, and opacity can be edited using the Font Family, Font Size, Font Color, Text Align, Font Style, Edit Color, Edit Stroke Color, Edit Thickness, and Edit Opacity tools in the annotation toolbar. -The font family of the annotation can be edited by selecting the desired font in the Font Family tool. +### Edit font family -![FontFamily](../images/fontfamily.png) +Edit the font family by selecting a font in the Font Family tool. -### Editing font size +![Change font family](../images/fontfamily.png) -The font size of the annotation can be edited by selecting the desired size in the Font Size tool. +### Edit font size -![FontSize](../images/fontsize.png) +Edit the font size by selecting a size in the Font Size tool. -### Editing font color +![Change font size](../images/fontsize.png) -The font color of the annotation can be edited using the color palette provided in the Font Color tool. +### Edit font color -![FontColor](../images/fontcolor.png) +Edit the font color using the color palette in the Font Color tool. -### Editing the text alignment +![Change font color](../images/fontcolor.png) -The text in the annotation can be aligned by selecting the desired styles in the drop-down pop-up in the Text Align tool. +### Edit the text alignment -![FreeTextAnnotation](../images/textalign.png) +Align text by selecting an option from the Text Align tool. -### Editing text styles +![Set text alignment](../images/textalign.png) -The style of the text in the annotation can be edited by selecting the desired styles in the drop-down pop-up in the Font Style tool. +### Edit text styles -![FontStyle](../images/fontstyle.png) +Edit text styles by selecting options in the Font Style tool. -### Editing fill color +![Change text styles](../images/fontstyle.png) -The fill color of the annotation can be edited using the color palette provided in the Edit Color tool. +### Edit fill color -![FillColor](../images/fillcolor.png) +Edit the fill color using the color palette in the Edit Color tool. -### Editing stroke color +![Change fill color](../images/fillcolor.png) -The stroke color of the annotation can be edited using the color palette provided in the Edit Stroke Color tool. +### Edit stroke color -![StrokeColor](../images/fontstroke.png) +Edit the stroke color using the color palette in the Edit Stroke Color tool. -### Editing thickness +![Change stroke color](../images/fontstroke.png) -The border thickness of the annotation can be edited using the range slider provided in the Edit Thickness tool. +### Edit thickness -![FontThickness](../images/fontthickness.png) +Edit border thickness using the range slider in the Edit Thickness tool. -### Editing opacity +![Change border thickness](../images/fontthickness.png) -The opacity of the annotation can be edited using the range slider provided in the Edit Opacity tool. +### Edit opacity -![FontOpacity](../images/fontopacity.png) +Edit opacity using the range slider in the Edit Opacity tool. -## Setting default properties during control initialization +![Change opacity](../images/fontopacity.png) -The properties of the free text annotation can be set before creating the control using the FreeTextSettings. +## Set default properties during control initialization -After editing the default values, they will be changed to the selected values. Refer to the following code sample to set the default free text annotation settings. +Default properties for free text annotations can be set before creating the control using FreeTextSettings. + +After changing default values, the selected values are applied. The following example sets default free text annotation settings. {% tabs %} {% highlight js tabtitle="Standalone" %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/ink-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/ink-annotation.md index fb065ac2b..08b81fb0b 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/ink-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/ink-annotation.md @@ -1,30 +1,30 @@ --- layout: post -title: Ink annotation in React Pdfviewer component | Syncfusion -description: Learn here all about Ink annotation in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Ink annotation +title: Ink annotation in React PDF Viewer control | Syncfusion +description: Learn about ink annotations in the Syncfusion React PDF Viewer (Essential JS 2): add, edit, delete, and default settings. +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Ink annotation in React Pdfviewer component +# Ink annotation in React PDF Viewer -The PDF Viewer control provides the options to add, edit, and delete the ink annotations. +The PDF Viewer control provides options to add, edit, and delete ink annotations. -![InkAnnotation](../images/ink_annotation.png) +![Ink annotations overview](../images/ink_annotation.png) -## Adding an ink annotation to the PDF document +## Add an ink annotation to the PDF document -The ink annotations can be added to the PDF document using the annotation toolbar. +Ink annotations can be added to the PDF document using the annotation toolbar. -* Click the **Edit Annotation** button in the PDF Viewer toolbar. A toolbar appears below it. -* Select the **Draw Ink** button in the annotation toolbar. It enables the ink annotation mode. -* You can draw anything over the pages of the PDF document. +* Click the **Edit Annotation** button in the PDF Viewer toolbar. The annotation toolbar appears below it. +* Select the **Draw Ink** button to enable ink annotation mode. +* Draw on any page of the PDF document. - ![InkTool](../images/ink_tool.png) + ![Ink tool in the annotation toolbar](../images/ink_tool.png) -Refer to the following code sample to switch to the ink annotation mode. +The following example switches to ink annotation mode. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -103,11 +103,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Adding a Ink annotation to the PDF document Programmatically +## Add an ink annotation programmatically to the PDF document -With the PDF Viewer library, you can add a Ink annotation to the PDF Viewer control programmatically using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotationn) method. +The PDF Viewer library allows adding an ink annotation programmatically using the [addAnnotation()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#annotation) method. -Here's a example of how you can utilize the **addAnnotation()** method to include a Ink annotation programmatically +Here is an example of adding an ink annotation programmatically using addAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -198,11 +198,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Edit the existing Ink annotation programmatically +## Edit an existing ink annotation programmatically -To modify existing Ink annotation in the Syncfusion® PDF viewer programmatically, you can use the **editAnnotation()** method. +To modify an existing ink annotation programmatically, use the editAnnotation() method. -Here is an example of how you can use the **editAnnotation()** method: +Here is an example of using editAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -303,33 +303,33 @@ root.render(); {% endhighlight %} {% endtabs %} -## Editing the properties of the ink annotation +## Edit the properties of ink annotations -The stroke color, thickness, and opacity of the ink annotation can be edited using the Edit stroke color tool, Edit thickness tool, and Edit opacity tool in the annotation toolbar. +Stroke color, thickness, and opacity can be edited using the Edit Stroke Color, Edit Thickness, and Edit Opacity tools in the annotation toolbar. -### Editing stroke color +### Edit stroke color -The stroke color of the annotation can be edited using the color palette provided in the Edit Stroke Color tool. +Edit the stroke color using the color palette in the Edit Stroke Color tool. -![InkStrokeColor](../images/ink_strokecolor.png) +![Change ink stroke color](../images/ink_strokecolor.png) -### Editing thickness +### Edit thickness -The thickness of the border of the annotation can be edited using the range slider provided in the Edit Thickness tool. +Edit thickness using the range slider in the Edit Thickness tool. -![InkThickness](../images/ink_thickness.png) +![Change ink thickness](../images/ink_thickness.png) -### Editing opacity +### Edit opacity -The opacity of the annotation can be edited using the range slider provided in the Edit Opacity tool. +Edit opacity using the range slider in the Edit Opacity tool. -![InkOpacity](../images/ink_opacity.png) +![Change ink opacity](../images/ink_opacity.png) -## Setting default properties during the control initialization +## Set default properties during the control initialization -The properties of the ink annotation can be set before creating the control using the InkAnnotationSettings. +Default properties for ink annotations can be set before creating the control using InkAnnotationSettings. -After editing the default values, they will be changed to the selected values. Refer to the following code sample to set the default ink annotation settings. +After changing default values, the selected values are applied. {% tabs %} {% highlight js tabtitle="Standalone" %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md index c3f6bf18d..e770c02c2 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md @@ -1,18 +1,18 @@ --- layout: post -title: Line Angle Constraints in React PDF Viewer | Syncfusion -description: Learn all about Line Angle Constraints Annotation in the Syncfusion React PDF Viewer component of Essential JS 2 and more. +title: Line angle constraints in React PDF Viewer | Syncfusion +description: Learn to add, edit, delete, and configure highlight, underline, strikethrough, and squiggly text markup annotations programmatically. platform: document-processing -control: Line Angle Constraints +control: PDF Viewer documentation: ug --- -# Line Angle Constraints in React PDF Viewer +# Line angle constraints in React PDF Viewer The PDF Viewer control provides robust **line angle constraints** functionality. This allows users to draw line type annotations with controlled angle snapping, improving accuracy and consistency across technical drawings and measurements across your PDF documents. -## Enabling Line Angle Constraints -To enable line angle constraints, configure the `enableLineAngleConstraints` property within the `annotationDrawingOptions` of the PDF Viewer. When enabled, line-type annotations are automatically restricted to fixed angles. +## Enable line angle constraints +Configure the `enableLineAngleConstraints` property within `annotationDrawingOptions`. When enabled, supported line-type annotations snap to fixed angles. The following code demonstrates how to enable line angle constraints: @@ -69,48 +69,49 @@ The `enableLineAngleConstraints` property activates angle snapping for line-base - Automatic angle snapping during the drawing - Enhanced precision for technical drawings and measurements -- Desktop support: Hold **Shift** while drawing to activate constraints +- Desktop behavior: hold Shift while drawing to toggle constraints (when disabled, Shift temporarily enables; when enabled, Shift enforces snapping) - Real-time visual feedback showing angle snapping behavior ### restrictLineAngleTo -The `restrictLineAngleTo` property defines the angle increment (in degrees) that constrains line-based annotations. The default value is **45 degrees**. +Defines the angle increment (in degrees) used to constrain supported annotations. The default is 45. -**Angle Snapping Rules:** +Angle snapping rules: - The initial drawing direction is treated as the 0° reference point - Snapped angles are calculated based on the increment - If the increment doesn’t divide 360 evenly, angles reset after 360° -**Examples:** +Examples - restrictLineAngleTo: 45 → Snapped angles: 0°, 45°, 90°, 135°, 180°, 225°, 270°, 315°, 360° - restrictLineAngleTo: 100 → Snapped angles: 0°, 100°, 200°, 300°, 360° -## Working with Constrained Annotations +## Work with constrained annotations ### Drawing Behavior When line angle constraints are enabled: -**Initial Drawing:** Start drawing a line, arrow, polygon, distance, perimeter, area, or volume as usual. -**Angle Snapping:** The line snaps to the nearest allowed angle. -**Visual Feedback:** Snapped angle is shown in real time. -**Completion:** Release to complete the annotation. +- Start drawing a supported annotation (Line, Arrow, Polyline, Distance, or Perimeter). +- The segment snaps to the nearest allowed angle. +- A visual indicator reflects snapping in real time. +- Release to complete the annotation. ### Keyboard Shortcuts -**Desktop Platforms:** - -**Shift + Drag:** Enables angle snapping even when `enableLineAngleConstraints` is false. +Desktop platforms: +- Shift + drag: toggles snapping. If constraints are disabled, Shift temporarily enables them; if enabled, Shift enforces snapping. ### Selector-Based Modifications When modifying existing line annotations using selectors: - Constraints apply based on the original line direction. -- The reference angle (0°) is determined by the lines current orientation. -- Only lines and arrows support constraint snapping during modification. -- Adjustments snap to the configured angle increment relative to the original direction. +- The reference angle (0°) is determined by the line’s current orientation. +- Constraint snapping during modification is supported for Line and Arrow. +- Adjustments snap to the configured angle increment. + +[View a sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) -N> You can refer to our [React PDF Viewer](https://www.syncfusion.com/React-ui-components/React-pdf-viewer) feature tour page for its groundbreaking feature representations. You can also explore our [React PDF Viewer example](https://github.com/syncfusion/ej2-React-samples/tree/master/src/app/pdfviewer) to know how to render and configure the PDF Viewer. +N> Refer to the TypeScript PDF Viewer [feature tour](https://www.syncfusion.com/pdf-viewer-sdk/javascript-pdf-viewer) for feature highlights. Explore the [TypeScript PDF Viewer examples](https://github.com/SyncfusionExamples/typescript-pdf-viewer-examples) to learn how to render and configure the PDF Viewer. diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/measurement-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/measurement-annotation.md index edf9524e4..1537a70dd 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/measurement-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/measurement-annotation.md @@ -1,16 +1,16 @@ --- layout: post -title: Measurement annotation in React Pdfviewer component | Syncfusion -description: Learn here all about Measurement annotation in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Measurement annotation +title: Measurement annotation in React PDF Viewer control | Syncfusion +description: Learn about measurement annotations in the Syncfusion React PDF Viewer (Essential JS 2): distance, perimeter, area, radius, and volume. +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Measurement annotation in React Pdfviewer component +# Measurement annotation in React PDF Viewer -The PDF Viewer provides the options to add measurement annotations. You can measure the page annotations with the help of measurement annotation. The supported measurement annotations in the PDF Viewer control are: +The PDF Viewer provides options to add measurement annotations. The supported measurement annotations are: * Distance * Perimeter @@ -18,22 +18,22 @@ The PDF Viewer provides the options to add measurement annotations. You can meas * Radius * Volume -![CalibrateAnnotation](../images/calibrate_annotation.png) +![Measurement annotations overview](../images/calibrate_annotation.png) ## Adding measurement annotations to the PDF document The measurement annotations can be added to the PDF document using the annotation toolbar. * Click the **Edit Annotation** button in the PDF Viewer toolbar. A toolbar appears below it. -* Click the **Measurement Annotation** dropdown button. A dropdown pop-up will appear and shows the measurement annotations to be added. -* Select the measurement type to be added to the page in the dropdown pop-up. It enables the selected measurement annotation mode. -* You can measure and add the annotation over the pages of the PDF document. +* Click the **Measurement Annotation** drop-down button. The pop-up lists available measurement annotation types. +* Select a measurement type to enable its annotation mode. +* Measure and add annotations on the pages of the PDF document. -In the pan mode, if the measurement annotation mode is entered, the PDF Viewer control will switch to text select mode. +When in pan mode, selecting a measurement annotation switches the PDF Viewer to text select mode. ![CalibrateTool](../images/calibrate_tool.png) -Refer to the following code snippet to switch to distance annotation mode. +The following example switches to distance annotation mode. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -108,11 +108,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Adding a measurement annotation to the PDF document Programmatically +## Add a measurement annotation to the PDF document programmatically -With the PDF Viewer library, you can add a measurement annotation to the PDF Viewer control programmatically using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotationn) method. +The PDF Viewer library allows adding measurement annotations programmatically using the [addAnnotation()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#annotation) method. -Here's a example of how you can utilize the **addAnnotation()** method to include a measurement annotation programmatically: +Here is an example showing how to add measurement annotations programmatically using addAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -272,11 +272,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Edit the existing measurement annotation programmatically +## Edit an existing measurement annotation programmatically -To modify existing measurement annotation in the Syncfusion® PDF viewer programmatically, you can use the **editAnnotation()** method. +To modify an existing measurement annotation programmatically, use the editAnnotation() method. -Here is an example of how you can use the **editAnnotation()** method: +Here is an example of using editAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -474,43 +474,43 @@ root.render(); {% endhighlight %} {% endtabs %} -## Editing the properties of measurement annotation +## Edit the properties of measurement annotations -The fill color, stroke color, thickness, and opacity of the measurement annotation can be edited using the Edit Color tool, Edit Stroke Color tool, Edit Thickness tool, and Edit Opacity tool in the annotation toolbar. +The fill color, stroke color, thickness, and opacity can be edited using the Edit Color, Edit Stroke Color, Edit Thickness, and Edit Opacity tools in the annotation toolbar. -### Editing fill color +### Edit fill color The fill color of the annotation can be edited using the color palette provided in the Edit Color tool. ![CalibrateFillColor](../images/calibrate_fillcolor.png) -### Editing stroke color +### Edit stroke color The stroke color of the annotation can be edited using the color palette provided in the Edit Stroke Color tool. ![CalibrateStrokeColor](../images/calibrate_stroke.png) -### Editing thickness +### Edit thickness -The thickness of the border of the annotation can be edited using the range slider provided in the Edit thickness tool. +Edit border thickness using the range slider provided in the Edit Thickness tool. ![CalibrateThickness](../images/calibrate_thickness.png) -### Editing opacity +### Edit opacity The opacity of the annotation can be edited using the range slider provided in the Edit Opacity tool. ![CalibrateOpacity](../images/calibrate_opacity.png) -### Editing the line properties +### Edit the line properties -The properties of the line shapes such as distance and perimeter annotations can be edited using the Line properties window. It can be opened by selecting the Properties option in the context menu that appears on right-clicking the distance and perimeter annotations. +Line-based measurement annotations (distance and perimeter) have additional options in the Line Properties window. Open it by right-clicking the annotation and selecting Properties from the context menu. ![CalibrateProperty](../images/calibrate_lineprop.png) -## Setting default properties during control initialization +## Set default properties during control initialization -The properties of the shape annotations can be set before creating the control using distanceSettings, perimeterSettings, areaSettings, radiusSettings and volumeSettings. +Default properties for measurement annotations can be set before creating the control using distanceSettings, perimeterSettings, areaSettings, radiusSettings, and volumeSettings. Refer to the following code snippet to set the default annotation settings. diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/shape-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/shape-annotation.md index 9236cfbf2..2ea172f58 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/shape-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/shape-annotation.md @@ -1,16 +1,16 @@ --- layout: post -title: Shape annotation in React Pdfviewer component | Syncfusion -description: Learn here all about Shape annotation in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Shape annotation +title: Shape annotation in React PDF Viewer control | Syncfusion +description: Learn about shape annotations in the Syncfusion React PDF Viewer (Essential JS 2), including add, edit, delete, and default settings. +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Shape annotation in React Pdfviewer component +# Shape annotation in React PDF Viewer -The PDF Viewer control provides the options to add, edit, and delete the shape annotations. The shape annotation types supported in the PDF Viewer control are: +The PDF Viewer control provides options to add, edit, and delete shape annotations. The supported shape annotation types are: * Line * Arrow @@ -18,20 +18,20 @@ The PDF Viewer control provides the options to add, edit, and delete the shape a * Circle * Polygon -![ShapeAnnotation](../images/shape_annot.png) +![Shape annotations overview](../images/shape_annot.png) ## Adding a shape annotation to the PDF document Shape annotations can be added to the PDF document using the annotation toolbar. * Click the **Edit Annotation** button in the PDF Viewer toolbar. A toolbar appears below it. -* Click the **Shape Annotation** drop-down button. A drop-down pop-up will appear and shows the shape annotations to be added. -* Select the shape types to be added to the page in the drop-down pop-up. It enables the selected shape annotation mode. -* You can add the shapes over the pages of the PDF document. +* Click the **Shape Annotation** drop-down button. The pop-up lists available shape annotation types. +* Select a shape type to enable its annotation mode. +* Draw the shape on the pages of the PDF document. -In the pan mode, if the shape annotation mode is entered, the PDF Viewer control will switch to text select mode. +N> When in pan mode and a shape annotation tool is selected, the PDF Viewer switches to text select mode automatically to ensure a smooth interaction experience. -![ShapeTool](../images/shape_toolbar.png) +![Shape annotation toolbar](../images/shape_toolbar.png) Refer to the following code sample to switch to the circle annotation mode. @@ -108,11 +108,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Adding a shape annotation to the PDF document Programmatically +## Add a shape annotation to the PDF document programmatically -With the PDF Viewer library, you can add a shape annotation to the PDF Viewer control programmatically using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotationn) method. +The PDF Viewer library allows adding a shape annotation programmatically using the [addAnnotation()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#annotation) method. -Here's a example of how you can utilize the **addAnnotation()** method to include a shape annotation programmatically: +Here is an example showing how to add shape annotations programmatically using addAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -272,11 +272,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Edit the existing shape annotation programmatically +## Edit an existing shape annotation programmatically -To modify existing shape annotation in the Syncfusion® PDF viewer programmatically, you can use the **editAnnotation()** method. +To modify an existing shape annotation programmatically, use the editAnnotation() method. -Here is an example of how you can use the **editAnnotation()** method: +Here is an example of using editAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -475,39 +475,39 @@ root.render(); ## Editing the properties of the shape annotation -The fill color, stroke color, thickness, and opacity of the shape annotation can be edited using the Edit color tool, Edit stroke color tool, Edit thickness tool, and Edit opacity tool in the annotation toolbar. +The fill color, stroke color, thickness, and opacity of shape annotations can be edited using the Edit Color, Edit Stroke Color, Edit Thickness, and Edit Opacity tools in the annotation toolbar. ### Editing fill color The fill color of the annotation can be edited using the color palette provided in the Edit Color tool. -![ShapeFillColor](../images/shape_fillColor.png) +![Edit fill color for shapes](../images/shape_fillColor.png) ### Editing stroke color The stroke color of the annotation can be edited using the color palette provided in the Edit Stroke Color tool. -![ShapeStrokeColor](../images/shape_strokecolor.png) +![Edit stroke color for shapes](../images/shape_strokecolor.png) ### Editing thickness The thickness of the border of the annotation can be edited using the range slider provided in the Edit Thickness tool. -![ShapeThickness](../images/shape_thickness.png) +![Edit thickness for shapes](../images/shape_thickness.png) ### Editing opacity The opacity of the annotation can be edited using the range slider provided in the Edit Opacity tool. -![ShapeOpacity](../images/shape_opacity.png) +![Edit opacity for shapes](../images/shape_opacity.png) ### Editing the line properties -The properties of the line shapes such as line and arrow annotations can be edited using the Line Properties window. It can be opened by selecting the Properties option in the context menu that appears on right-clicking the line and arrow annotations. +Line and arrow annotations have additional options in the Line Properties window. Open it by right-clicking a line or arrow annotation and selecting Properties from the context menu. Refer to the following code sample to set the default annotation settings. -![ShapeProperty](../images/shape_lineproperty.png) +![Line properties dialog](../images/shape_lineproperty.png) ### Edit annotation programmatically @@ -546,9 +546,9 @@ Here is an example of how you can use this method to delete an annotation: ``` -## Setting default properties during the control initialization +## Set default properties during the control initialization -The properties of the shape annotations can be set before creating the control using LineSettings, ArrowSettings, RectangleSettings, CircleSettings, and PolygonSettings. +Default properties for shape annotations can be set before creating the control using LineSettings, ArrowSettings, RectangleSettings, CircleSettings, and PolygonSettings. {% tabs %} {% highlight js tabtitle="Standalone" %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/signature-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/signature-annotation.md index 1ba197e66..30c88ac24 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/signature-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/signature-annotation.md @@ -1,33 +1,33 @@ --- layout: post -title: Handwritten signature in React PDF Viewer component | Syncfusion -description: Learn here all about handwritten signature in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Handwritten signature +title: Handwritten signature in React PDF Viewer control | Syncfusion +description: Learn about handwritten signatures in the Syncfusion React PDF Viewer (Essential JS 2): add, enable/disable, and edit properties. +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Handwritten signature in React PDF Viewer component +# Handwritten signature in React PDF Viewer -The PDF Viewer control supports adding handwritten signatures to a PDF document. The handwritten signature reduces the paper work of reviewing the content and verifies it digitally. +The PDF Viewer control supports adding handwritten signatures to a PDF document. Handwritten signatures reduce paperwork and enable digital verification. ## Adding a handwritten signature to the PDF document The handwritten signature can be added to the PDF document using the annotation toolbar. * Click the **Edit Annotation** button in the PDF Viewer toolbar. A toolbar appears below it. -* Select the **HandWritten Signature** button in the annotation toolbar. The signature panel will appear. +* Select the **HandWritten Signature** button in the annotation toolbar. The signature panel appears. -![HandWritten Signature](../images/select_sign.png) +![Open the handwritten signature panel](../images/select_sign.png) -* Draw the signature in the signature panel. +* Draw the signature in the panel. -![HandWritten Signature](../images/add_sign.png) +![Draw the handwritten signature](../images/add_sign.png) -* Then click **Create** button and move the signature using the mouse and place them in the desired location. +* Click **Create**, move the signature, and place it at the desired location. -![HandWritten Signature](../images/create_sign.png) +![Place the handwritten signature on the page](../images/create_sign.png) Refer to the following code sample to switch to the handwritten signature mode programmatically. @@ -103,9 +103,9 @@ root.render(); {% endhighlight %} {% endtabs %} -## How to enable the handwritten signature +## Enable the handwritten signature -The following code snippet describes how to enable the handwritten signature in PDF Viewer. When the value is set to `false` it disables the handwritten signature. +The following example enables or disables the handwritten signature in the PDF Viewer. Setting the value to `false` disables the feature. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -176,11 +176,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Adding Handwritten signature to the PDF document Programmatically +## Add a handwritten signature programmatically to the PDF document With the PDF Viewer library, you can programmatically add handwritten signature to the PDF Viewer control using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotation) method. -Here is an example of how you can use the **addAnnotation()** method to add the Handwritten signature programmatically +Here is an example of adding a handwritten signature programmatically using addAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -328,24 +328,24 @@ root.render(); [View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/blob/master/How%20to/Add%20Handwritten%20Signature%20Programmatically) -## Editing the properties of handwritten signature +## Edit the properties of handwritten signatures -The stroke color, border thickness, and opacity of the handwritten signature can be edited using the edit stroke color tool, edit thickness tool, and edit opacity tool in the annotation toolbar. +Stroke color, border thickness, and opacity can be edited using the Edit Stroke Color, Edit Thickness, and Edit Opacity tools in the annotation toolbar. -### Editing stroke color +### Edit stroke color -The stroke color of the annotation can be edited using the color palette provided in the Edit Stroke Color tool. +Edit the stroke color using the color palette in the Edit Stroke Color tool. -![SignatureStrokeColor](../images/change_stroke.png) +![Change signature stroke color](../images/change_stroke.png) -### Editing thickness +### Edit thickness -The thickness of the border of the annotation can be edited using the range slider provided in the Edit Thickness tool. +Edit border thickness using the range slider in the Edit Thickness tool. -![SignatureThickness](../images/change_thickness.png) +![Change signature border thickness](../images/change_thickness.png) -### Editing opacity +### Edit opacity -The opacity of the annotation can be edited using the range slider provided in the Edit Opacity tool. +Edit opacity using the range slider in the Edit Opacity tool. -![SignatureOpacity](../images/change_opacity.png) \ No newline at end of file +![Change signature opacity](../images/change_opacity.png) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/stamp-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/stamp-annotation.md index d670eac46..029525dd5 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/stamp-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/stamp-annotation.md @@ -2,15 +2,15 @@ layout: post title: Stamp annotation in React Pdfviewer component | Syncfusion description: Learn here all about Stamp annotation in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Stamp annotation +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Stamp annotation in React Pdfviewer component +# Stamp annotation in React PDF Viewer -The PDF Viewer control provides options to add, edit, delete, and rotate the following stamp annotation in the PDF documents: +The PDF Viewer control provides options to add, edit, delete, and rotate the following stamp annotations in PDF documents: * Dynamic * Sign Here @@ -19,24 +19,24 @@ The PDF Viewer control provides options to add, edit, delete, and rotate the fol ![StampAnnotation](../images/stamp_annot.png) -## Adding stamp annotations to the PDF document +## Add stamp annotations to the PDF document The stamp annotations can be added to the PDF document using the annotation toolbar. * Click the **Edit Annotation** button in the PDF Viewer toolbar. A toolbar appears below it. -* Click the **Stamp Annotation** drop-down button. A drop-down pop-up will appear and shows the stamp annotations to be added. +* Click the **Stamp Annotation** drop-down button. The pop-up lists available stamp annotation types. ![StampTool](../images/stamp_tool.png) -* Select the annotation type to be added to the page in the pop-up. +* Select a stamp type to enable its annotation mode. ![StampPopup](../images/selectstamp_annot.png) -* You can add the annotation over the pages of the PDF document. +* Place the stamp on the pages of the PDF document. -In the pan mode, if the stamp annotation mode is entered, the PDF Viewer control will switch to text select mode. +N> When in pan mode and a stamp annotation tool is selected, the PDF Viewer switches to text select mode automatically for a smooth interaction experience. -Refer to the following code sample to switch to the stamp annotation mode. +The following examples switch to stamp annotation modes. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -130,23 +130,23 @@ root.render(); {% endhighlight %} {% endtabs %} -## Adding custom stamp to the PDF document +## Add a custom stamp to the PDF document * Click the **Edit Annotation** button in the PDF Viewer toolbar. A toolbar appears below it. -* Click the **Stamp Annotation** drop-down button. A drop-down pop-up will appear and shows the stamp annotations to be added. +* Click the **Stamp Annotation** drop-down button. The pop-up lists available stamp annotation types. * Click the Custom Stamp button. ![CustomStamp](../images/customStamp.png) -* The file explorer dialog will appear, choose the image and then add the image to the PDF page. +* In the file explorer dialog, choose an image and add it to the PDF page. ->The JPG and JPEG image format is only supported in the custom stamp annotations. +>Only JPG and JPEG image formats are supported for custom stamp annotations. -## Adding a Stamp annotation to the PDF document Programmatically +## Add a stamp annotation to the PDF document programmatically -With the PDF Viewer library, you can add a Stamp annotation to the PDF Viewer control programmatically using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotationn) method. +The PDF Viewer library allows adding a stamp annotation programmatically using the [addAnnotation()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#annotation) method. -Here's a example of how you can utilize the **addAnnotation()** method to include a Stamp annotation programmatically: +Here are examples showing how to add stamp annotations programmatically using addAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -303,11 +303,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Edit the existing sticky note annotation programmatically +## Edit an existing stamp annotation programmatically -To modify existing sticky note annotation in the Syncfusion® PDF viewer programmatically, you can use the **editAnnotation()** method. +To modify an existing stamp annotation programmatically, use the editAnnotation() method. -Here is an example of how you can use the **editAnnotation()** method: +Here is an example of using editAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -402,12 +402,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Setting default properties during control initialization +## Set default properties during control initialization -The properties of the stamp annotation can be set before creating the control using the StampSettings. +Default properties for stamp annotations can be set before creating the control using StampSettings. -After editing the default opacity using the Edit Opacity tool, they will be changed to the selected values. -Refer to the following code sample to set the default sticky note annotation settings. +After changing default opacity using the Edit Opacity tool, the selected value is applied. The following example sets default stamp annotation settings. {% tabs %} {% highlight js tabtitle="Standalone" %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/sticky-notes-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/sticky-notes-annotation.md index 1c1c46b3a..58af1de89 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/sticky-notes-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/sticky-notes-annotation.md @@ -1,26 +1,26 @@ --- layout: post -title: Sticky notes annotation in React Pdfviewer component | Syncfusion -description: Learn here all about Sticky notes annotation in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Sticky notes annotation +title: Sticky notes in React PDF Viewer control | Syncfusion +description: Learn about sticky note annotations in the Syncfusion React PDF Viewer (Essential JS 2): add, edit, delete, and default settings. +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Sticky notes annotation in React Pdfviewer component +# Sticky notes annotation in React PDF Viewer -The PDF Viewer control provides the options to add, edit, and delete the sticky note annotations in the PDF document. +The PDF Viewer control provides options to add, edit, and delete sticky note annotations in the PDF document. ![StickyNotesAnnotation](../images/stickynotes_annotation.png) -## Adding a sticky note annotation to the PDF document +## Add a sticky note annotation to the PDF document -Sticky note annotations can be added to the PDF document using the annotation toolbar. +Annotation comments can be added using the comment panel. -* Click the **Comments** button in the PDF Viewer toolbar. A toolbar appears below it. -* Click the position where you want to add sticky note annotation in the PDF document. -* Sticky note annotation will be added in the clicked positions. +* Select a sticky note annotation in the PDF document and right-click it. +* Select Comment from the context menu. +* Add comments, replies, and status using the comment panel. ![StickyNotesTool](../images/stickynotes_tool.png) @@ -33,11 +33,11 @@ Sticky note annotations can be added to the PDF document using the annotation to ![StickyNotesComment](../images/stickynotes_comment.png) -## Adding a sticky note annotation to the PDF document Programmatically +## Add a sticky note annotation to the PDF document programmatically -With the PDF Viewer library, you can add a sticky note annotation to the PDF Viewer control programmatically using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotationn) method. +With the PDF Viewer library, you can add a sticky note annotation to the PDF Viewer control programmatically using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#annotation) method. -Here's a example of how you can utilize the **addAnnotation()** method to include a sticky note annotation programmatically: +Here is an example showing how to add a sticky note annotation programmatically using addAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -124,11 +124,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Edit the existing sticky note annotation programmatically +## Edit an existing sticky note annotation programmatically -To modify existing sticky note annotation in the Syncfusion® PDF viewer programmatically, you can use the **editAnnotation()** method. +To modify an existing sticky note annotation programmatically, use the editAnnotation() method. -Here is an example of how you can use the **editAnnotation()** method: +Here is an example of using editAnnotation(): {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -223,31 +223,31 @@ root.render(); {% endhighlight %} {% endtabs %} -## Editing the properties of the sticky note annotation +## Edit the properties of sticky note annotations ### Editing opacity -The opacity of the annotation can be edited using the range slider provided in the Edit Opacity tool. +Edit opacity using the range slider in the Edit Opacity tool. ![StickyNotesOpacity](../images/sticky_opacity.png) ### Editing comments -The comment, comment reply, and comment status of the annotation can be edited using the Comment Panel. +Comment text, replies, and status can be edited using the comment panel. -* Open the comment panel using the Comment Panel button showing in the annotation toolbar. +* Open the comment panel using the Comment Panel button in the annotation toolbar. ![StickyNotesComment](../images/commentPanel.png) -You can modify or delete the comments or comments replay and it’s status using the menu option provided in the comment panel. +Modify or delete comments or replies, and change status using the menu options in the comment panel. ![StickyNotesEdit](../images/sticky_editbtn.png) -## Setting default properties during the control initialization +## Set default properties during control initialization -The properties of the sticky note annotation can be set before creating the control using the StickyNoteSettings. +Default properties for sticky note annotations can be set before creating the control using StickyNotesSettings. -After editing the default opacity using the Edit Opacity tool, they will be changed to the selected values. Refer to the following code sample to set the default sticky note annotation settings. +After changing default opacity using the Edit Opacity tool, the selected value is applied. The following example sets default sticky note annotation settings. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -314,9 +314,9 @@ root.render(); {% endhighlight %} {% endtabs %} -## Disabling sticky note annotations +## Disable sticky note annotations -The PDF Viewer control provides an option to disable the sticky note annotations feature. The code sample for disabling the feature is as follows. +The PDF Viewer control provides an option to disable sticky note annotations. The following example disables the feature. {% tabs %} {% highlight js tabtitle="Standalone" %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md index 26d1055e2..d92c2b733 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md @@ -1,38 +1,38 @@ --- layout: post -title: Text markup annotation in React Pdfviewer component | Syncfusion -description: Learn here all about Text markup annotation in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Text markup annotation +title: Text markup annotation in React PDF Viewer | Syncfusion +description: Learn to add, edit, delete, and customize text markup annotations like highlight, underline, and squiggly in Syncfusion React PDF Viewer. +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Text markup annotation in React Pdfviewer component +# Text markup annotation in TypeScript PDF Viewer -The PDF Viewer control provides the options to add, edit, and delete text markup annotations such as highlight, underline, strikethrough and squiggly annotations in the PDF document. +The PDF Viewer provides options to add, edit, and delete text markup annotations, including Highlight, Underline, Strikethrough, and Squiggly. ![Alt text](../images/text_markup_annotation.png) -## Highlight a text +## Highlight text -There are two ways to highlight a text in the PDF document: +There are two ways to highlight text: 1.Using the context menu - * Select a text in the PDF document and right-click it. - * Select **Highlight** option in the context menu that appears. +* Select text in the PDF document and right-click it. +* Select **Highlight** in the context menu. ![Alt text](../images/highlight_context.png) 2.Using the annotation toolbar - * Click the **Edit Annotation** button in the PDF Viewer toolbar. A toolbar appears below it. - * Select the **Highlight** button in the annotation toolbar. It enables the highlight mode. - * Select the text and the highlight annotation will be added. - * You can also select the text and apply the highlight annotation using the **Highlight** button. +* Click the **Edit Annotation** button in the PDF Viewer toolbar to open the annotation toolbar. +* Select **Highlight** to enable highlight mode. +* Select text to add the highlight annotation. +* Alternatively, select text first and then click **Highlight**. ![Alt text](../images/highlight_button.png) -In the pan mode, if the highlight mode is entered, the PDF Viewer control will switch to text select mode to enable the text selection for highlighting the text. +When pan mode is active and a text markup mode is entered, the PDF Viewer switches to text selection mode to enable selection. Refer to the following code snippet to switch to highlight mode. @@ -201,11 +201,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Highlight a text programmatically +## Highlight text programmatically -The PDF Viewer library enables you to programmatically highlight text within the PDF Viewer control using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotationn) method. +Programmatically add highlights using the [addAnnotation](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotation) method. -Here's an example of how you can use the **addAnnotation()** method to apply highlighting programmatically: +Example: {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -290,21 +290,21 @@ root.render(); {% endhighlight %} {% endtabs %} -## Underline a text +## Underline text -There are two ways to underline a text in the PDF document: +There are two ways to underline text: 1.Using the context menu - * Select a text in the PDF document and right-click it. - * Select **Underline** option in the context menu that appears. +* Select text in the PDF document and right-click it. +* Select **Underline** in the context menu. ![Alt text](../images/underline_context.png) 2.Using the annotation toolbar - * Click the **Edit Annotation** button in the PDF Viewer toolbar. A toolbar appears below it. - * Select the **Underline** button in the annotation toolbar. It enables the underline mode. - * Select the text and the underline annotation will be added. - * You can also select the text and apply the underline annotation using the **Underline** button. +* Click the **Edit Annotation** button in the PDF Viewer toolbar to open the annotation toolbar. +* Select **Underline** to enable underline mode. +* Select text to add the underline annotation. +* Alternatively, select text first and then click **Underline**. ![Alt text](../images/underline_button.png) @@ -474,11 +474,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Underline a text programmatically +## Underline text programmatically -The PDF Viewer library enables you to programmatically Underline text within the PDF Viewer control using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotationn) method. +Programmatically add underlines using the [addAnnotation](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotation) method. -Here's an example of how you can use the **addAnnotation()** method to apply Underline programmatically: +Example: {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -563,21 +563,21 @@ root.render(); {% endhighlight %} {% endtabs %} -## Strikethrough a text +## Strikethrough text -There are two ways to strikethrough a text in the PDF document: +There are two ways to strikethrough text: 1.Using the context menu - * Select a text in the PDF document and right-click it. - * Select **Strikethrough** option in the context menu that appears. +* Select text in the PDF document and right-click it. +* Select **Strikethrough** in the context menu. ![Alt text](../images/strikethrough_context.png) 2.Using the annotation toolbar - * Click the **Edit Annotation** button in the PDF Viewer toolbar. A toolbar appears below it. - * Select the **Strikethrough** button in the annotation toolbar. It enables the strikethrough mode. - * Select the text and the strikethrough annotation will be added. - * You can also select the text and apply the strikethrough annotation using the **Strikethrough** button. +* Click the **Edit Annotation** button in the PDF Viewer toolbar to open the annotation toolbar. +* Select **Strikethrough** to enable strikethrough mode. +* Select text to add the strikethrough annotation. +* Alternatively, select text first and then click **Strikethrough**. ![Alt text](../images/strikethrough_button.png) @@ -752,11 +752,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Strikethrough a text programmatically +## Strikethrough text programmatically -The PDF Viewer library enables you to programmatically Strikethrough text within the PDF Viewer control using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotationn) method. +Programmatically add strikethrough using the [addAnnotation](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotation) method. -Here's an example of how you can use the **addAnnotation()** method to apply Strikethrough programmatically: +Example: {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -841,21 +841,21 @@ root.render(); {% endhighlight %} {% endtabs %} -## Squiggly a text +## Add squiggly to text -There are two ways to add squiggly to a text in the PDF document: +There are two ways to add squiggly to text: 1.Using the context menu - * Select a text in the PDF document and right-click it. - * Select **Squiggly** option in the context menu that appears. +* Select text in the PDF document and right-click it. +* Select **Squiggly** in the context menu. ![Alt text](../images/squiggly_context.png) 2.Using the annotation toolbar - * Click the **Edit Annotation** button in the PDF Viewer toolbar. A toolbar appears below it. - * Select the **Squiggly** button in the annotation toolbar. It enables the squiggly mode. - * Select the text and the squiggly annotation will be added. - * You can also select the text and apply the squiggly annotation using the **Squiggly** button. +* Click the **Edit Annotation** button in the PDF Viewer toolbar to open the annotation toolbar. +* Select **Squiggly** to enable squiggly mode. +* Select text to add the squiggly annotation. +* Alternatively, select text first and then click **Squiggly**. ![Alt text](../images/squiggly_button.png) @@ -1030,11 +1030,11 @@ root.render(); {% endhighlight %} {% endtabs %} -## Squiggly a text programmatically +## Add squiggly to text programmatically -The PDF Viewer library enables you to programmatically Squiggly text within the PDF Viewer control using the [**addAnnotation()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotationn) method. +Programmatically add squiggly using the [addAnnotation](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotation/#addannotation) method. -Here's an example of how you can use the **addAnnotation()** method to apply Squiggly programmatically: +Example: {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -1121,39 +1121,39 @@ root.render(); ## Deleting a text markup annotation -The selected annotation can be deleted by the following ways: +The selected annotation can be deleted in the following ways: -1.Using Delete key - * Select the annotation to be deleted. - * Click the Delete key in the keyboard. The selected annotation will be deleted. +1.Using the Delete/Backspace key + * Select the annotation. + * Press Delete (or Backspace). The selected annotation is removed. 2.Using the annotation toolbar - * Select the annotation to be deleted. - * Click the **Delete Annotation** button in the annotation toolbar. The selected annotation will be deleted. + * Select the annotation. + * Click **Delete Annotation** in the annotation toolbar. The selected annotation is removed. ![Alt text](../images/delete_button.png) -## Editing the properties of the text markup annotation +## Edit text markup annotation properties The color and the opacity of the text markup annotation can be edited using the Edit Color tool and the Edit Opacity tool in the annotation toolbar. -### Editing color +### Edit color -The color of the annotation can be edited using the color palette provided in the Edit Color tool. +Use the color palette in the Edit Color tool to change the annotation color. ![Alt text](../images/edit_color.png) -### Editing opacity +### Edit opacity -The opacity of the annotation can be edited using the range slider provided in the Edit Opacity tool. +Use the range slider in the Edit Opacity tool to change annotation opacity. ![Alt text](../images/edit_opacity.png) -## Setting default properties during control initialization +## Set default properties during control initialization -The properties of the text markup annotation can be set before creating the control using highlightSettings, underlineSettings, strikethroughSettings and squigglySettings. +Set default properties before creating the control using `highlightSettings`, `underlineSettings`, `strikethroughSettings`, and `squigglySettings`. ->After editing the default color and opacity using the Edit Color tool and Edit Opacity tool, they will be changed to the selected values. +> After editing default color and opacity using the Edit Color and Edit Opacity tools, the values update to the selected settings. Refer to the following code snippet to set the default annotation settings. @@ -1233,22 +1233,22 @@ root.render(); {% endhighlight %} {% endtabs %} -## Performing undo and redo +## Perform undo and redo -The PDF Viewer performs undo and redo for the changes made in the PDF document. In text markup annotation, undo and redo actions are provided for: +The PDF Viewer supports undo and redo for changes. For text markup annotations, undo and redo are provided for: * Inclusion of the text markup annotations. * Deletion of the text markup annotations. * Change of either color or opacity of the text markup annotations. - Undo and redo actions can be done by the following ways: +Undo and redo actions can be performed in the following ways: 1.Using keyboard shortcuts: - After performing a text markup annotation action, you can undo it by using Ctrl + Z shortcut and redo by using Ctrl + Y shortcut. -2.Using toolbar: - Undo and redo can be done using the **Undo** tool and **Redo** tool provided in the toolbar. + After performing a text markup annotation action, press Ctrl+Z to undo and Ctrl+Y to redo. +2.Using the toolbar: + Use the **Undo** and **Redo** tools in the toolbar. -Refer to the following code snippet for calling undo and redo actions from the client-side. +Refer to the following code snippet to call undo and redo actions from the client side. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -1338,17 +1338,17 @@ root.render(); {% endhighlight %} {% endtabs %} -## Saving the text markup annotation +## Save text markup annotations -When you click the download tool in the toolbar, the text markup annotations will be saved in the PDF document. This action will not affect the original document. +Click the download tool in the toolbar to save text markup annotations to the PDF document. The original document is not modified. -## Printing the text markup annotation +## Print text markup annotations -When the print tool is selected in the toolbar, the PDF document will be printed along with the text markup annotations added to the pages. This action will not affect the original document. +Click the print tool in the toolbar to print the PDF document with text markup annotations. The original document is not modified. -## Disabling text markup annotation +## Disable text markup annotation -The PDF Viewer control provides an option to disable the text markup annotation feature. The code snippet for disabling the feature is as follows. +Disable text markup annotations using the `enableTextMarkupAnnotation` property. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -1424,4 +1424,4 @@ root.render(); ## See also * [Toolbar items](../../pdfviewer/toolbar) -* [Feature Modules](../../pdfviewer/feature-module) \ No newline at end of file +* [Feature modules](../../pdfviewer/feature-module) \ No newline at end of file From a7d7d14c5d5c86b94f071f4e64a7a16826bfb78e Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 15 Oct 2025 13:36:50 +0530 Subject: [PATCH 02/47] 984044: FormDesigner changes --- .../form-designer/create-programmatically.md | 147 +++++++-------- .../create-with-user-interface-interaction.md | 55 +++--- .../react/form-designer/form-field-events.md | 4 +- .../programmatically-work-with-form-field.md | 175 ------------------ .../user-interaction-with-form-fields.md | 139 -------------- 5 files changed, 103 insertions(+), 417 deletions(-) delete mode 100644 Document-Processing/PDF/PDF-Viewer/react/formdesigner/programmatically-work-with-form-field.md delete mode 100644 Document-Processing/PDF/PDF-Viewer/react/formdesigner/user-interaction-with-form-fields.md diff --git a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md index 4d0405d2b..df0a84513 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md +++ b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md @@ -1,29 +1,28 @@ --- layout: post -title: Create programmatically in React Pdfviewer component | Syncfusion -description: Learn here all about Create programmatically in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Create programmatically +title: Create form fields in the React PDF Viewer component | Syncfusion +description: Learn how to add, update, delete, save, print, validate, and import/export form fields in the Syncfusion React PDF Viewer component. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Create programmatically in React Pdfviewer component +# Create programmatically in Typescript Pdf viewer control -The PDF Viewer control provides the option to add, edit and delete the Form Fields. The Form Fields type supported by the PDF Viewer Control are: +The PDF Viewer component provides options to add, edit, and delete form fields. The supported form field types are: - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField +- Textbox +- Password +- CheckBox +- RadioButton +- ListBox +- DropDown +- Signature field +- Initial field ## Add a form field to PDF document programmatically -Using addFormField method, the form fields can be added to the PDF document programmatically. We need to pass two parameters in this method. They are Form Field Type and Properties of Form Field Type. To add form field programmatically, Use the following code. +Use the addFormField method to add form fields programmatically. Pass the form field type and the corresponding property object as parameters. The following example demonstrates adding multiple fields on document load. {% tabs %} {% highlight js tabtitle="index.JSX" %} @@ -133,14 +132,14 @@ root.render(); {% endhighlight %} {% endtabs %} -N> To set up the **server-backed PDF Viewer**, add the following `serviceUrl` within the
element in either the `index.TSX` or `index.JSX` file: -**serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer"**. +N> To configure the server-backed PDF Viewer, add the following `serviceUrl` in the `index.ts` file: +`pdfviewer.serviceUrl = 'https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/';` {% previewsample "Document-Processing/code-snippet/pdfviewer/react/addformfield-cs1/index.html" %} ## Edit/Update form field programmatically -Using updateFormField method, Form Field can be updated programmatically. We should get the Form Field object/Id from FormFieldCollections property that you would like to edit and pass it as a parameter to updateFormField method. The second parameter should be the properties that you would like to update for Form Field programmatically. We have updated the value and background Color properties of Textbox Form Field. +Use the updateFormField method to modify a form field programmatically. Retrieve the target field from the formFieldCollections property (by object or ID) and pass it as the first parameter. Provide the properties to update as the second parameter. The following example updates the background color of a Textbox field. {% tabs %} {% highlight js tabtitle="index.JSX" %} @@ -251,14 +250,14 @@ root.render(); {% endhighlight %} {% endtabs %} -N> To set up the **server-backed PDF Viewer**, add the following `serviceUrl` within the
element in either the `index.TSX` or `index.JSX` file: -**serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer"**. +N> To configure the server-backed PDF Viewer, add the following `serviceUrl` in the `index.ts` file: +`pdfviewer.serviceUrl = 'https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/';` {% previewsample "Document-Processing/code-snippet/pdfviewer/react/updateformfield-cs1/index.html" %} ## Delete form field programmatically -Using deleteFormField method, the form field can be deleted programmatically. We should retrieve the Form Field object/Id from FormFieldCollections property that you would like to delete and pass it as a parameter to deleteFormField method. To delete a Form Field programmatically, use the following code. +Use the deleteFormField method to remove a form field programmatically. Retrieve the target field from the formFieldCollections property (by object or ID) and pass it to deleteFormField. The following example deletes the first form field. {% tabs %} {% highlight js tabtitle="index.JSX" %} @@ -369,14 +368,14 @@ root.render(); {% endhighlight %} {% endtabs %} -N> To set up the **server-backed PDF Viewer**, add the following `serviceUrl` within the
element in either the `index.TSX` or `index.JSX` file: -**serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer"**. +N> To configure the server-backed PDF Viewer, add the following `serviceUrl` in the `index.ts` file: +`pdfviewer.serviceUrl = 'https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/';` {% previewsample "Document-Processing/code-snippet/pdfviewer/react/deleteformfield-cs1/index.html" %} ## setFormFieldMode programmatically -The `setFormFieldMode` method is a function in the Syncfusion® React PDF Viewer library that allows you to add a form field dynamically by passing the type of the form field. You can pass the form fields as a parameter like below. +The setFormFieldMode method enables adding a form field dynamically by specifying the field type. For example, the following adds a Password field when a button is clicked. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -451,11 +450,11 @@ root.render(); ## Saving the form fields -When the download icon is selected on the toolbar, the Form Fields will be saved in the PDF document and this action will not affect the original document. Refer the below GIF for further reference. +Selecting the Download icon on the toolbar saves the form fields in the exported PDF without modifying the original document. See the following GIF for reference. -![Alt text](../images/saveformfield.gif) +![Save form fields from the PDF Viewer](../images/saveformfield.gif) -You can invoke download action using following code snippet., +You can invoke the download action using the following code snippet. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -532,9 +531,11 @@ root.render(); ## Printing the form fields -When the print icon is selected on the toolbar, the PDF document will be printed along with the Form Fields added to the pages and this action will not affect the original document. Refer the below GIF for further reference. +Selecting the Print icon on the toolbar prints the PDF with the added form fields. This action does not modify the original document. See the following GIF for reference. -![Alt text](../images/printformfield.gif) +![Print the PDF with form fields](../images/printformfield.gif) + +You can invoke the print action using the following code snippet: {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -603,15 +604,15 @@ root.render(); ## Open the existing PDF document -We can open the already saved PDF document contains Form Fields in it by clicking the open icon in the toolbar. Refer the below GIF for further reference. +Open a PDF that already contains form fields by clicking the Open icon on the toolbar. See the following GIF for reference. -![Alt text](../images/openexistingpdf.gif) +![Open a PDF with existing form fields](../images/openexistingpdf.gif) ## Validate form fields -The form fields in the PDF Document will be validated when the `enableFormFieldsValidation` is set to true and hook the validateFormFields. The validateFormFields will be triggered when the PDF document is downloaded or printed with the non-filled form fields. The non-filled fields will be obtained in the `nonFillableFields` property of the event arguments of validateFormFields. +Form fields are validated when enableFormFieldsValidation is set to true and the validateFormFields event is handled. The event triggers during download or print if required fields are not filled. The non-filled fields are available in the nonFillableFields property of the event arguments. -Add the following code snippet to validate the form fields, +Add the following code to validate form fields: {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -700,11 +701,11 @@ root.render(); ## Export and import form fields -The PDF Viewer control provides the support to export and import the form field data in the following formats using the methods `importFormFields`, `exportFormFields`, `exportFormFieldsAsObject`. +The PDF Viewer component supports exporting and importing form field data using the importFormFields, exportFormFields, and exportFormFieldsAsObject methods in the following formats: -* FDF -* XFDF -* JSON +- FDF +- XFDF +- JSON ### Export and import as FDF @@ -713,7 +714,7 @@ Using the `exportFormFields` method, the form field data can be exported in the * The first one must be the destination path for the exported data. If path is not specified, it will ask for the location while exporting. * The second parameter should be the format type of the form data. -The following code explains how to export and import the form field data as FDF. +The following example exports and imports form field data as FDF. ``` @@ -740,7 +741,7 @@ function OnImportFdf() { ### Export and import as XFDF -The following code explains how to export and import the form field data as XFDF. +The following example exports and imports form field data as XFDF. ``` @@ -767,7 +768,7 @@ function OnImportXfdf(){ ### Export and import as JSON -The following code explains how to export and import the form field data as JSON. +The following example exports and imports form field data as JSON. ``` @@ -794,7 +795,7 @@ function OnImportJson(){ ### Export and import as Object -The PDF Viewer control supports exporting the form field data as an object, and the exported data will be imported into the current PDF document from the object. +The PDF Viewer component supports exporting the form field data as an object and importing that data back into the current PDF document. The following code shows how to export the form field data as an object and import the form field data from that object into the current PDF document via a button click. @@ -832,20 +833,20 @@ function importData(){ ``` ## Form field properties -Form field properties in Syncfusion® PDF Viewer allow you to customize and interact with form fields embedded within PDF documents. This documentation provides an overview of the form field properties supported by the Syncfusion® PDF Viewer and explains how to use them effectively. +Form field properties allow customization and interaction with fields embedded in PDF documents. The following sections outline the supported field types and their configurable settings. - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField +- Textbox +- Password +- CheckBox +- RadioButton +- ListBox +- DropDown +- Signature field +- Initial field ### Signature and initial fields settings -Using the `updateFormField` method, the form fields can be updated programmatically. +Use the updateFormField method to modify form fields programmatically. The following code example explains how to update the signature field properties on a button click. @@ -870,7 +871,7 @@ function updateProperties(){ } ``` -The following code example explains how to update the properties of the signature field added to the document from the form designer toolbar. +The following code shows how to configure default properties for a signature field added from the Form Designer toolbar. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -1005,10 +1006,10 @@ root.render(); {% endhighlight %} {% endtabs %} -![Signature Field Settings](../images/SignatureField.png) +![Signature field settings in the PDF Viewer](../images/SignatureField.png) -The following code example explains how to update the properties of the initial field added to the document from the form designer toolbar. +The following code shows how to configure default properties for an initial field added from the Form Designer toolbar. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -1126,13 +1127,13 @@ root.render(); {% endtabs %} -![Initial Field Settings](../images/InitialField.png) +![Initial field settings in the PDF Viewer](../images/InitialField.png) ### Textbox field settings Using the `updateFormField` method, the form fields can be updated programmatically. -The following code example explains how to update the Textbox field properties on a button click. +The following example updates Textbox field properties on a button click. ```html @@ -1166,7 +1167,7 @@ The following code example explains how to update the Textbox field properties o } ``` -The following code example explains how to update the properties of the Textbox field added to the document from the form designer toolbar. +The following code shows how to configure default properties for a Textbox field added from the Form Designer toolbar. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -1312,13 +1313,13 @@ root.render(); {% endhighlight %} {% endtabs %} -![Textbox Field Settings](../images/Textbox.png) +![Textbox field settings in the PDF Viewer](../images/Textbox.png) ### Password field settings Using the `updateFormField` method, the form fields can be updated programmatically. -The following code example explains how to update the Password field properties on a button click. +The following example updates Password field properties on a button click. ```html @@ -1351,7 +1352,7 @@ The following code example explains how to update the Password field properties } ``` -The following code example explains how to update the properties of the Password field added to the document from the form designer toolbar. +The following code shows how to configure default properties for a Password field added from the Form Designer toolbar. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -1494,13 +1495,13 @@ root.render(); {% endhighlight %} {% endtabs %} -![Password Field Settings](../images/Password.png) +![Password field settings in the PDF Viewer](../images/Password.png) ### CheckBox field settings Using the `updateFormField` method, the form fields can be updated programmatically. -The following code example explains how to update the CheckBox field properties on a button click. +The following example updates CheckBox field properties on a button click. ```html @@ -1527,7 +1528,7 @@ The following code example explains how to update the CheckBox field properties } ``` -The following code example explains how to update the properties of the CheckBox field added to the document from the form designer toolbar. +The following code shows how to configure default properties for a CheckBox field added from the Form Designer toolbar. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -1655,13 +1656,13 @@ root.render(); {% endtabs %} -![CheckBox Field Settings](../images/Checkbox.png) +![CheckBox field settings in the PDF Viewer](../images/Checkbox.png) ### RadioButton field settings Using the `updateFormField` method, the form fields can be updated programmatically. -The following code example explains how to update the RadioButton field properties on a button click. +The following example updates RadioButton field properties on a button click. ```html @@ -1688,7 +1689,7 @@ The following code example explains how to update the RadioButton field properti } ``` -The following code example explains how to update the properties of the RadioButton field added to the document from the form designer toolbar. +The following code shows how to configure default properties for a RadioButton field added from the Form Designer toolbar. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -1819,13 +1820,13 @@ root.render(); {% endhighlight %} {% endtabs %} -![RadioButton Field Settings](../images/Radiobutton.png) +![RadioButton field settings in the PDF Viewer](../images/Radiobutton.png) ### ListBox field settings Using the `updateFormField` method, the form fields can be updated programmatically. -The following code example explains how to update the ListBox field properties on a button click. +The following example updates ListBox field properties on a button click. ```html @@ -1859,7 +1860,7 @@ The following code example explains how to update the ListBox field properties o ``` -The following code example explains how to update the properties of the ListBox field added to the document from the form designer toolbar. +The following code shows how to configure default properties for a ListBox field added from the Form Designer toolbar. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -2004,13 +2005,13 @@ root.render(); {% endhighlight %} {% endtabs %} -![ListBox Field Settings](../images/Listbox.png) +![ListBox field settings in the PDF Viewer](../images/Listbox.png) ### DropDown field settings Using the `updateFormField` method, the form fields can be updated programmatically. -The following code example explains how to update the DropDown field properties on a button click. +The following example updates DropDown field properties on a button click. ```typescript @@ -2040,7 +2041,7 @@ The following code example explains how to update the DropDown field properties ``` -The following code example explains how to update the properties of the DropDown field added to the document from the form designer toolbar. +The following code shows how to configure default properties for a DropDown field added from the Form Designer toolbar. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -2188,4 +2189,4 @@ root.render(); {% endtabs %} -![DropDown Field Settings](../images/Dropdown.png) \ No newline at end of file +![DropDown field settings in the PDF Viewer](../images/Dropdown.png) diff --git a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-with-user-interface-interaction.md b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-with-user-interface-interaction.md index 4a0f011b1..3a6543b59 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-with-user-interface-interaction.md +++ b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-with-user-interface-interaction.md @@ -1,29 +1,28 @@ --- layout: post -title: User interaction in React Pdfviewer component | Syncfusion -description: Learn here all about Create with user interface interaction in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Create with user interface interaction +title: Design form fields in the React PDF Viewer component | Syncfusion +description: Learn how to add, drag, resize, edit, and manage form fields using the UI in the Syncfusion React PDF Viewer component. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Create with user interface interaction +# Create with user interface interaction for React -The PDF viewer control provides the option for interaction with Form Fields such as Drag and resize. you can draw a Form Field dynamically by clicking the Form Field icon on the toolbar and draw it in the PDF document. The Form Fields type supported by the PDF Viewer Control are: +The PDF Viewer component supports interactive form field design, including drawing, dragging, and resizing fields directly on the page. Click the Form Field icon on the toolbar to add a field and place it on the document. Supported form field types include: - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField +- Textbox +- Password +- CheckBox +- RadioButton +- ListBox +- DropDown +- Signature field +- Initial field ## Enable or Disable form designer toolbar -We should inject FormDesigner module and set enableFormDesignerToolbar as true to enable the Form designer icon on the toolbar. By default, enableFormDesignerToolbar is set as true. Use the following code to inject FormDesigner module and to enable the enableFormDesignerToolbar property. +Inject the FormDesigner module and set enableFormDesignerToolbar to true to display the Form Designer icon on the toolbar. The default value is true. Use the following code to enable the toolbar option. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -96,41 +95,41 @@ root.render(); ## Add the form field dynamically -Click the Form Field icon on the toolbar and then click on to the PDF document to draw a Form Field. Refer the below GIF for further reference. +Click the Form Field icon on the toolbar, then click on the PDF to draw a form field. See the following GIF for reference. -![Alt text](../images/addformfield.gif) +![Add a form field using the toolbar](../images/addformfield.gif) ## Drag the form field -We provide options to drag the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. +Drag the selected form field to reposition it within the PDF document. See the following GIF for reference. -![Alt text](../images/dragformfield.gif) +![Drag a selected form field in the PDF Viewer](../images/dragformfield.gif) ## Resize the form field -We provide options to resize the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. +Resize the selected form field using the resize handles on the field boundary. See the following GIF for reference. -![Alt text](../images/resizeformfield.gif) +![Resize a selected form field in the PDF Viewer](../images/resizeformfield.gif) ## Edit or Update the form field dynamically -The properties of the Form Fields can be edited using the Form Field Properties window. It can be opened by selecting the Properties option in the context menu that appears on the right by clicking the Form Field object. Refer the below image for the properties available to customize the appearance of the Form Field. +Edit form field properties using the Form Field Properties dialog. Open it by right-clicking a form field and selecting Properties from the context menu. The following images show examples of available settings. -![Alt text](../images/generalproperties.png) +![Form field general properties dialog](../images/generalproperties.png) -![Alt text](../images/appearanceproperties.png) +![Form field appearance properties dialog](../images/appearanceproperties.png) -![Alt text](../images/dropdownproperties.png) +![DropDown field properties dialog](../images/dropdownproperties.png) ## Clipboard operation with form field -The PDF Viewer control supports the clipboard operations such as cut, copy and paste for Form Fields. You can right click on the Form Field object to view the context menu and select to the clipboard options that you would like to perform. Refer the below image for the options in the context menu. +The PDF Viewer supports clipboard operations such as cut, copy, and paste for form fields. Right-click a form field to open the context menu and choose the desired clipboard action. The following image shows the available options. -![Alt text](../images/clipboardformfield.png) +![Clipboard options for a form field in the context menu](../images/clipboardformfield.png) ## Undo and Redo -We provided support to undo/redo the Form Field actions that are performed at runtime. Use the following code example to perform undo/redo actions. +Undo and redo actions are supported for runtime changes made to form fields. Use the following code to perform undo and redo operations. {% tabs %} {% highlight js tabtitle="Standalone" %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/form-designer/form-field-events.md b/Document-Processing/PDF/PDF-Viewer/react/form-designer/form-field-events.md index 365b3a1ee..38ea70c1d 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/form-designer/form-field-events.md +++ b/Document-Processing/PDF/PDF-Viewer/react/form-designer/form-field-events.md @@ -3,12 +3,12 @@ layout: post title: Form Field Events in React Pdfviewer control | Syncfusion description: Learn here all about different form field in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. control: Form Field Events -platform: document-processing +control: PDF Viewer documentation: ug domainurl: ##DomainURL## --- -# PDF Viewer Form Field events +# PDF Viewer Form Field events in React The PDF Viewer control provides the support to different Form Field events. The Form Field events supported by the PDF Viewer Control are: diff --git a/Document-Processing/PDF/PDF-Viewer/react/formdesigner/programmatically-work-with-form-field.md b/Document-Processing/PDF/PDF-Viewer/react/formdesigner/programmatically-work-with-form-field.md deleted file mode 100644 index 8e664eb99..000000000 --- a/Document-Processing/PDF/PDF-Viewer/react/formdesigner/programmatically-work-with-form-field.md +++ /dev/null @@ -1,175 +0,0 @@ ---- -layout: post -title: Programmatically work with form field in React Pdfviewer component | Syncfusion -description: Learn here all about Programmatically work with form field in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Programmatically work with form field -platform: document-processing -documentation: ug -domainurl: ##DomainURL## ---- - -# Programmatically work with form field in React Pdfviewer component - -The PDF Viewer control provides the option to add, edit and delete the Form Fields. The Form Fields type supported by the PDF Viewer Control are: - - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField - -## Add a form field to PDF document programmatically - -Using addFormField method, the form fields can be added to the PDF document programmatically. We need to pass two parameters in this method. They are Form Field Type and Properties of Form Field Type. To add form field programmatically, Use the following code. - -{% tabs %} -{% highlight js tabtitle="index.jsx" %} -{% include code-snippet/pdfviewer/react/addformfield-cs2/app/index.jsx %} -{% endhighlight %} -{% highlight ts tabtitle="index.tsx" %} -{% include code-snippet/pdfviewer/react/addformfield-cs2/app/index.tsx %} -{% endhighlight %} -{% endtabs %} - -{% tabs %} -{% highlight js tabtitle="Standalone" %} -{% previewsample "Document-Processing/code-snippet/pdfviewer/react/addformfield-cs2/index.html" %} -{% endhighlight %} -{% highlight js tabtitle="Server-Backed" %} -{% previewsample "Document-Processing/code-snippet/pdfviewer/react/addformfield-cs2/index.html" %} -{% endhighlight %} -{% endtabs %} - -## Edit/Update form field programmatically - -Using updateFormField method, Form Field can be updated programmatically. We should get the Form Field object/Id from FormFieldCollections property that you would like to edit and pass it as a parameter to updateFormField method. The second parameter should be the properties that you would like to update for Form Field programmatically. We have updated the value and background Color properties of Textbox Form Field. - -{% tabs %} -{% highlight js tabtitle="index.jsx" %} -{% include code-snippet/pdfviewer/react/updateformfield-cs2/app/index.jsx %} -{% endhighlight %} -{% highlight ts tabtitle="index.tsx" %} -{% include code-snippet/pdfviewer/react/updateformfield-cs2/app/index.tsx %} -{% endhighlight %} -{% endtabs %} - -{% tabs %} -{% highlight js tabtitle="Standalone" %} -{% previewsample "Document-Processing/code-snippet/pdfviewer/react/updateformfield-cs2/index.html" %} -{% endhighlight %} -{% highlight js tabtitle="Server-Backed" %} -{% previewsample "Document-Processing/code-snippet/pdfviewer/react/updateformfield-cs2/index.html" %} -{% endhighlight %} -{% endtabs %} - -## Delete form field programmatically - -Using deleteFormField method, the form field can be deleted programmatically. We should retrieve the Form Field object/Id from FormFieldCollections property that you would like to delete and pass it as a parameter to deleteFormField method. To delete a Form Field programmatically, use the following code. - -{% tabs %} -{% highlight js tabtitle="index.jsx" %} -{% include code-snippet/pdfviewer/react/deleteformfield-cs2/app/index.jsx %} -{% endhighlight %} -{% highlight ts tabtitle="index.tsx" %} -{% include code-snippet/pdfviewer/react/deleteformfield-cs2/app/index.tsx %} -{% endhighlight %} -{% endtabs %} - -{% tabs %} -{% highlight js tabtitle="Standalone" %} -{% previewsample "Document-Processing/code-snippet/pdfviewer/react/deleteformfield-cs2-standalone/index.html" %} -{% endhighlight %} -{% highlight js tabtitle="Server-Backed" %} -{% previewsample "Document-Processing/code-snippet/pdfviewer/react/deleteformfield-cs2/index.html" %} -{% endhighlight %} -{% endtabs %} - -## Saving the form fields - -When the download icon is selected on the toolbar, the Form Fields will be saved in the PDF document and this action will not affect the original document. Refer the below GIF for further reference. - -![Alt text](../images/saveformfield.gif) - -You can invoke download action using following code snippet., - -{% raw %} - -```ts - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView,ThumbnailView, - Print, TextSelection, Annotation, TextSearch, FormDesigner, FormFields, Inject } from '@syncfusion/ej2-react-pdfviewer'; -let pdfviewer; - -function App() { - function downloadClicked() { - var viewer = document.getElementById('container').ej2_instances[0]; - viewer.download(); - } - return (
-
- {/* Render the PDF Viewer */} - - { pdfviewer = scope; }} - id="container" - documentPath="PDF_Succinctly.pdf" - serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer" - style={{ 'height': '640px' }}> - - -
-
); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -``` -{% endraw %} - -## Printing the form fields - -When the print icon is selected on the toolbar, the PDF document will be printed along with the Form Fields added to the pages and this action will not affect the original document. Refer the below GIF for further reference. - -![Alt text](../images/printformfield.gif) - -{% raw %} - -```ts - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView,ThumbnailView, - Print, TextSelection, Annotation, TextSearch, FormDesigner, FormFields, Inject } from '@syncfusion/ej2-react-pdfviewer'; -export function App() { - return (
-
- {/* Render the PDF Viewer */} - - - -
-
); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -``` -{% endraw %} - -## Open the existing PDF document - -We can open the already saved PDF document contains Form Fields in it by clicking the open icon in the toolbar. Refer the below GIF for further reference. - -![Alt text](../images/openexistingpdf.gif) diff --git a/Document-Processing/PDF/PDF-Viewer/react/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/react/formdesigner/user-interaction-with-form-fields.md deleted file mode 100644 index b95ad7ce3..000000000 --- a/Document-Processing/PDF/PDF-Viewer/react/formdesigner/user-interaction-with-form-fields.md +++ /dev/null @@ -1,139 +0,0 @@ ---- -layout: post -title: User interaction with form fields in React Pdfviewer component | Syncfusion -description: Learn here all about User interaction with form fields in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: User interaction with form fields -platform: document-processing -documentation: ug -domainurl: ##DomainURL## ---- - -# User interaction with form fields in React Pdfviewer component - -The PDF viewer control provides the option for interaction with Form Fields such as Drag and resize. you can draw a Form Field dynamically by clicking the Form Field icon on the toolbar and draw it in the PDF document. The Form Fields type supported by the PDF Viewer Control are: - - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField - -## Enable or Disable form designer toolbar - -We should inject FormDesigner module and set enableFormDesignerToolbar as true to enable the Form designer icon on the toolbar. By default, enableFormDesignerToolbar is set as true. Use the following code to inject FormDesigner module and to enable the enableFormDesignerToolbar property. - -{% raw %} - -```ts - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, Annotation, TextSearch, Inject, FormDesigner, FormFields } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - return (
-
- {/* Render the PDF Viewer */} - - - -
-
- ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -``` -{% endraw %} - -## Add the form field dynamically - -Click the Form Field icon on the toolbar and then click on to the PDF document to draw a Form Field. Refer the below GIF for further reference. - -![Alt text](../images/addformfield.gif) - -## Drag the form field - -We provide options to drag the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. - -![Alt text](../images/dragformfield.gif) - -## Resize the form field - -We provide options to resize the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. - -![Alt text](../images/resizeformfield.gif) - -## Edit or Update the form field dynamically - -The properties of the Form Fields can be edited using the Form Field Properties window. It can be opened by selecting the Properties option in the context menu that appears on the right by clicking the Form Field object. Refer the below image for the properties available to customize the appearance of the Form Field. - -![Alt text](../images/generalproperties.png) - -![Alt text](../images/appearanceproperties.png) - -![Alt text](../images/dropdownproperties.png) - -## Clipboard operation with form field - -The PDF Viewer control supports the clipboard operations such as cut, copy and paste for Form Fields. You can right click on the Form Field object to view the context menu and select to the clipboard options that you would like to perform. Refer the below image for the options in the context menu. - -![Alt text](../images/clipboardformfield.png) - -## Undo and Redo - -We provided support to undo/redo the Form Field actions that are performed at runtime. Use the following code example to perform undo/redo actions. - -{% raw %} - -```ts - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, - Print, TextSelection, Annotation, TextSearch, Inject, FormDesigner, FormFields } from '@syncfusion/ej2-react-pdfviewer'; -let pdfviewer; - -function App() { - function undoClicked() { - var viewer = document.getElementById('container').ej2_instances[0]; - viewer.undo(); - } - function redoClicked() { - var viewer = document.getElementById('container').ej2_instances[0]; - viewer.redo(); - } - return (
-
- {/* Render the PDF Viewer */} - - - { pdfviewer = scope; }} - id="container" - documentPath="FormDesigner.pdf" - serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer" - style={{ 'height': '640px' }}> - - -
-
- ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -``` -{% endraw %} \ No newline at end of file From f59cae8b333346b1192c278a3e502a46b6d2b4da Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 15 Oct 2025 15:07:08 +0530 Subject: [PATCH 03/47] 984044: unwanted change --- Document-Processing/PDF/PDF-Viewer/angular/accessibility.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md b/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md index 0d7180fd5..f08628db7 100644 --- a/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md +++ b/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md @@ -8,7 +8,8 @@ documentation: ug domainurl: ##DomainURL## --- -# Accessibility in Syncfusion PDF Viewer components REACT +# Accessibility in Syncfusion® Angular PDF Viewer components + The PDF Viewer component followed the accessibility guidelines and standards, including [ADA](https://www.ada.gov/), [Section 508](https://www.section508.gov/), [WCAG 2.2](https://www.w3.org/TR/WCAG22/) standards, and [WCAG roles](https://www.w3.org/TR/wai-aria/#roles) that are commonly used to evaluate accessibility. From 57211b45ece2aeaef58b677f935463ea06d780b7 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Thu, 16 Oct 2025 10:46:09 +0530 Subject: [PATCH 04/47] 984044: trouble changes --- .../cp-command-not-recognized.md | 23 ++++++++------ .../document-loading-issues.md | 31 +++++++------------ .../react/troubleshooting/troubleshooting.md | 14 +++++---- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/cp-command-not-recognized.md b/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/cp-command-not-recognized.md index b269a493f..913c51e26 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/cp-command-not-recognized.md +++ b/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/cp-command-not-recognized.md @@ -1,26 +1,31 @@ --- layout: post -title: Troubleshoot 'cp' is not recognized as a command in React PDF Viewer control | Syncfusion -description: Learn here all about how to solve 'cp' is not recognized as a command in Syncfusion Essential JS 2 and more. +title: Fix "cp is not recognized" on Windows for the React PDF Viewer +description: Use Windows-friendly copy commands to replace Unix cp when copying ej2-pdfviewer-lib assets for the React PDF Viewer—examples for CMD (xcopy) and PowerShell (Copy-Item). platform: document-processing control: PDF Viewer -publishingplatform: React documentation: ug -domainurl: ##DomainURL## --- # Troubleshoot error 'cp' is not recognized as a command -The error message you're seeing, "'cp' is not recognized as an internal or external command," is because the `cp` command you're trying to use is not recognized on Windows command prompt. +The Unix `cp` command is not available in the Windows Command Prompt. Use one of the following Windows-native alternatives to copy the required assets. -On Windows, you should use the `copy` command to copy files and directories instead of `cp`. The equivalent command in Windows to copy a directory and its contents recursively is: +- CMD (xcopy) — recursive directory copy: ```batch xcopy /s /e /i .\node_modules\@syncfusion\ej2-pdfviewer\dist\ej2-pdfviewer-lib public\ej2-pdfviewer-lib ``` -Here, `/s` indicates that you want to copy directories and subdirectories recursively. Also, note that Windows uses backslashes `\` as path separators, not forward slashes `/`. +- PowerShell (Copy-Item) — recursive directory copy: -Make sure to run this command in the appropriate directory where you want to perform the copy operation. +```powershell +Copy-Item .\node_modules\@syncfusion\ej2-pdfviewer\dist\ej2-pdfviewer-lib -Destination .\src\ej2-pdfviewer-lib -Recurse -Force +``` + +Notes: +- Run the command from the project root so the node_modules path resolves correctly. +- Windows paths use backslashes (\). Adjust paths if your project structure differs. +- Ensure sufficient permissions to write to the destination folder. -**Note:** If you encounter other issues or error messages while working with the Windows Command Prompt, make sure to double-check your command syntax and file paths for accuracy. Additionally, ensure that you have the necessary permissions to perform the copy operation in the specified directories. \ No newline at end of file +For cross-platform scripts in package.json, consider tools such as "shx" or "copyfiles" to avoid OS-specific commands. diff --git a/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/document-loading-issues.md b/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/document-loading-issues.md index 1a8e71c87..b249afc6e 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/document-loading-issues.md +++ b/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/document-loading-issues.md @@ -1,18 +1,17 @@ --- layout: post -title: Document Loading Issues in Version 23.1 or Newer React Pdfviewer Component -description: Learn here all about troubleshooting Document Loading Issues in Version 23.1 or newer in React Pdfviewer of Syncfusion Essential JS 2 and more. +title: Fix document loading issues in v23.1+ for the React PDF Viewer component +description: Resolve document rendering failures in v23.1 or newer by calling dataBind before load, verifying source URLs, checking CORS and CSP, and confirming network connectivity in the React PDF Viewer. platform: document-processing control: PDF Viewer -publishingplatform: React documentation: ug --- # Document Loading Issues in Version 23.1 or Newer -If you're experiencing problems with your document not rendering in the viewer, especially when using version 23.1 or a newer version, follow these troubleshooting steps to resolve the issue: +If the document does not render in the viewer when using version 23.1 or newer, follow these steps: -1. **Check for `viewer.dataBind()` Requirement**: Ensure that you have called `viewer.dataBind()` as required in version 23.1 or newer. This explicit call is Essential® for initializing data binding and document rendering correctly. It is must to call the dataBind() method before load. +1. Call `pdfviewer.dataBind()` before `load()`. Starting with v23.1, an explicit dataBind call is required to initialize data binding and render correctly. {% raw %} ```ts @@ -51,18 +50,12 @@ root.render(); ``` {% endraw %} -2. **Verify Document Source**: Confirm that the document source or URL you're trying to display is valid and accessible. Incorrect URLs or document paths can lead to loading issues. +2. Verify the document source. Ensure the URL or path is valid and accessible. +3. Check network connectivity. The viewer cannot fetch the document without a stable connection. +4. Inspect console errors. Use browser developer tools to identify issues. +5. Validate the initialization order. Initialize the viewer, call `dataBind()`, then call `load()`. +6. Update to the latest viewer version. Issues may be resolved in newer releases. +7. Configure CORS correctly for cross-domain documents. +8. Review Content Security Policy (CSP) settings. Ensure external resources are permitted. See the Content Security Policy troubleshooting guide in the Syncfusion documentation for details. -3. **Network Connectivity**: Ensure that your application has a stable network connection. Document rendering may fail if the viewer can't fetch the document due to network issues. - -4. **Console Errors**: Use your browser's developer tools to check for any error messages or warnings in the console. These messages can provide insights into what's causing the document not to load. - -5. **Loading Sequence**: Make sure that you're calling `viewer.dataBind()` and initiating document loading in the correct sequence. The viewer should be properly initialized before attempting to load a document. - -7. **Update Viewer**: Ensure that you're using the latest version of the viewer library or framework. Sometimes, issues related to document loading are resolved in newer releases. - -8. **Cross-Origin Resource Sharing (CORS)**: If you're loading documents from a different domain, ensure that CORS headers are correctly configured to allow cross-origin requests. - -9. **Content Security Policies (CSP)**: Check if your application's Content Security Policy allows the loading of external resources, as this can affect document loading. Refer [here](https://ej2.syncfusion.com/javascript/documentation/common/troubleshoot/content-security-policy) to troubleshoot. - -By following these troubleshooting steps, you should be able to address issues related to document loading in version 23.1 or newer, ensuring that your documents render correctly in the viewer. \ No newline at end of file +Following this checklist typically resolves document loading issues in v23.1 or newer. \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/troubleshooting.md b/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/troubleshooting.md index b8486c9a4..7a7c7c1db 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/troubleshooting.md +++ b/Document-Processing/PDF/PDF-Viewer/react/troubleshooting/troubleshooting.md @@ -1,17 +1,19 @@ --- layout: post -title: Manually Copy Files from node_modules in React PDF Viewer component | Syncfusion -description: Learn here all about why do i have to manually copy files from node_modules in Syncfusion Essential JS 2 and more. +title: Why manual copy from node_modules is required in the React PDF Viewer +description: Understand why certain lazy-loaded assets from ej2-pdfviewer-lib must be copied from node_modules when not using a bundler, how pdfium.js is handled, and when to reference assets directly in the TypeScript PDF Viewer. control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- # Why Do I Have to Manually Copy Files from node_modules into My App? -PDF Viewer offers flexibility across different build systems, remaining both framework-agnostic and independent of bundlers. Even without a bundler, you can seamlessly integrate the PDF Viewer by directly linking its assets through standard HTML tags. +The PDF Viewer supports multiple build systems and can work without a bundler by referencing assets directly using HTML tags. To keep load times efficient, the library is split into smaller modules and uses lazy loading for certain assets. -Moreover, our codebase is meticulously divided into distinct files, enabling selective loading of components when required. This strategic approach to lazy loading prevents unwieldy file sizes that a single bundle might impose, which is often impractical. +- The primary entry point, "pdfium.js", is typically included by bundlers automatically. +- Additional resources under "ej2-pdfviewer-lib" are loaded on demand at runtime. Because the host app does not know about these lazy-loaded files, they are not automatically emitted by bundlers or available to static servers unless they are copied and referenced. -While 'pdfium.js,' the primary entry point, is commonly bundled automatically, the supplementary assets from 'ej2-pdfviewer-lib' need to be manually incorporated due to their on-demand loading. This necessity arises because the host application lacks inherent awareness of these assets' lazy loading behavior. \ No newline at end of file +When not using a bundler (or when the bundler does not emit these assets), copy the required files from node_modules to a web-accessible path in your app (for example, "src/ej2-pdfviewer-lib") and reference them accordingly. This ensures the viewer can fetch the lazy-loaded assets when needed and prevents runtime 404 errors. + +If a bundler is configured to emit static assets from node_modules, verify that the output contains the necessary files from "@syncfusion/ej2-pdfviewer/dist/ej2-pdfviewer-lib" and that your app serves them from a public path. Otherwise, perform a manual copy step during your build process. \ No newline at end of file From 784016c9d827ffef7f1cbdbde502ee8edd68d94c Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Thu, 16 Oct 2025 10:51:58 +0530 Subject: [PATCH 05/47] 984044: save changes --- .../react/save-pdf-file/to-amazon-s3.md | 40 ++++++------ .../to-azure-active-directory.md | 61 +++++++++---------- .../save-pdf-file/to-azure-blob-storage.md | 45 +++++++------- .../to-box-cloud-file-storage.md | 31 +++++----- .../to-dropbox-cloud-file-storage.md | 47 +++++++------- .../save-pdf-file/to-google-cloud-storage.md | 27 ++++---- .../react/save-pdf-file/to-google-drive.md | 33 +++++----- .../react/save-pdf-file/to-one-drive.md | 41 ++++++------- 8 files changed, 157 insertions(+), 168 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md index 1d8cb4a67..66b2f94f7 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md @@ -1,16 +1,14 @@ --- layout: post -title: Save PDF files to AWS S3 in React Pdfviewer component | Syncfusion -description: Learn here all about how to save PDF files to AWS S3 in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Save PDF files to AWS S3 -platform: document-processing +title: Save PDF files to AWS S3 in React PDF Viewer | Syncfusion +description: Learn how to save PDF files to AWS S3 using the Syncfusion React PDF Viewer component in standalone and server-backed configurations. +control: PDF Viewer documentation: ug -domainurl: ##DomainURL## --- -# Save PDF file to AWS S3 +# Save PDF files to AWS S3 -PDF Viewer allows to save PDF file to AWS S3 using either the Standalone or Server-backed PDF Viewer. Below are the steps and a sample to demonstrate how to save PDF to AWS S3. +The React PDF Viewer component supports saving PDF files to AWS S3 using either the standalone or server-backed configuration. The following steps demonstrate both approaches. ## Using Standalone PDF Viewer @@ -20,7 +18,7 @@ To save a PDF file to AWS S3, you can follow the steps below Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This will set up the basic structure of your PDF Viewer application. -**Step 2:** Modify the `src/index.js` File in the React Project +**Step 2:** Modify the `src/app/app.ts` file in the Angular project 1. Import the required namespaces at the top of the file: @@ -28,7 +26,7 @@ Follow the instructions provided in this [link](https://help.syncfusion.com/docu import * as AWS from 'aws-sdk'; ``` -2. Configures AWS SDK with the region, access key, and secret access key. This configuration allows the application to interact with AWS services like S3. +2. Configure the AWS SDK with the region, access key, and secret access key. This enables the application to interact with AWS services such as S3. N> Replace **Your Region** with the actual Region of your AWS S3 account and **Your Access Key** with the actual Access Key of your AWS S3 account and **Your Security Access Key** with the actual Security Access Key of your AWS S3 account. @@ -40,7 +38,7 @@ AWS.config.update({ }); ``` -3. Configure a custom toolbar item for the download function to save a PDF file in Azure Blob Storage. +3. Configure a custom toolbar item for the download function to save a PDF file to AWS S3. {% tabs %} {% highlight ts tabtitle="Standalone" %} @@ -84,7 +82,7 @@ return (
{% endhighlight %} {% endtabs %} -4. Retrieve the PDF viewer instance and save the current PDF as a Blob. Then, read the Blob using a FileReader to convert it into an ArrayBuffer, and upload the ArrayBuffer to AWS S3 using the putObject method of the S3 instance. +4. Retrieve the PDF Viewer instance, save the current PDF as a Blob, read it using FileReader to get an ArrayBuffer, and upload the ArrayBuffer to AWS S3 using the `putObject` method. N> Replace **Your Bucket Name** with the actual Bucket name of your AWS S3 account and **Your Key** with the actual File Key of your AWS S3 account. @@ -115,11 +113,11 @@ function saveDocument() { }; ``` -N> The **npm install aws-sdk** package must be installed in your application to use the previous code example. +N> Install the aws-sdk package in the application to use the previous code example: npm install aws-sdk [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-aws-s3/tree/master/Open%20and%20Save%20PDF%20in%20AWS%20S3%20using%20Standalone). -## Using Server-Backed PDF Viewer +## Using server-backed PDF Viewer To save a PDF file to AWS S3, you can follow the steps below @@ -127,9 +125,9 @@ To save a PDF file to AWS S3, you can follow the steps below Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This will set up the basic structure of your PDF Viewer application. -**Step 2:** Modify the `PdfViewerController.cs` File in the Web Service Project +**Step 2:** Modify the `PdfViewerController.cs` file in the web service project -1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. +1. Create a web service project in .NET Core 3.0 or later. For instructions, see this article: https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above 2. Open the `PdfViewerController.cs` file in your web service project. @@ -161,7 +159,7 @@ public PdfViewerController(IWebHostEnvironment hostingEnvironment, IMemoryCache } ``` -5. Modify the `Download()` method to save the downloaded PDF files to AWS S3 bucket +5. Modify the [Download()](https://ej2.syncfusion.com/documentation/api/pdfviewer/#download) method to save the downloaded PDF file to the AWS S3 bucket. ```csharp @@ -198,7 +196,7 @@ public IActionResult Download([FromBody] Dictionary jsonObject) } ``` -6. Open the `appsettings.json` file in your web service project, Add the following lines below the existing `"AllowedHosts"` configuration +6. Open the `appsettings.json` file in the web service project and add the following lines below the existing `"AllowedHosts"` configuration. ```json { @@ -215,11 +213,11 @@ public IActionResult Download([FromBody] Dictionary jsonObject) } ``` -N> Replace **Your Access Key from AWS S3**, **Your Secret Key from AWS S3**, and **Your Bucket name from AWS S3** with your actual AWS access key, secret key and bucket name +N> Replace the placeholders with the actual AWS access key, secret key, and bucket name. -**Step 3:** Set the PDF Viewer Properties in React PDF viewer component +**Step 3:** Set the PDF Viewer properties in the React PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from AWS S3. Ensure that you correctly pass the document name from the files available in your AWS S3 bucket to the documentPath property. +Modify the [serviceUrl](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#serviceurl) property of the PDF Viewer component with the accurate URL of the web service, replacing `https://localhost:44396/pdfviewer` with the actual server URL. Set the `documentPath` property to the desired PDF file name to load from AWS S3, and ensure that the document exists in the target bucket. {% tabs %} {% highlight ts tabtitle="Standalone" %} @@ -254,6 +252,6 @@ root.render(); {% endhighlight %} {% endtabs %} -N> The **AWSSDK.S3** NuGet package must be installed in your application to use the previous code example. +N> Install the AWSSDK.S3 NuGet package in the web service application to use the previous code example. [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-aws-s3/tree/master/Open%20and%20Save%20PDF%20in%20AWS%20S3%20using%20Server-Backend) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-active-directory.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-active-directory.md index bc35ad654..92205c469 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-active-directory.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-active-directory.md @@ -1,35 +1,34 @@ --- layout: post -title: Save PDF To AAD in React Pdfviewer component | Syncfusion -description: Learn here all about How to Save PDF To AAD in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Load PDF from AAD +title: Save PDF files to Azure Active Directory (AAD) in React PDF Viewer | Syncfusion +description: Learn how to load and save PDF files with Azure Active Directory (AAD) using the Syncfusion React PDF Viewer component and a server-backed web service. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Save PDF To Azure Active Directory in Viewer +# Save PDF files to Azure Active Directory (AAD) -### **Overview** +### Overview -The Syncfusion® PDF Viewer allows you to load and save PDF files directly from Azure Active Directory (AAD). Below are the steps to securely load and store PDF documents from and to AAD using the PDF Viewer. +The React PDF Viewer component supports loading and saving PDF files with Azure Active Directory (AAD). The following steps describe how to securely load and store PDF documents using a server-backed web service. -### **Steps to Open the PDF File from Azure Active Directory** +### Steps to open the PDF file from Azure Active Directory --- -### **Step 1: Register an Application in Azure Active Directory (AAD)** +### Step 1: Register an application in Azure Active Directory (AAD) -1. **Go to the Azure Portal**: +1. Go to the Azure portal: - Navigate to [Azure Portal](https://portal.azure.com). -2. **Register your Application**: +2. Register the application: - In the Azure portal, go to **Azure Active Directory** > **App registrations** > **New registration**. - Register your application and note down the **Application (client) ID** and **Directory (tenant) ID**. ![app-registration](../images/app-registration.png) -3. **Create a Client Secret**: +3. Create a client secret: - In the registered application, go to **Certificates & secrets**. - Click **New client secret**. - Provide a description and set an expiration period. @@ -40,9 +39,9 @@ The Syncfusion® PDF Viewer allows you to lo --- -### **Step 2: Create the Azure Storage Account** +### Step 2: Create the Azure Storage account -1. **Create a Storage Account**: +1. Create a storage account: - In the Azure portal, use the search bar to search for **Storage accounts**. - Create a new storage account by filling in the required details (e.g., name, location, resource group, etc.). @@ -50,12 +49,12 @@ The Syncfusion® PDF Viewer allows you to lo --- -### **Step 3: Assign Role to the Application** +### Step 3: Assign a role to the application -1. **Go to your Storage Account**: +1. Go to the storage account: - Navigate to **Access control (IAM)** > **Add role assignment** in your Azure Storage Account. -2. **Assign Role**: +2. Assign a role: - Assign the **Storage Blob Data Contributor** role to your registered application. - In the **Assign access to** dropdown, select **User, group, or service principal**. - Click on **Select members** and search for your registered application by name or client ID. @@ -65,20 +64,20 @@ The Syncfusion® PDF Viewer allows you to lo ![add-role](../images/add-role.png) --- -### **Step 4: Upload the PDF Document to the Azure Storage Account** +### Step 4: Upload the PDF document to Azure Storage -1. **Navigate to Data Storage**: +1. Navigate to Data storage: - In the Azure portal, go to **Data storage** > **Containers**. -2. **Upload the PDF File**: +2. Upload the PDF file: - Create a new container and upload the PDF document you want to access in the PDF Viewer. ![upload-pdf](../images/upload-pdf.png) --- -### **Step 5: Server-Side Configuration** +### Step 5: Server-side configuration -1. **Configure Server-Side Code**: +1. Configure server-side code: - Open the server-side application (e.g., ASP.NET Core) and configure the following details in the `PdfViewerController` file: - `tenantId` (your Azure AD tenant ID), - `clientId` (your registered application client ID), @@ -86,34 +85,34 @@ The Syncfusion® PDF Viewer allows you to lo - `blobServiceEndpoint` (your storage account blob service URL), - `containerName` (your container name in Azure Blob Storage). -2. **Run the Web Service**: +2. Run the web service: - After configuring the necessary details, run the web service to make it accessible. --- -### **Step 6: Client-Side Configuration** +### Step 6: Client-side configuration -1. **Run the React Sample**: +1. Run the React sample: - Start the React sample that includes the Syncfusion® PDF Viewer. -2. **Load PDF from AAD**: +2. Load a PDF from AAD: - When the user clicks the **Load from AAD** button, the React client will make an HTTP request to the server-side API to fetch the PDF from Azure Blob Storage. - The server will retrieve the PDF from Azure, convert it to a base64 string, and return it to the client. -3. **Display PDF in the PDF Viewer**: +3. Display the PDF in the PDF Viewer: - Once the base64 string is received, the PDF Viewer will load the PDF using the `viewer.load()` method. --- -### **Step 7: Save the PDF Document to Azure** +### Step 7: Save the PDF document to Azure -1. **Save PDF to AAD**: +1. Save PDF to AAD: - The user can click the **Save to AAD** button to upload any modifications to the PDF back to Azure Blob Storage. - This action sends the modified PDF to the server, where it is converted into a byte array and saved to the specified Azure Blob container. --- -### **Server-Side Code Snippets** +### Server-side code snippets ```cs string tenantId = "Provide the tenant id here"; string clientId = "Provide the clientid here"; @@ -169,7 +168,7 @@ public async Task SaveToAAD([FromBody] Dictionary -### **Client-side Code Snippets** +### Client-side code snippets {% raw %} ```ts diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-blob-storage.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-blob-storage.md index 889fb5acc..300ee2d4c 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-blob-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-blob-storage.md @@ -1,26 +1,25 @@ --- layout: post -title: Save PDF to Azure Blob Storage in React Pdfviewer | Syncfusion -description: Learn here all about how to save PDF files to Azure Blob Storage in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Save PDF files to Azure Blob Storage +title: Save PDF files to Azure Blob Storage in React PDF Viewer | Syncfusion +description: Learn how to save PDF files to Azure Blob Storage using the Syncfusion React PDF Viewer component in standalone and server-backed configurations. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Save PDF file to Azure Blob Storage +# Save PDF files to Azure Blob Storage -PDF Viewer allows to save PDF file to Azure Blob Storage using either the Standalone or Server-backed PDF Viewer. Below are the steps and a sample to demonstrate how to save PDF to Azure Blob Storage. +The React PDF Viewer component supports saving PDF files to Azure Blob Storage using either the standalone or server-backed configuration. The following steps demonstrate both approaches. ## Using Standalone PDF Viewer -To save a PDF file to Azure Blob Storage, you can follow the steps below: +To save a PDF file to Azure Blob Storage, follow these steps: **Step 1:** Create a PDF Viewer sample in React Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This will set up the basic structure of your PDF Viewer application. -**Step 2:** Modify the `src/index.js` File in the Angular Project +**Step 2:** Modify the `src/app/app.ts` file in the Angular project 1. Import the required namespaces at the top of the file: @@ -28,15 +27,15 @@ Follow the instructions provided in this [link](https://help.syncfusion.com/docu import { BlockBlobClient } from "@azure/storage-blob"; ``` -2. Add the following private properties to the `index.js`, and assign the values from the configuration to the corresponding properties +2. Add the following private property to `app.ts`, and assign the value from the configuration to the corresponding property. -N> Replace **Your SAS Url in Azure** with the actual SAS url for your Azure Blob Storage account. +N> Replace **Your SAS Url in Azure** with the actual SAS URL for the Azure Blob Storage account. ```typescript var SASUrl = "*Your SAS Url in Azure*"; ``` -3. Configure a custom toolbar item for the download function to save a PDF file in Azure Blob Storage. +3. Configure a custom toolbar item for the download function to save a PDF file to Azure Blob Storage. {% tabs %} {% highlight ts tabtitle="Standalone" %} @@ -80,7 +79,7 @@ return (
{% endhighlight %} {% endtabs %} -4. Retrieve the PDF viewer instance and save the current PDF as a Blob. Then, read the Blob as an ArrayBuffer and upload the ArrayBuffer to Azure Blob Storage using 'BlockBlobClient'. +4. Retrieve the PDF Viewer instance and save the current PDF as a Blob. Then, read the Blob as an ArrayBuffer and upload the ArrayBuffer to Azure Blob Storage using `BlockBlobClient`. ```typescript function saveDocument() { @@ -100,21 +99,21 @@ function saveDocument() { } ``` -N> The **npm install @azure/storage-blob** package must be installed in your application to use the previous code example. +N> Install the @azure/storage-blob package in the application to use the previous code example: npm install @azure/storage-blob [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-azure-blob-storage/tree/master/Open%20and%20Save%20PDF%20in%20Azure%20Blob%20Storage%20using%20Standalone). -## Using Server-Backed PDF Viewer +## Using server-backed PDF Viewer To save a PDF file to Azure Blob Storage, you can follow the steps below: **Step 1:** Create a PDF Viewer sample in React -Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This will set up the basic structure of your PDF Viewer application. +Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This sets up the basic structure of the PDF Viewer application. -**Step 2:** Modify the Controller.cs File in the Web Service Project +**Step 2:** Modify the `PdfViewerController.cs` file in the web service project -1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. +1. Create a web service project in .NET Core 3.0 or later. For instructions, see this article: https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above 2. Open the `PdfViewerController.cs` file in your web service project. @@ -141,7 +140,7 @@ public PdfViewerController(IConfiguration configuration, ILogger jsonObject) } ``` -6. Open the `appsettings.json` file in your web service project, Add the following lines below the existing `"AllowedHosts"` configuration +6. Open the `appsettings.json` file in the web service project and add the following lines below the existing `"AllowedHosts"` configuration. ```json { @@ -194,11 +193,11 @@ public IActionResult Download([FromBody] Dictionary jsonObject) } ``` -N> Replace **Your Connection string from Azure** with the actual connection string for your Azure Blob Storage account and **Your container name in Azure** with the actual container name +N> Replace the placeholders with the actual Azure Storage connection string and container name. -**Step 3:** Set the PDF Viewer Properties in React PDF viewer component +**Step 3:** Set the PDF Viewer properties in the React PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from Azure Blob Storage. Ensure that you correctly pass the document name from the files available in your azure contanier to the documentPath property. +Modify the [serviceUrl](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#serviceurl) property of the PDF Viewer component with the accurate URL of the web service, replacing `https://localhost:44396/pdfviewer` with the actual server URL. Set the `documentPath` property to the desired PDF file name to load from Azure Blob Storage, and ensure that the document exists in the target container. {% tabs %} {% highlight ts tabtitle="Server-Backed" %} @@ -233,6 +232,6 @@ root.render(); {% endhighlight %} {% endtabs %} -N> The **Azure.Storage.Blobs** NuGet package must be installed in your application to use the previous code example. +N> Install the Azure.Storage.Blobs NuGet package in the web service application to use the previous code example. [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-azure-blob-storage/tree/master/Open%20and%20Save%20PDF%20in%20Azure%20Blob%20Storage%20using%20Server-Backend). \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-box-cloud-file-storage.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-box-cloud-file-storage.md index 9f1a85e22..0c98c78f0 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-box-cloud-file-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-box-cloud-file-storage.md @@ -1,26 +1,25 @@ --- layout: post -title: Save PDF files to Box cloud file storage in React Pdfviewer component | Syncfusion -description: Learn here all about how to save PDF files to Box cloud file storage in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Save PDF files to Box cloud file storage +title: Save PDF files to Box cloud storage in React PDF Viewer | Syncfusion +description: Learn how to save PDF files to Box cloud storage using the Syncfusion React PDF Viewer component with a server-backed web service. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Save PDF file to Box cloud file storage +# Save PDF files to Box cloud file storage To save a PDF file to Box cloud file storage, you can follow the steps below -**Step 1** Set up a Box developer account and create a Box application +**Step 1:** Set up a Box developer account and create a Box application To access Box storage programmatically, you'll need a developer account with Box. Go to the [Box Developer Console](https://developer.box.com/), sign in or create a new account, and then create a new Box application. This application will provide you with the necessary credentials Client ID and Client Secret to authenticate and access Box APIs. Before accessing files, you need to authenticate your application to access your Box account. Box API supports `OAuth 2.0 authentication` for this purpose. **Step 2:** Create a PDF Viewer sample in React -Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This will set up the basic structure of your PDF Viewer application. +Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This sets up the basic structure of the PDF Viewer application. -**Step 3:** Modify the `PdfViewerController.cs` File in the Web Service Project +**Step 3:** Modify the `PdfViewerController.cs` file in the web service project 1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. @@ -35,7 +34,7 @@ using Box.V2.Config; using Box.V2.Models; ``` -4. Add the following private fields and constructor parameters to the `PdfViewerController` class, In the constructor, assign the values from the configuration to the corresponding fields +4. Add the following private fields and constructor parameters to the `PdfViewerController` class. In the constructor, assign configuration values to the corresponding fields. ```csharp private IConfiguration _configuration; @@ -56,7 +55,7 @@ public PdfViewerController(IWebHostEnvironment hostingEnvironment, IMemoryCache } ``` -5. Modify the `Download()` method to save the downloaded PDF files to Box cloud file storage bucket +5. Modify the [Download()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#download) method to save the downloaded PDF file to the Box cloud storage folder. ```csharp [HttpPost("Download")] @@ -95,7 +94,7 @@ public async Task Download([FromBody] Dictionary } ``` -6. Open the `appsettings.json` file in your web service project, Add the following lines below the existing `"AllowedHosts"` configuration +6. Open the `appsettings.json` file in the web service project and add the following lines below the existing `"AllowedHosts"` configuration. ```json { @@ -113,11 +112,11 @@ public async Task Download([FromBody] Dictionary } ``` -N> replace **Your_Box_Storage_Access_Token** with your actual box access token, and **Your_Folder_ID** with the ID of the folder in your box storage where you want to perform specific operations. Remember to use your valid box API credentials, as **Your_Box_Storage_ClientID** and **Your_Box_Storage_ClientSecret"** are placeholders for your application's API key and secret. +N> Replace the placeholders with the actual Box access token, folder ID, client ID, and client secret. -**Step 4:** Set the PDF Viewer Properties in React PDF viewer component +**Step 4:** Set the PDF Viewer properties in the React PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from Box cloud file storage. Ensure that you correctly pass the document name from the files available in your box folder to the documentPath property. +Modify the `serviceUrl` property of the PDF Viewer component with the accurate URL of the web service, replacing `https://localhost:44396/pdfviewer` with the actual server URL. Set the `documentPath` property to the desired PDF file name to load from Box cloud storage, and ensure that the document exists in the target folder. {% raw %} @@ -151,8 +150,8 @@ root.render(); ``` {% endraw %} -N> The **Box.V2.Core** NuGet package must be installed in your application to use the previous code example. +N> Install the Box.V2.Core NuGet package in the web service application to use the previous code example. -N> Replace `PDF_Succinctly.pdf` with the actual document name that you want to load from Box cloud file storage. Make sure to pass the document name from the box folder to the `documentPath` property of the PDF viewer component +N> Replace `PDF_Succinctly.pdf` with the actual document name to load from Box cloud storage. Pass the document name from the Box folder to the `documentPath` property of the PDF Viewer component. [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-box-cloud-file-storage) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md index 540238e84..6a2de8b6a 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md @@ -1,30 +1,29 @@ --- layout: post -title: Save PDF to Dropbox cloud storage in React PdfViewer | Syncfusion -description: Learn here all about how to save PDF files to Dropbox cloud file storage in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Save PDF files to Dropbox cloud file storage +title: Save PDF files to Dropbox in React PDF Viewer | Syncfusion +description: Learn how to save PDF files to Dropbox using the Syncfusion React PDF Viewer component in standalone and server-backed configurations. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Save PDF file to Dropbox cloud file storage +# Save PDF files to Dropbox cloud storage -PDF Viewer allows to save PDF file to Drop Box using either the Standalone or Server-backed PDF Viewer. Below are the steps and a sample to demonstrate how to save a PDF to Drop Box. +The React PDF Viewer component supports saving PDF files to Dropbox using either the standalone or server-backed configuration. The following steps demonstrate both approaches. ## Using Standalone PDF Viewer -To save a PDF file to Dropbox cloud file storage, you can follow the steps below +To save a PDF file to Dropbox, follow these steps: -**Step 1** Create a Dropbox API +**Step 1:** Create a Dropbox API app To create a Dropbox API App, you should follow the official documentation provided by Dropbox [link](https://www.dropbox.com/developers/documentation/dotnet#tutorial). The process involves visiting the Dropbox Developer website and using their App Console to set up your API app. This app will allow you to interact with Dropbox programmatically, enabling secure access to files and data. **Step 2:** Create a PDF Viewer sample in React -Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This will set up the basic structure of your PDF Viewer application. +Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This sets up the basic structure of the PDF Viewer application. -**Step 3:** Modify the `src/index.js` File in the Angular Project +**Step 3:** Modify the `src/app/app.ts` file in the Angular project 1. Import the required namespaces at the top of the file: @@ -32,7 +31,7 @@ Follow the instructions provided in this [link](https://help.syncfusion.com/docu import { Dropbox } from 'dropbox'; ``` -2. Configure a custom toolbar item for the download function to save a PDF file in Azure Blob Storage. +2. Configure a custom toolbar item for the download function to save a PDF file to Dropbox. {% tabs %} {% highlight ts tabtitle="Standalone" %} @@ -76,7 +75,7 @@ return (
{% endhighlight %} {% endtabs %} -3. Retrieve the PDF viewer instance and save the current PDF as a Blob. Then, read the Blob using a FileReader to convert it into an ArrayBuffer, and upload the ArrayBuffer to Drop Box using the filesUpload method of the Drop Box instance. +3. Retrieve the PDF Viewer instance and save the current PDF as a Blob. Then, read the Blob using a FileReader to convert it into an ArrayBuffer, and upload the ArrayBuffer to Dropbox using the `filesUpload` method. N> Replace **Your Access Token** with the actual Access Token of your Drop Box account. @@ -102,23 +101,23 @@ N> Replace **Your Access Token** with the actual Access Token of your Drop Box a }; ``` -N> The **npm install dropbox** package must be installed in your application to use the previous code example. +N> Install the dropbox package in the application to use the previous code example: npm install dropbox [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-dropbox-cloud-file-storage/tree/master/Open%20and%20Save%20PDF%20in%20Drop%20Box%20using%20Standalone) -## Using Server-Backed PDF Viewer +## Using server-backed PDF Viewer To save a PDF file to Dropbox cloud file storage, you can follow the steps below -**Step 1** Create a Dropbox API +**Step 1:** Create a Dropbox API app To create a Dropbox API App, you should follow the official documentation provided by Dropbox [link](https://www.dropbox.com/developers/documentation/dotnet#tutorial). The process involves visiting the Dropbox Developer website and using their App Console to set up your API app. This app will allow you to interact with Dropbox programmatically, enabling secure access to files and data. **Step 2:** Create a PDF Viewer sample in React -Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This will set up the basic structure of your PDF Viewer application. +Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This sets up the basic structure of the PDF Viewer application. -**Step 3:** Modify the `PdfViewerController.cs` File in the Web Service Project +**Step 3:** Modify the `PdfViewerController.cs` file in the web service project 1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. @@ -132,7 +131,7 @@ using Dropbox.Api; using Dropbox.Api.Files; ``` -4. Add the following private fields and constructor parameters to the `PdfViewerController` class, In the constructor, assign the values from the configuration to the corresponding fields +4. Add the following private fields and constructor parameters to the `PdfViewerController` class. In the constructor, assign configuration values to the corresponding fields. ```csharp @@ -150,7 +149,7 @@ public PdfViewerController(IWebHostEnvironment hostingEnvironment, IMemoryCache } ``` -5. Modify the `Download()` method to save the downloaded PDF files to Dropbox cloud file storage bucket +5. Modify the [Download()](https://ej2.syncfusion.com/documentation/api/pdfviewer/#download) method to save the downloaded PDF file to the Dropbox folder. ```csharp @@ -188,7 +187,7 @@ public async Task Download([FromBody] Dictionary ``` -6. Open the `appsettings.json` file in your web service project, Add the following lines below the existing `"AllowedHosts"` configuration +6. Open the `appsettings.json` file in the web service project and add the following lines below the existing `"AllowedHosts"` configuration. ```json { @@ -204,11 +203,11 @@ public async Task Download([FromBody] Dictionary } ``` -N> Replace **Your_Dropbox_Access_Token** with your actual Dropbox access token and **Your_Folder_Name** with your folder name. +N> Replace the placeholders with the actual Dropbox access token and target folder name. -**Step 4:** Set the PDF Viewer Properties in React PDF viewer component +**Step 4:** Set the PDF Viewer properties in the React PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from Dropbox cloud file storage. Ensure that you correctly pass the document name from the files available in your dropbox folder to the documentPath property. +Modify the `serviceUrl` property of the PDF Viewer component with the accurate URL of the web service, replacing `https://localhost:44396/pdfviewer` with the actual server URL. Set the `documentPath` property to the desired PDF file name to load from Dropbox, and ensure that the document exists in the target folder. {% tabs %} {% highlight ts tabtitle="Server-Backed" %} @@ -243,6 +242,6 @@ root.render(); {% endhighlight %} {% endtabs %} -N> The **Dropbox.Api** NuGet package must be installed in your application to use the previous code example. +N> Install the Dropbox.Api NuGet package in the web service application to use the previous code example. [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-dropbox-cloud-file-storage/tree/master/Open%20and%20Save%20PDF%20in%20Drop%20Box%20using%20Server-Backed) diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-google-cloud-storage.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-google-cloud-storage.md index 775b471a2..9be9583e4 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-google-cloud-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-google-cloud-storage.md @@ -1,20 +1,19 @@ --- layout: post -title: Save PDF files to Google Cloud Storage in React Pdfviewer component | Syncfusion -description: Learn here all about how to save PDF files to Google Cloud Storage in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Save PDF files to Google Cloud Storage +title: Save PDF files to Google Cloud Storage in React PDF Viewer | Syncfusion +description: Learn how to save PDF files to Google Cloud Storage using the Syncfusion React PDF Viewer component with a server-backed web service. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Save PDF file to Google Cloud Storage +# Save PDF files to Google Cloud Storage To save a PDF file to Google Cloud Storage, you can follow the steps below **Step 1:** Create a PDF Viewer sample in React -Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This will set up the basic structure of your PDF Viewer application. +Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This sets up the basic structure of the PDF Viewer application. **Step 2:** Modify the `PdfViewerController.cs` File in the Web Service Project @@ -30,7 +29,7 @@ using Google.Cloud.Storage.V1; using Google.Apis.Auth.OAuth2; ``` -4. Add the following private fields and constructor parameters to the `PdfViewerController` class, In the constructor, assign the values from the configuration to the corresponding fields +4. Add the following private fields and constructor parameters to the `PdfViewerController` class. In the constructor, assign configuration values to the corresponding fields. ```csharp // Private readonly object _storageClient @@ -60,7 +59,7 @@ public PdfViewerController(IWebHostEnvironment hostingEnvironment, IMemoryCache } ``` -5. Modify the `Download()` method to save the downloaded PDF files to Google Cloud Storage bucket +5. Modify the [Download()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#download) method to save the downloaded PDF file to the Google Cloud Storage bucket. ```csharp [HttpPost("Download")] @@ -88,7 +87,7 @@ public IActionResult Download([FromBody] Dictionary jsonObject) } ``` -6. Open the `appsettings.json` file in your web service project, Add the following lines below the existing `"AllowedHosts"` configuration +6. Open the `appsettings.json` file in the web service project and add the following lines below the existing `"AllowedHosts"` configuration. ```json { @@ -103,13 +102,13 @@ public IActionResult Download([FromBody] Dictionary jsonObject) } ``` -N> Replace **Your Bucket name from Google Cloud Storage** with the actual name of your Google Cloud Storage bucket +N> Replace the placeholder with the actual Google Cloud Storage bucket name. -N> Replace **path/to/service-account-key.json** with the actual file path to your service account key JSON file. Make sure to provide the correct path and filename. +N> Replace `path/to/service-account-key.json` with the actual file path to the service account key JSON file. -**Step 3:** Set the PDF Viewer Properties in React PDF viewer component +**Step 3:** Set the PDF Viewer properties in the React PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from Google Cloud Storage. Ensure that you correctly pass the document name from the files available in your bucket to the documentPath property. +Modify the [serviceUrl](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#serviceurl) property of the PDF Viewer component with the accurate URL of the web service, replacing `https://localhost:44396/pdfviewer` with the actual server URL. Set the `documentPath` property to the desired PDF file name to load from Google Cloud Storage, and ensure that the document exists in the target bucket. {% raw %} @@ -143,6 +142,6 @@ root.render(); ``` {% endraw %} -N> The **Google.Cloud.Storage.V1** NuGet package must be installed in your application to use the previous code example. +N> Install the Google.Cloud.Storage.V1 NuGet package in the web service application to use the previous code example. [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-google-cloud-storage) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-google-drive.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-google-drive.md index 524504bf8..4e35c2442 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-google-drive.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-google-drive.md @@ -1,26 +1,25 @@ --- layout: post -title: Save PDF files to Google Drive in React Pdfviewer component | Syncfusion -description: Learn here all about how to save PDF files to Google Drive in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Save PDF files to Google Drive +title: Save PDF files to Google Drive in React PDF Viewer | Syncfusion +description: Learn how to save PDF files to Google Drive using the Syncfusion React PDF Viewer component with a server-backed web service. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Save PDF file to Google Drive +# Save PDF files to Google Drive To save a PDF file to Google Drive, you can follow the steps below -**Step 1** Set up Google Drive API +**Step 1:** Set up the Google Drive API You must set up a project in the Google Developers Console and enable the Google Drive API. Obtain the necessary credentials to access the API. For more information, view the official [link](https://developers.google.com/drive/api/guides/enable-sdk). **Step 2:** Create a PDF Viewer sample in React -Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This will set up the basic structure of your PDF Viewer application. +Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This sets up the basic structure of the PDF Viewer application. -**Step 3:** Modify the `PdfViewerController.cs` File in the Web Service Project +**Step 3:** Modify the `PdfViewerController.cs` file in the web service project 1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. @@ -34,7 +33,7 @@ using Google.Apis.Drive.v3; using Google.Apis.Util.Store; ``` -4. Add the following private fields and constructor parameters to the `PdfViewerController` class, In the constructor, assign the values from the configuration to the corresponding fields +4. Add the following private fields and constructor parameters to the `PdfViewerController` class. In the constructor, assign configuration values to the corresponding fields. ```csharp private IConfiguration _configuration; @@ -54,7 +53,7 @@ public PdfViewerController(IWebHostEnvironment hostingEnvironment, IMemoryCache } ``` -5. Modify the `Download()` method to save the downloaded PDF files to Google Drive bucket +5. Modify the [Download()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#download) method to save the downloaded PDF file to the Google Drive folder. ```csharp [HttpPost("Download")] @@ -112,7 +111,7 @@ public async Task Download([FromBody] Dictionary } ``` -6. Open the `appsettings.json` file in your web service project, Add the following lines below the existing `"AllowedHosts"` configuration +6. Open the `appsettings.json` file in the web service project and add the following lines below the existing `"AllowedHosts"` configuration. ```json { @@ -129,15 +128,15 @@ public async Task Download([FromBody] Dictionary } ``` -N> Replace **Your Google Drive Folder ID**, **Your Application name**, and **Your Path to the OAuth 2.0 Client IDs json file** with your actual Google drive folder ID , Your name for your application and the path for the JSON file. +N> Replace the placeholders with the actual Google Drive folder ID, application name, and the path to the OAuth 2.0 Client IDs JSON file. -N> The **FolderId** part is the unique identifier for the folder. For example, if your folder URL is: `https://drive.google.com/drive/folders/abc123xyz456`, then the folder ID is `abc123xyz456`. +N> The folder ID is the unique identifier in the folder URL. For example, in `https://drive.google.com/drive/folders/abc123xyz456`, the ID is `abc123xyz456`. -N> You must use a unique `Client_ID` from json file to interface your application with the Google Drive API in order to save PDFs directly to Google Drive. This Client_ID will serve as the authentication key, allowing you to save files securely. +N> Use a valid `client_id` from the JSON file to authenticate with the Google Drive API and save files securely. -**Step 4:** Set the PDF Viewer Properties in React PDF viewer component +**Step 4:** Set the PDF Viewer properties in the React PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from Google Drive. Ensure that you correctly pass the document name from the files available in your drive folder to the documentPath property. +Modify the `serviceUrl` property of the PDF Viewer component with the accurate URL of the web service, replacing `https://localhost:44396/pdfviewer` with the actual server URL. Set the `documentPath` property to the desired PDF file name to load from Google Drive, and ensure that the document exists in the target folder. {% raw %} @@ -171,6 +170,6 @@ root.render(); ``` {% endraw %} -N> The **Google.Cloud.Storage.V1** NuGet package must be installed in your application to use the previous code example. +N> Install the Google.Apis.Drive.v3 NuGet package in the web service application to use the previous code example. [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-google-drive). \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-one-drive.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-one-drive.md index 95a100ea3..0366e11f4 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-one-drive.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-one-drive.md @@ -1,26 +1,25 @@ --- layout: post -title: Save PDF files to One Drive in React Pdfviewer component | Syncfusion -description: Learn here all about how to save PDF files to One Drive in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Save PDF files to One Drive +title: Save PDF files to OneDrive in React PDF Viewer | Syncfusion +description: Learn how to save PDF files to OneDrive using the Syncfusion React PDF Viewer component with a server-backed web service. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Save PDF file to One Drive +# Save PDF files to OneDrive To save a PDF file to One Drive, you can follow the steps below -**Step 1** Create the Microsoft graph API. +**Step 1:** Create a Microsoft Graph API application Need to create a Microsoft Graph API application and obtain the necessary credentials, namely the application ID and tenant ID. Follow the steps provided in the [link](https://learn.microsoft.com/en-us/training/modules/msgraph-access-file-data/3-exercise-access-files-onedrive) to create the application and obtain the required IDs. **Step 2:** Create a PDF Viewer sample in React -Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This will set up the basic structure of your PDF Viewer application. +Follow the instructions provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample in React. This sets up the basic structure of the PDF Viewer application. -**Step 3:** Modify the `PdfViewerController.cs` File in the Web Service Project +**Step 3:** Modify the `PdfViewerController.cs` file in the web service project 1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. @@ -35,7 +34,7 @@ using Microsoft.Identity.Client; using Helpers; ``` -4. Add the following private fields and constructor parameters to the `PdfViewerController` class, In the constructor, assign the values from the configuration to the corresponding fields +4. Add the following private fields and constructor parameters to the `PdfViewerController` class. In the constructor, assign configuration values to the corresponding fields. ```csharp private IConfiguration _configuration; @@ -54,7 +53,7 @@ public PdfViewerController(IWebHostEnvironment hostingEnvironment, IMemoryCache } ``` -5. Modify the `Download()` method to save the downloaded PDF files to One Drive bucket +5. Modify the [Download()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#download) method to save the downloaded PDF file to the OneDrive folder. ```csharp [HttpPost("Download")] @@ -101,7 +100,7 @@ public async Task Download([FromBody] Dictionary } ``` -6. Open the `appsettings.json` file in your web service project, Add the following lines below the existing `"AllowedHosts"` configuration +6. Open the `appsettings.json` file in the web service project and add the following lines below the existing `"AllowedHosts"` configuration. ```json { @@ -119,11 +118,11 @@ public async Task Download([FromBody] Dictionary ``` -N> Replace **Your_Tenent_ID**, **Your_Application_ID**, and **Your_Folder_Name_To_Access_The_Files_In_Onedrive** with your actual tenant ID, application ID, and folder name. +N> Replace the placeholders with the actual tenant ID, application ID, and OneDrive folder name. -**Step 4:** Set the PDF Viewer Properties in React PDF viewer component +**Step 4:** Set the PDF Viewer properties in the React PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from One Drive. Ensure that you correctly pass the document name from the files available in your drive folder to the documentPath property. +Modify the `serviceUrl` property of the PDF Viewer component with the accurate URL of the web service, replacing `https://localhost:44396/pdfviewer` with the actual server URL. Set the `documentPath` property to the desired PDF file name to load from OneDrive, and ensure that the document exists in the target folder. {% raw %} @@ -157,13 +156,11 @@ root.render(); ``` {% endraw %} -N> The following NuGet packages are required to use the previous code example -* **Microsoft.Identity.Client** -* **Microsoft.Graph** -* **Microsoft.Extensions.Configuration** -* **Microsoft.Extensions.Configuration.FileExtensions** -* **Microsoft.Extensions.Configuration.Json** - -You can install these packages using the NuGet Package Manager in Visual Studio or Visual Studio Code. +N> Install the following NuGet packages in the web service application: +- Microsoft.Identity.Client +- Microsoft.Graph +- Microsoft.Extensions.Configuration +- Microsoft.Extensions.Configuration.FileExtensions +- Microsoft.Extensions.Configuration.Json [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-one-drive) \ No newline at end of file From 99d731ad0e1052fd8655d9ac2a6b31fae15ca2a9 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Thu, 16 Oct 2025 11:00:07 +0530 Subject: [PATCH 06/47] 984044: open folder changes --- .../react/open-pdf-file/from-amazon-s3.md | 41 +++++++++---------- .../from-azure-active-directory.md | 37 ++++++++--------- .../open-pdf-file/from-azure-blob-storage.md | 25 ++++++----- .../from-box-cloud-file-storage.md | 27 ++++++------ .../from-dropbox-cloud-file-storage.md | 29 +++++++------ .../from-google-cloud-storage.md | 25 ++++++----- .../react/open-pdf-file/from-google-drive.md | 23 +++++------ .../react/open-pdf-file/from-one-drive.md | 27 ++++++------ 8 files changed, 113 insertions(+), 121 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-amazon-s3.md b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-amazon-s3.md index 2a9c1c0a8..29896c6c4 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-amazon-s3.md +++ b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-amazon-s3.md @@ -1,24 +1,23 @@ --- layout: post -title: Open PDF files from AWS S3 in React Pdfviewer component | Syncfusion -description: Learn about how to load PDF files from AWS S3 in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Open PDF files from AWS S3 +title: Open PDF from AWS S3 in React PDF Viewer | Syncfusion +description: Learn how to load PDFs from AWS S3 in the Syncfusion React PDF Viewer component using standalone and server-backed approaches. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Open PDF file from AWS S3 +# Open PDF from AWS S3 -PDF Viewer allows to load PDF file from AWS S3 using either the Standalone or Server-backed PDF Viewer. Below are the steps and a sample to demonstrate how to open a PDF from AWS S3. +The React PDF Viewer component supports loading PDF files from AWS S3 using either the standalone or the server-backed PDF Viewer. The following steps demonstrate both approaches. -## Using Standalone PDF Viewer +## Using the standalone PDF Viewer -To load a PDF file from AWS S3 in a PDF Viewer, you can follow the steps below. +Follow these steps to load a PDF from AWS S3 in the standalone PDF Viewer. -**Step 1:** Create a Simple PDF Viewer Sample in React +**Step 1:** Create a PDF Viewer sample in React -Start by following the steps provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF viewer sample in React. This will give you a basic setup of the PDF viewer component. +Follow the instructions in the getting started guide (React) to create a basic PDF Viewer sample: https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started **Step 2:** Modify the `src/index.js` File in the React Project @@ -28,7 +27,7 @@ Start by following the steps provided in this [link](https://help.syncfusion.com import AWS from 'aws-sdk'; ``` -2. Configures AWS SDK with the region, access key, and secret access key. This configuration allows the application to interact with AWS services like S3. +2. Configure the AWS SDK with the region, access key, and secret access key so the application can interact with S3. N> Replace **Your Region** with the actual Region of your AWS S3 account and **Your Access Key** with the actual Access Key of your AWS S3 account and **Your Security Access Key** with the actual Security Access Key of your AWS S3 account. @@ -40,7 +39,7 @@ AWS.config.update({ }); ``` -3. Sets the parameters for fetching the PDF document from S3, including the bucket name and file key. Then Uses the getObject method of the S3 instance to retrieve the document. Converts the document data to a Base64 string and loads it into the Syncfusion® PDF Viewer then load Base64 string generated into the viewer.load method. +3. Set parameters for fetching the PDF (bucket name and file key). Use S3.getObject to retrieve the document, convert it to a Base64 string, and pass it to viewer.load. N> Replace **Your Bucket Name** with the actual Bucket name of your AWS S3 account and **Your Key** with the actual File Key of your AWS S3 account. @@ -74,17 +73,17 @@ N> The **npm install aws-sdk** package must be installed in your application to [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-aws-s3/tree/master/Open%20and%20Save%20PDF%20in%20AWS%20S3%20using%20Standalone). -## Using Server-Backed PDF Viewer +## Using the server-backed PDF Viewer -To load a PDF file from AWS S3 in a PDF Viewer, you can follow the steps below +Follow these steps to load a PDF from AWS S3 using the server-backed PDF Viewer. -**Step 1:** Create a Simple PDF Viewer Sample in React +**Step 1:** Create a PDF Viewer sample in React -Start by following the steps provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF viewer sample in React. This will give you a basic setup of the PDF viewer component. +Create a basic PDF Viewer sample by following the getting started guide: https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started **Step 2:** Modify the `PdfViewerController.cs` File in the Web Service Project -1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://support.syncfusion.com/kb/article/9766/how-to-create-pdf-viewer-web-service-in-net-core-31-and-above) for instructions on how to create a web service project. +1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. 2. Open the `PdfViewerController.cs` file in your web service project. @@ -116,7 +115,7 @@ public PdfViewerController(IWebHostEnvironment hostingEnvironment, IMemoryCache } ``` -5. Modify the `Load()` method to load the PDF from AWS S3. +5. Modify the [Load()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#load) method to load the PDF files from AWS S3. ```csharp @@ -180,11 +179,11 @@ public async Task Load([FromBody] Dictionary json } ``` -N> Replace **Your Access Key from AWS S3**, **Your Secret Key from AWS S3**, and **Your Bucket name from AWS S3** with your actual AWS access key, secret key and bucket name +N> Replace the placeholders with your actual AWS credentials and bucket name: Access Key, Secret Key, and Bucket Name. -**Step 3:** Set the PDF Viewer Properties in React PDF viewer component +**Step 3:** Configure the PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from AWS S3. Ensure that you correctly pass the document name from the files available in your AWS S3 bucket to the documentPath property. +Set the [serviceUrl](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#serviceurl) to your web service endpoint (replace the localhost URL with your server URL). Set documentPath to the PDF file name to load from AWS S3. Ensure the document name matches an object in your bucket. {% raw %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-azure-active-directory.md b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-azure-active-directory.md index e90b5c7b0..6adc13a7b 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-azure-active-directory.md +++ b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-azure-active-directory.md @@ -1,24 +1,23 @@ --- layout: post -title: Open PDF from AAD in React Pdfviewer component | Syncfusion -description: Learn here all about How to Open PDF from AAD in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Open PDF from AAD +title: Open PDF from Azure Active Directory in React PDF Viewer | Syncfusion +description: Learn how to load and save PDFs using Azure Active Directory (AAD) with the Syncfusion React PDF Viewer component. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Open PDF From Azure Active Directory in Viewer +# Open PDF from Azure Active Directory -### **Overview** +### Overview -The Syncfusion® PDF Viewer allows you to load and save PDF files directly from Azure Active Directory (AAD). Below are the steps to securely load and store PDF documents from and to AAD using the PDF Viewer. +The React PDF Viewer component supports loading and saving PDF files with Azure Active Directory (AAD). The following steps explain how to securely load and store PDFs using AAD. -### **Steps to Open the PDF File from Azure Active Directory** +### Steps to open a PDF from Azure Active Directory --- -### **Step 1: Register an Application in Azure Active Directory (AAD)** +### Step 1: Register an application in Azure Active Directory (AAD) 1. **Go to the Azure Portal**: - Navigate to [Azure Portal](https://portal.azure.com). @@ -40,7 +39,7 @@ The Syncfusion® PDF Viewer allows you to lo --- -### **Step 2: Create the Azure Storage Account** +### Step 2: Create the Azure Storage account 1. **Create a Storage Account**: - In the Azure portal, use the search bar to search for **Storage accounts**. @@ -50,7 +49,7 @@ The Syncfusion® PDF Viewer allows you to lo --- -### **Step 3: Assign Role to the Application** +### Step 3: Assign a role to the application 1. **Go to your Storage Account**: - Navigate to **Access control (IAM)** > **Add role assignment** in your Azure Storage Account. @@ -65,7 +64,7 @@ The Syncfusion® PDF Viewer allows you to lo ![add-role](../images/add-role.png) --- -### **Step 4: Upload the PDF Document to the Azure Storage Account** +### Step 4: Upload the PDF to Azure Storage 1. **Navigate to Data Storage**: - In the Azure portal, go to **Data storage** > **Containers**. @@ -76,7 +75,7 @@ The Syncfusion® PDF Viewer allows you to lo ![upload-pdf](../images/upload-pdf.png) --- -### **Step 5: Server-Side Configuration** +### Step 5: Server-side configuration 1. **Configure Server-Side Code**: - Open the server-side application (e.g., ASP.NET Core) and configure the following details in the `PdfViewerController` file: @@ -91,10 +90,10 @@ The Syncfusion® PDF Viewer allows you to lo --- -### **Step 6: Client-Side Configuration** +### Step 6: Client-side configuration -1. **Run the React Sample**: - - Start the React sample that includes the Syncfusion® PDF Viewer. +1. **Run the React sample**: + - Start the React sample that includes the Syncfusion PDF Viewer. 2. **Load PDF from AAD**: - When the user clicks the **Load from AAD** button, the React client will make an HTTP request to the server-side API to fetch the PDF from Azure Blob Storage. @@ -105,7 +104,7 @@ The Syncfusion® PDF Viewer allows you to lo --- -### **Step 7: Save the PDF Document to Azure** +### Step 7: Save the PDF to Azure 1. **Save PDF to AAD**: - The user can click the **Save to AAD** button to upload any modifications to the PDF back to Azure Blob Storage. @@ -113,7 +112,7 @@ The Syncfusion® PDF Viewer allows you to lo --- -### **Server-Side Code Snippets** +### Server-side code ```cs string tenantId = "Provide the tenant id here"; string clientId = "Provide the clientid here"; @@ -169,7 +168,7 @@ public async Task SaveToAAD([FromBody] Dictionary -### **Client-side Code Snippets** +### Client-side code {% raw %} ```ts diff --git a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-azure-blob-storage.md b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-azure-blob-storage.md index adb41d290..c080c58fe 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-azure-blob-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-azure-blob-storage.md @@ -5,18 +5,17 @@ description: Learn about how to load PDF files from Azure Blob Storage in Syncfu control: Open PDF files from Azure Blob Storage platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Open PDF file from Azure Blob Storage +# Open PDF from Azure Blob Storage PDF Viewer allows to load PDF file from Azure Blob Storage using either the Standalone or Server-backed PDF Viewer. Below are the steps and a sample to demonstrate how to open a PDF from Azure Blob Storage. -## Using Standalone PDF Viewer +## Using the standalone PDF Viewer To load a PDF file from Azure Blob Storage in a PDF Viewer, you can follow the steps below -**Step 1:** Create a Simple PDF Viewer Sample in React +**Step 1:** Create a PDF Viewer sample in React Start by following the steps provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF viewer sample in React. This will give you a basic setup of the PDF viewer component. @@ -32,7 +31,7 @@ var containerName = "*Your container name in Azure*"; var blobName = "*Your Blob name in Azure*"; ``` -2. Constructs the URL to the PDF in Azure Blob Storage. Calls fetchAndConvertToBase64 to fetch the PDF and convert it to a base64 string. Then Loads the base64 string into the PDF Viewer. +2. Construct the URL to the PDF in Azure Blob Storage. Call fetchAndConvertToBase64 to fetch the PDF and convert it to a base64 string. Then load the base64 string into the PDF Viewer. ```typescript function loadDocument() { @@ -51,7 +50,7 @@ function loadDocument() { } ``` -3. Then it retrieves the PDF file from the given URL and converts the fetched Blob to a base64 string using blobToBase64. +3. Retrieve the PDF from the URL and convert the fetched Blob to a base64 string using blobToBase64. ```typescript function fetchAndConvertToBase64(url) { @@ -73,7 +72,7 @@ function fetchAndConvertToBase64(url) { } ``` -4. Uses FileReader to convert a Blob to a base64 string. Resolves the promise with the base64 string or rejects it in case of an error. +4. Use FileReader to convert a Blob to a base64 string. Resolve the promise with the base64 string or reject it in case of an error. ```typescript function blobToBase64(blob) { @@ -93,11 +92,11 @@ function blobToBase64(blob) { [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-azure-blob-storage/tree/master/Open%20and%20Save%20PDF%20in%20Azure%20Blob%20Storage%20using%20Standalone). -## Using Server-Backed PDF Viewer +## Using the server-backed PDF Viewer -To load a PDF file from Azure Blob Storage in a PDF Viewer, you can follow the steps below +Follow these steps to load a PDF from Azure Blob Storage using the server-backed PDF Viewer. -**Step 1:** Create a Simple PDF Viewer Sample in React +**Step 1:** Create a PDF Viewer sample in React Start by following the steps provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF viewer sample in React. This will give you a basic setup of the PDF viewer component. @@ -130,7 +129,7 @@ public PdfViewerController(IConfiguration configuration, ILogger jsonObject) } ``` -N> Replace **Your Connection string from Azure** with the actual connection string for your Azure Blob Storage account and **Your container name in Azure** with the actual container name +N> Replace the placeholders with your actual values: Azure storage connection string and container name. -**Step 3:** Set the PDF Viewer Properties in React PDF viewer component +**Step 3:** Configure the PDF Viewer component Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from Azure Blob Storage. Ensure that you correctly pass the document name from the files available in your azure contanier to the documentPath property. diff --git a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-box-cloud-file-storage.md b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-box-cloud-file-storage.md index 7a982bf9e..4bdd307fd 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-box-cloud-file-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-box-cloud-file-storage.md @@ -1,26 +1,25 @@ --- layout: post -title: Open PDF files from Box cloud file storage in React Pdfviewer component | Syncfusion -description: Learn about how to load PDF files from Box cloud file storage in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Open PDF from Box cloud storage in React PDF Viewer | Syncfusion +description: Learn how to load PDFs from Box cloud storage in the Syncfusion React PDF Viewer component using a server-backed approach. control: Open PDF files from Box cloud file storage platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Open PDF file from Box cloud file storage +# Open PDF from Box cloud storage -To load a PDF file from Box cloud file storage in a PDF Viewer, you can follow the steps below +Follow these steps to load a PDF from Box cloud storage using the server-backed PDF Viewer. -**Step 1** Set up a Box developer account and create a Box application +**Step 1:** Set up a Box developer account and create a Box application -To access Box storage programmatically, you'll need a developer account with Box. Go to the [Box Developer Console](https://developer.box.com/), sign in or create a new account, and then create a new Box application. This application will provide you with the necessary credentials Client ID and Client Secret to authenticate and access Box APIs. Before accessing files, you need to authenticate your application to access your Box account. Box API supports `OAuth 2.0 authentication` for this purpose. +Create a developer account and Box application in the [Box Developer Console](https://developer.box.com/). Note the Client ID and Client Secret. Use OAuth 2.0 to authenticate the application. -**Step 2:** Create a Simple PDF Viewer Sample in React +**Step 2:** Create a PDF Viewer sample in React Start by following the steps provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF viewer sample in React. This will give you a basic setup of the PDF viewer component. -**Step 3:** Modify the `PdfViewerController.cs` File in the Web Service Project +**Step 3:** Modify the PdfViewerController.cs file in the web service project 1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. @@ -35,7 +34,7 @@ using Box.V2.Config; using Box.V2.Models; ``` -4. Add the following private fields and constructor parameters to the `PdfViewerController` class, In the constructor, assign the values from the configuration to the corresponding fields +4. Add the following private fields and constructor parameters to PdfViewerController. In the constructor, assign values from configuration to the corresponding fields. ```csharp private IConfiguration _configuration; @@ -56,7 +55,7 @@ public PdfViewerController(IWebHostEnvironment hostingEnvironment, IMemoryCache } ``` -5. Modify the `Load()` method to load the PDF from Box cloud file storage. +5. Modify the [Load()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#load) method to load PDF files from Box cloud storage. ```csharp @@ -127,11 +126,11 @@ public async Task Load([FromBody] Dictionary json } ``` -N> replace **Your_Box_Storage_Access_Token** with your actual box access token, and **Your_Folder_ID** with the ID of the folder in your box storage where you want to perform specific operations. Remember to use your valid box API credentials, as **Your_Box_Storage_ClientID** and **Your_Box_Storage_ClientSecret"** are placeholders for your application's API key and secret. +N> Replace the placeholders with your actual Box values: Access Token, Folder ID, Client ID, and Client Secret. -**Step 4:** Set the PDF Viewer Properties in React PDF viewer component +**Step 4:** Configure the PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from Box cloud file storage. Ensure that you correctly pass the document name from the files available in your box folder to the documentPath property. +Set the [serviceUrl](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#serviceurl) to your web service endpoint (replace the localhost URL with your server URL). Set documentPath to the PDF file name to load from Box cloud storage. Ensure the document name exists in your Box folder. {% raw %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-dropbox-cloud-file-storage.md b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-dropbox-cloud-file-storage.md index d24160a73..f0de1a5aa 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-dropbox-cloud-file-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-dropbox-cloud-file-storage.md @@ -1,16 +1,15 @@ --- layout: post -title: Open PDF from Dropbox cloud storage in React PdfViewer | Syncfusion -description: Learn about how to load PDF files from Dropbox cloud file storage in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Open PDF from Dropbox cloud storage in React PDF Viewer | Syncfusion +description: Learn how to load PDFs from Dropbox cloud storage in the Syncfusion React PDF Viewer component using standalone and server-backed approaches. control: Open PDF files from Dropbox cloud file storage platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Open PDF file from Dropbox cloud file storage +# Open PDF from Dropbox cloud storage -PDF Viewer allows to load PDF file from Drop Box using either the Standalone or Server-backed PDF Viewer. Below are the steps and a sample to demonstrate how to open a PDF from Drop Box. +The React PDF Viewer component supports loading PDF files from Dropbox using either the standalone or the server-backed PDF Viewer. The following steps demonstrate both approaches. ## Using Standalone PDF Viewer @@ -18,13 +17,13 @@ To load a PDF file from Dropbox cloud file storage in a PDF Viewer, you can foll **Step 1** Create a Dropbox API -To create a Dropbox API App, you should follow the official documentation provided by Dropbox [link](https://www.dropbox.com/developers/documentation/dotnet#tutorial). The process involves visiting the Dropbox Developer website and using their App Console to set up your API app. This app will allow you to interact with Dropbox programmatically, enabling secure access to files and data. +Follow the Dropbox documentation to create an API app: https://www.dropbox.com/developers/documentation/dotnet#tutorial. This enables programmatic access with secure credentials. **Step 2:** Create a Simple PDF Viewer Sample in React Start by following the steps provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF viewer sample in React. This will give you a basic setup of the PDF viewer component. -**Step 3:** Modify the `src/index.js` File in the Angular Project +**Step 3:** Modify the src/app/app.ts file in the React project 1. Import the required namespaces at the top of the file: @@ -34,7 +33,7 @@ import { Dropbox } from 'dropbox'; 2. Create an instance of the Dropbox class using an access token for authentication. Next, call the filesDownload method of this Dropbox instance to download the file located at /PDF_Succinctly.pdf. Upon successfully downloading the file, extract the file blob from the response. Convert this file blob to a Base64 string using the blobToBase64 method. Finally, load the Base64 string into a PDF viewer control. -N> Replace **Your Access Token** with the actual Access Token of your Drop Box account. +N> Replace the placeholder with your actual Dropbox access token. ```typescript function loadDocument() { @@ -62,19 +61,19 @@ N> The **npm install dropbox** package must be installed in your application to [View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-dropbox-cloud-file-storage/tree/master/Open%20and%20Save%20PDF%20in%20Drop%20Box%20using%20Standalone) -## Using Server-Backed PDF Viewer +## Using the server-backed PDF Viewer To load a PDF file from Dropbox cloud file storage in a PDF Viewer, you can follow the steps below. -**Step 1** Create a Dropbox API +**Step 1:** Create a Dropbox API app To create a Dropbox API App, you should follow the official documentation provided by Dropbox [link](https://www.dropbox.com/developers/documentation/dotnet#tutorial). The process involves visiting the Dropbox Developer website and using their App Console to set up your API app. This app will allow you to interact with Dropbox programmatically, enabling secure access to files and data. -**Step 2:** Create a Simple PDF Viewer Sample in React +**Step 2:** Create a PDF Viewer sample in React Start by following the steps provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF viewer sample in React. This will give you a basic setup of the PDF viewer component. -**Step 3:** Modify the `PdfViewerController.cs` File in the Web Service Project +**Step 3:** Modify the PdfViewerController.cs file in the web service project 1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. @@ -166,11 +165,11 @@ public async Task Load([FromBody] Dictionary json } ``` -N> Replace **Your_Dropbox_Access_Token** with your actual Dropbox access token and **Your_Folder_Name** with your folder name. +N> Replace the placeholders with your actual Dropbox values: Access Token and Folder Name. -**Step 4:** Set the PDF Viewer Properties in React PDF viewer component +**Step 4:** Configure the PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from Dropbox cloud file storage. Ensure that you correctly pass the document name from the files available in your dropbox folder to the documentPath property. +Set the [serviceUrl](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#serviceurl) to your web service endpoint (replace the localhost URL with your server URL). Set documentPath to the PDF file name to load from Dropbox. Ensure the document name exists in your Dropbox folder. {% raw %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-google-cloud-storage.md b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-google-cloud-storage.md index c4407f43d..75794062c 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-google-cloud-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-google-cloud-storage.md @@ -1,22 +1,21 @@ --- layout: post -title: Open PDF files from Google Cloud Storage in React Pdfviewer component | Syncfusion -description: Learn about how to load PDF files from Google Cloud Storage in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Open PDF files from Google Cloud Storage +title: Open PDF from Google Cloud Storage in React PDF Viewer | Syncfusion +description: Learn how to load PDFs from Google Cloud Storage in the Syncfusion React PDF Viewer component using a server-backed approach. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Open PDF file from Google Cloud Storage +# Open PDF from Google Cloud Storage -To load a PDF file from Google Cloud Storage in a PDF Viewer, you can follow the steps below +Follow these steps to load a PDF from Google Cloud Storage using the server-backed PDF Viewer. **Step 1:** Create a Simple PDF Viewer Sample in React Start by following the steps provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF viewer sample in React. This will give you a basic setup of the PDF viewer component. -**Step 2:** Modify the `PdfViewerController.cs` File in the Web Service Project +**Step 2:** Modify the PdfViewerController.cs file in the web service project 1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. @@ -30,7 +29,7 @@ using Google.Cloud.Storage.V1; using Google.Apis.Auth.OAuth2; ``` -4. Add the following private fields and constructor parameters to the `PdfViewerController` class, In the constructor, assign the values from the configuration to the corresponding fields +4. Add the following private fields and constructor parameters to PdfViewerController. In the constructor, assign values from configuration to the corresponding fields. ```csharp // Private readonly object _storageClient @@ -94,7 +93,7 @@ public IActionResult Load([FromBody] Dictionary jsonObject) } ``` -6. Open the `appsettings.json` file in your web service project, Add the following lines below the existing `"AllowedHosts"` configuration +6. Open appsettings.json in the web service project and add the following keys below the existing AllowedHosts configuration ```json { @@ -109,13 +108,13 @@ public IActionResult Load([FromBody] Dictionary jsonObject) } ``` -N> Replace **Your Bucket name from Google Cloud Storage** with the actual name of your Google Cloud Storage bucket +N> Replace the placeholder with the actual Google Cloud Storage bucket name. -N> Replace **path/to/service-account-key.json** with the actual file path to your service account key JSON file. Make sure to provide the correct path and filename. +N> Replace path/to/service-account-key.json with the actual file path to your service account key JSON file. -**Step 3:** Set the PDF Viewer Properties in React PDF viewer component +**Step 3:** Configure the PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from Google Cloud Storage. Ensure that you correctly pass the document name from the files available in your bucket to the documentPath property. +Set the [serviceUrl](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#serviceurl) to your web service endpoint (replace the localhost URL with your server URL). Set documentPath to the PDF file name to load from Google Cloud Storage. Ensure the document name exists in your bucket. {% raw %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-google-drive.md b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-google-drive.md index 2529acd47..36ff0bcc4 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-google-drive.md +++ b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-google-drive.md @@ -1,16 +1,15 @@ --- layout: post -title: Open PDF files from Google Drive in React Pdfviewer component | Syncfusion -description: Learn about how to load PDF files from Google Drive in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Open PDF files from Google Drive +title: Open PDF from Google Drive in React PDF Viewer | Syncfusion +description: Learn how to load PDFs from Google Drive in the Syncfusion React PDF Viewer component using a server-backed approach. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Open PDF file from Google Drive +# Open PDF from Google Drive -To load a PDF file from Google Drive in a PDF Viewer, you can follow the steps below +Follow these steps to load a PDF from Google Drive using the server-backed PDF Viewer. **Step 1** Set up Google Drive API @@ -20,7 +19,7 @@ You must set up a project in the Google Developers Console and enable the Google Start by following the steps provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF viewer sample in React. This will give you a basic setup of the PDF viewer component. -**Step 3:** Modify the `PdfViewerController.cs` File in the Web Service Project +**Step 3:** Modify the PdfViewerController.cs file in the web service project 1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. @@ -34,7 +33,7 @@ using Google.Apis.Drive.v3; using Google.Apis.Util.Store; ``` -4. Add the following private fields and constructor parameters to the `PdfViewerController` class, In the constructor, assign the values from the configuration to the corresponding fields +4. Add the following private fields and constructor parameters to PdfViewerController. In the constructor, assign values from configuration to the corresponding fields. ```csharp private IConfiguration _configuration; @@ -126,7 +125,7 @@ public async Task Load([FromBody] Dictionary json } ``` -6. Open the `appsettings.json` file in your web service project, Add the following lines below the existing `"AllowedHosts"` configuration +6. Open appsettings.json in the web service project and add the following keys below the existing AllowedHosts configuration ```json { @@ -143,13 +142,13 @@ public async Task Load([FromBody] Dictionary json } ``` -N> Replace **Your Google Drive Folder ID**, **Your Application name**, and **Your Path to the OAuth 2.0 Client IDs json file** with your actual Google drive folder ID , Your name for your application and the path for the JSON file. +N> Replace the placeholders with your actual values: Google Drive Folder ID, Application name, and the path to the OAuth 2.0 client IDs JSON file. N> The **FolderId** part is the unique identifier for the folder. For example, if your folder URL is: `https://drive.google.com/drive/folders/abc123xyz456`, then the folder ID is `abc123xyz456`. -**Step 4:** Set the PDF Viewer Properties in React PDF viewer component +**Step 4:** Configure the PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from Google Drive. Ensure that you correctly pass the document name from the files available in your drive folder to the documentPath property. +Set the [serviceUrl](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#serviceurl) to your web service endpoint (replace the localhost URL with your server URL). Set documentPath to the PDF file name to load from Google Drive. Ensure the document name exists in your Drive folder. {% raw %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-one-drive.md b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-one-drive.md index 2604cdb5e..ccf5ecb31 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-one-drive.md +++ b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-file/from-one-drive.md @@ -1,26 +1,25 @@ --- layout: post -title: Open PDF files from One Drive in React Pdfviewer component | Syncfusion -description: Learn about how to load PDF files from One Drive in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Open PDF files from One Drive +title: Open PDF from OneDrive in React PDF Viewer | Syncfusion +description: Learn how to load PDFs from OneDrive in the Syncfusion React PDF Viewer component using a server-backed approach. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Open PDF file from One Drive +# Open PDF from OneDrive -To load a PDF file from One Drive in a PDF Viewer, you can follow the steps below +Follow these steps to load a PDF from OneDrive using the server-backed PDF Viewer. -**Step 1** Create the Microsoft graph API. +**Step 1:** Create a Microsoft Graph API application -Need to create a Microsoft Graph API application and obtain the necessary credentials, namely the application ID and tenant ID. Follow the steps provided in the [link](https://learn.microsoft.com/en-us/training/modules/msgraph-access-file-data/3-exercise-access-files-onedrive) to create the application and obtain the required IDs. +Create a Microsoft Graph API application and obtain the application ID and tenant ID. Follow this guide: https://learn.microsoft.com/en-us/training/modules/msgraph-access-file-data/3-exercise-access-files-onedrive **Step 2:** Create a Simple PDF Viewer Sample in React Start by following the steps provided in this [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF viewer sample in React. This will give you a basic setup of the PDF viewer component. -**Step 3:** Modify the `PdfViewerController.cs` File in the Web Service Project +**Step 3:** Modify the PdfViewerController.cs file in the web service project 1. Create a web service project in .NET Core 3.0 or above. You can refer to this [link](https://www.syncfusion.com/kb/11063/how-to-create-pdf-viewer-web-service-in-net-core-3-0-and-above) for instructions on how to create a web service project. @@ -35,7 +34,7 @@ using Microsoft.Identity.Client; using Helpers; ``` -4. Add the following private fields and constructor parameters to the `PdfViewerController` class, In the constructor, assign the values from the configuration to the corresponding fields +4. Add the following private fields and constructor parameters to PdfViewerController. In the constructor, assign values from configuration to the corresponding fields. ```csharp private IConfiguration _configuration; @@ -122,7 +121,7 @@ public async Task Load([FromBody] Dictionary json } ``` -6. Open the `appsettings.json` file in your web service project, Add the following lines below the existing `"AllowedHosts"` configuration +6. Open appsettings.json in the web service project and add the following keys below the existing AllowedHosts configuration ```json { @@ -140,11 +139,11 @@ public async Task Load([FromBody] Dictionary json ``` -N> Replace **Your_Tenent_ID**, **Your_Application_ID**, and **Your_Folder_Name_To_Access_The_Files_In_Onedrive** with your actual tenant ID, application ID, and folder name. +N> Replace the placeholders with your actual values: Tenant ID, Application ID, and OneDrive folder name. -**Step 4:** Set the PDF Viewer Properties in React PDF viewer component +**Step 4:** Configure the PDF Viewer component -Modify the `serviceUrl` property of the PDF viewer component with the accurate URL of your web service project, replacing `https://localhost:44396/pdfviewer` with the actual URL of your server. Set the `documentPath` property of the PDF viewer component to the desired name of the PDF file you wish to load from One Drive. Ensure that you correctly pass the document name from the files available in your drive folder to the documentPath property. +Set the [serviceUrl](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#serviceurl) to your web service endpoint (replace the localhost URL with your server URL). Set documentPath to the PDF file name to load from OneDrive. Ensure the document name exists in your OneDrive folder. {% raw %} From e7b7c7bed23cdfc8722c3eb67a5f518cdc30e43f Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Thu, 16 Oct 2025 11:57:01 +0530 Subject: [PATCH 07/47] 984044: designer recommit --- .../PDF-Viewer/react/form-designer/create-programmatically.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md index df0a84513..caccf1de6 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md +++ b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md @@ -7,7 +7,7 @@ platform: document-processing documentation: ug --- -# Create programmatically in Typescript Pdf viewer control +# Create programmatically in React Pdf viewer control The PDF Viewer component provides options to add, edit, and delete form fields. The supported form field types are: From 4ed60f1c6487f17ff6177884f26c25674db59925 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Thu, 16 Oct 2025 14:02:39 +0530 Subject: [PATCH 08/47] 984044: common files --- .../PDF/PDF-Viewer/react/accessibility.md | 2 +- .../PDF/PDF-Viewer/react/download.md | 4 +- .../PDF/PDF-Viewer/react/feature-module.md | 28 +- .../PDF/PDF-Viewer/react/getting-started.md | 2 +- .../PDF/PDF-Viewer/react/globalization.md | 2 +- .../PDF/PDF-Viewer/react/interaction-mode.md | 2 +- .../react/keyboard-accessibility.md | 2 +- .../PDF/PDF-Viewer/react/magnification.md | 2 +- .../PDF/PDF-Viewer/react/mobile-toolbar.md | 2 +- .../PDF/PDF-Viewer/react/navigation.md | 2 +- .../react/nextjs-getting-started.md | 2 +- .../PDF/PDF-Viewer/react/open-pdf-files.md | 2 +- .../PDF/PDF-Viewer/react/print.md | 277 ++++++++++++++++++ .../PDF/PDF-Viewer/react/save-pdf-files.md | 2 +- .../PDF/PDF-Viewer/react/text-search.md | 203 ++++++++++++- 15 files changed, 502 insertions(+), 32 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/accessibility.md b/Document-Processing/PDF/PDF-Viewer/react/accessibility.md index 31c4d9c0b..f421be692 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/accessibility.md +++ b/Document-Processing/PDF/PDF-Viewer/react/accessibility.md @@ -8,7 +8,7 @@ documentation: ug domainurl: ##DomainURL## --- -# Accessibility in Syncfusion® React PDF Viewer components +# Accessibility in Syncfusion PDF Viewer components React The PDF Viewer component followed the accessibility guidelines and standards, including [ADA](https://www.ada.gov/), [Section 508](https://www.section508.gov/), [WCAG 2.2](https://www.w3.org/TR/WCAG22/) standards, and [WCAG roles](https://www.w3.org/TR/wai-aria/#roles) that are commonly used to evaluate accessibility. diff --git a/Document-Processing/PDF/PDF-Viewer/react/download.md b/Document-Processing/PDF/PDF-Viewer/react/download.md index f9802e7b9..89a269eb7 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/download.md +++ b/Document-Processing/PDF/PDF-Viewer/react/download.md @@ -2,12 +2,12 @@ layout: post title: Download in React Pdfviewer component | Syncfusion description: Learn here all about Download in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Download +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Download in React Pdfviewer component +# Download in Typescript Pdf viewer control The PDF Viewer supports downloading the loaded PDF file. You can enable/disable the download using the following code snippet. diff --git a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md index 440dbc1ee..cefa7294d 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md +++ b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md @@ -2,30 +2,30 @@ layout: post title: Feature module in React Pdfviewer component | Syncfusion description: Learn here all about Feature module in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Feature module +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Feature module in React Pdfviewer component +# Feature module in Typescript Pdf viewer Control The PDF Viewer features are segregated into individual feature-wise modules to enable selectively referencing in the application. The required modules should be injected to extend its functionality. The following are the selective modules of PDF Viewer that can be included as required: The available PdfViewer modules are: -* **Toolbar**:- Built-in toolbar for better user interaction. -* **Magnification**:- Perform zooming operation for better viewing experience. -* **Navigation**:- Easy navigation across the PDF pages. -* **LinkAnnotation**:- Easy navigation within and outside of the PDF document. -* **ThumbnailView**:- Easy navigation with in the PDF document. -* **BookmarkView**:- Easy navigation based on the bookmark content of the PDF document. -* **TextSelection**:- Select and copy text from a PDF file. -* **TextSearch**:- Search a text easily across the PDF document. -* **Print**:- Print the entire document or a specific page directly from the browser. -* **Annotation**:- Annotations can be added or edited in the PDF document. -* **FormFields**:- Preserve the form fields in the PDF document. -* **FormDesigner**:- Form fields can be added or edited in the PDF document. +* [**Toolbar**](./toolbar-customization):- Built-in toolbar for better user interaction. +* [**Magnification**](./magnification.md):- Perform zooming operation for better viewing experience. +* [**Navigation**](./interactive-pdf-navigation/page-navigation.md):- Easy navigation across the PDF pages. +* [**LinkAnnotation**](./interactive-pdf-navigation/table-of-content-navigation.md):- Easy navigation within and outside of the PDF document. +* [**ThumbnailView**](./interactive-pdf-navigation/page-thumbnail-navigation.md):- Easy navigation with in the PDF document. +* [**BookmarkView**](./interactive-pdf-navigation/bookmark-navigation.md):- Easy navigation based on the bookmark content of the PDF document. +* [**TextSelection**](./textselection.md):- Select and copy text from a PDF file. +* [**TextSearch**](./text-search.md):- Search a text easily across the PDF document. +* [**Print**](./print.md):- Print the entire document or a specific page directly from the browser. +* [**Annotation**](./annotations/text-markup-annotation.md):- Annotations can be added or edited in the PDF document. +* [**FormFields**](./form-designer/create-programmatically.md):- Preserve the form fields in the PDF document. +* [**FormDesigner**](./form-designer/create-programmatically.md):- Form fields can be added or edited in the PDF document. >In addition to injecting the required modules in your application, enable corresponding properties to extend the functionality for a PDF Viewer instance. Refer to the following table. diff --git a/Document-Processing/PDF/PDF-Viewer/react/getting-started.md b/Document-Processing/PDF/PDF-Viewer/react/getting-started.md index e74bef472..4a8881951 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/getting-started.md +++ b/Document-Processing/PDF/PDF-Viewer/react/getting-started.md @@ -8,7 +8,7 @@ documentation: ug domainurl: ##DomainURL## --- -# Getting Started with Standalone PDF Viewer component +# Getting started in Standalone PDF Viewer control in React This section explains the steps required to create a simple Standalone React PDF Viewer and demonstrates the basic usage of the PDF Viewer control in a React application. diff --git a/Document-Processing/PDF/PDF-Viewer/react/globalization.md b/Document-Processing/PDF/PDF-Viewer/react/globalization.md index c07b82f35..26103c1fc 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/globalization.md +++ b/Document-Processing/PDF/PDF-Viewer/react/globalization.md @@ -2,7 +2,7 @@ layout: post title: Globalization in React Pdfviewer component | Syncfusion description: Learn here all about Globalization in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Globalization +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## diff --git a/Document-Processing/PDF/PDF-Viewer/react/interaction-mode.md b/Document-Processing/PDF/PDF-Viewer/react/interaction-mode.md index dfbca88df..c3310564c 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/interaction-mode.md +++ b/Document-Processing/PDF/PDF-Viewer/react/interaction-mode.md @@ -2,7 +2,7 @@ layout: post title: Interaction mode in React Pdfviewer component | Syncfusion description: Learn here all about Interaction mode in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Interaction mode +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## diff --git a/Document-Processing/PDF/PDF-Viewer/react/keyboard-accessibility.md b/Document-Processing/PDF/PDF-Viewer/react/keyboard-accessibility.md index 14b32f2e9..116a07737 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/keyboard-accessibility.md +++ b/Document-Processing/PDF/PDF-Viewer/react/keyboard-accessibility.md @@ -2,7 +2,7 @@ layout: post title: Keyboard accessibility in React Pdfviewer component | Syncfusion description: Learn here all about Keyboard accessibility in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Keyboard accessibility +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## diff --git a/Document-Processing/PDF/PDF-Viewer/react/magnification.md b/Document-Processing/PDF/PDF-Viewer/react/magnification.md index 6dbbdd2b7..8709f7ea1 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/magnification.md +++ b/Document-Processing/PDF/PDF-Viewer/react/magnification.md @@ -2,7 +2,7 @@ layout: post title: Magnification in React Pdfviewer component | Syncfusion description: Learn here all about Magnification in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Magnification +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## diff --git a/Document-Processing/PDF/PDF-Viewer/react/mobile-toolbar.md b/Document-Processing/PDF/PDF-Viewer/react/mobile-toolbar.md index 98e833222..5e8f81058 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/mobile-toolbar.md +++ b/Document-Processing/PDF/PDF-Viewer/react/mobile-toolbar.md @@ -2,7 +2,7 @@ layout: post title: Mobile Toolbar Interface in React Pdfviewer component | Syncfusion description: Learn All About the Mobile Toolbar Interface in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Mobile Toolbar Interface +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## diff --git a/Document-Processing/PDF/PDF-Viewer/react/navigation.md b/Document-Processing/PDF/PDF-Viewer/react/navigation.md index 6b5e57588..997280c7c 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/navigation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/navigation.md @@ -2,7 +2,7 @@ layout: post title: Navigation in React Pdfviewer component | Syncfusion description: Learn here all about Navigation in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Navigation +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## diff --git a/Document-Processing/PDF/PDF-Viewer/react/nextjs-getting-started.md b/Document-Processing/PDF/PDF-Viewer/react/nextjs-getting-started.md index a11bdcff0..4dbafe772 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/nextjs-getting-started.md +++ b/Document-Processing/PDF/PDF-Viewer/react/nextjs-getting-started.md @@ -2,7 +2,7 @@ layout: post title: React getting started with Next.js | Syncfusion description: Check out and learn here all about how to use the Syncfusion React UI components in the Next.js project. -control: Next.js +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## diff --git a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-files.md b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-files.md index fd8d6be1f..8e1f673ef 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/open-pdf-files.md +++ b/Document-Processing/PDF/PDF-Viewer/react/open-pdf-files.md @@ -2,7 +2,7 @@ layout: post title: Open PDF files in React Pdfviewer component | Syncfusion description: This page helps you to learn about how to load PDF files from various locations in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Open PDF files +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## diff --git a/Document-Processing/PDF/PDF-Viewer/react/print.md b/Document-Processing/PDF/PDF-Viewer/react/print.md index 34051f1f4..330e513be 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/print.md +++ b/Document-Processing/PDF/PDF-Viewer/react/print.md @@ -232,8 +232,285 @@ root.render(); {% endhighlight %} {% endtabs %} +## EnablePrintRotation in the PDF Viewer + +The `EnablePrintRotation` property controls whether landscape pages are auto-rotated to best fit when printing. The default value is `true`. Set to `false` to preserve the original page orientation and suppress automatic rotation during print. + +{% tabs %} +{% highlight js tabtitle="Standalone" %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
+
+ {/* Render the PDF Viewer */} + + + + +
+
); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
+
+ {/* Render the PDF Viewer */} + + + + +
+
); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endhighlight %} +{% endtabs %} + +## Print modes in the PDF Viewer + +The `printMode` property allows you to specify how the document is printed. + +The supported values are: +* `Default`: Prints the document from the same window. +* `NewWindow`: Prints the document from a new window/tab, which can be useful depending on browser popup policies. + +{% tabs %} +{% highlight js tabtitle="Standalone" %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, PrintMode, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
+
+ {/* Render the PDF Viewer */} + + + + +
+
); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, PrintMode, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
+
+ {/* Render the PDF Viewer */} + + + + +
+
); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endhighlight %} +{% endtabs %} + [View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to/Customization%20of%20print%20Quality) +## Print Events + +The following events are available in the PDF Viewer component. + +| Name | Description | +|--------------|----------------------------------------| +| `printStart` | Triggers when a print action starts. | +| `printEnd` | Triggers when a print action is completed. | + +### printStart Event +The [`printStart`](https://ej2.syncfusion.com/documentation/api/pdfviewer/#printstart) event triggers when the print action is started. + +#### Event Arguments +See [`PrintStartEventArgs`](https://ej2.syncfusion.com/documentation/api/pdfviewer/printStartEventArgs/) for details such as `fileName` and the `cancel` option. + +The following example illustrates how to handle the `printStart` event. + +{% tabs %} +{% highlight js tabtitle="Standalone" %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
+
+ {/* Render the PDF Viewer */} + { + console.log('Print action has started for file: ' + args.fileName); + // To cancel the print action + // args.cancel = true; + }} + style={{ height: '640px' }}> + + + +
+
); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
+
+ {/* Render the PDF Viewer */} + { + console.log('Print action has started for file: ' + args.fileName); + // To cancel the print action + // args.cancel = true; + }} + style={{ height: '640px' }}> + + + +
+
); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endhighlight %} +{% endtabs %} + +### printEnd Event +The [`printEnd`](https://ej2.syncfusion.com/documentation/api/pdfviewer/#printend) event triggers when a print action is completed. + +#### Event Arguments +See [`PrintEndEventArgs`](https://ej2.syncfusion.com/documentation/api/pdfviewer/printEndEventArgs/) for details such as `fileName`. + +The following example illustrates how to handle the `printEnd` event. + +{% tabs %} +{% highlight js tabtitle="Standalone" %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
+
+ {/* Render the PDF Viewer */} + { + console.log('Printed File Name: ' + args.fileName); + }} + style={{ height: '640px' }}> + + + +
+
); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
+
+ {/* Render the PDF Viewer */} + { + console.log('Printed File Name: ' + args.fileName); + }} + style={{ height: '640px' }}> + + + +
+
); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endhighlight %} +{% endtabs %} + ## See also * [Toolbar items](./toolbar) diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-files.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-files.md index 2cf9d9cd6..04152db83 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-files.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-files.md @@ -2,7 +2,7 @@ layout: post title: Saving PDF files in React Pdfviewer component | Syncfusion description: This page helps you to learn here all about saving PDF files in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Saving PDF files +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## diff --git a/Document-Processing/PDF/PDF-Viewer/react/text-search.md b/Document-Processing/PDF/PDF-Viewer/react/text-search.md index 9ff70d899..249c22ed9 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/text-search.md +++ b/Document-Processing/PDF/PDF-Viewer/react/text-search.md @@ -102,12 +102,102 @@ When the 'Match Any Word' option is enabled, the entered text in the search inpu ![Alt text](./images/MultiSearchPopup.png) +### Programmatic Search with Settings + +While the PDF Viewer's toolbar provides a user-friendly way to search, you can also trigger and customize searches programmatically using the `searchText` method and its options. + +#### Using `searchText` + +The `searchText` method allows you to initiate a search with specific criteria. + +{% raw %} +import React, { useRef } from 'react'; +import { PdfViewerComponent } from '@syncfusion/ej2-react-pdfviewer'; + +export default function SearchExample() { + const viewerRef = useRef(null); + + const doSearch = () => { + viewerRef.current?.textSearch.searchText('search text', false, false); + }; + + return ( + <> + + + + ); +} +{% endraw %} + +#### Match Case + +To perform a case-sensitive search, set the `isMatchCase` parameter to `true`. This corresponds to the 'Match Case' checkbox in the search panel. + +{% raw %} +import React, { useEffect, useRef } from 'react'; +import { PdfViewerComponent } from '@syncfusion/ej2-react-pdfviewer'; + +export default function MatchCaseExample() { + const viewerRef = useRef(null); + + useEffect(() => { + // This will only find instances of "PDF" in uppercase. + viewerRef.current?.textSearch.searchText('PDF', true); + }, []); + + return ( + + ); +} +{% endraw %} + +#### Match Whole Word + +You can search for whole words by setting the `isMatchWholeWord` parameter to `true`. When this is enabled, the search will only match occurrences where the search term is not part of a larger word. For example, a search for "view" will not match "viewer". + +{% raw %} +import React, { useEffect, useRef } from 'react'; +import { PdfViewerComponent } from '@syncfusion/ej2-react-pdfviewer'; + +export default function WholeWordExample() { + const viewerRef = useRef(null); + + useEffect(() => { + // This will find "pdf" but not "pdf-succinctly" + viewerRef.current?.textSearch.searchText('pdf', false, true); + }, []); + + return ( + + ); +} +{% endraw %} + +**Note on 'Match Any Word':** The 'Match Any Word' checkbox in the UI is a feature that splits the input string into multiple words and performs a search for each of them. This is different from the `isMatchWholeWord` parameter of the `searchText` method, which enforces a whole-word match for the entire search string provided. + + The following text search methods are available in the PDF Viewer, -* [**Search text**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/textSearch/#searchtext):- Searches the target text in the PDF document and highlights the occurrences in the pages. -* [**Search next**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/textSearch/#searchnext):- Searches the next occurrence of the searched text from the current occurrence of the PdfViewer. -* [**Search previous**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/textSearch/#searchprevious):- Searches the previous occurrence of the searched text from the current occurrence of the PdfViewer. -* [**Cancel text search**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/textSearch/#canceltextsearch):- The text search can be canceled and the highlighted occurrences from the PDF Viewer can be removed . +* [**Search text**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearch/#searchtext):- Searches the target text in the PDF document and highlights the occurrences in the pages. +* [**Search next**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearch/#searchnext):- Searches the next occurrence of the searched text from the current occurrence of the PdfViewer. +* [**Search previous**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearch/#searchprevious):- Searches the previous occurrence of the searched text from the current occurrence of the PdfViewer. +* [**Cancel text search**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearch/#canceltextsearch):- The text search can be canceled and the highlighted occurrences from the PDF Viewer can be removed . ![Alt text](./images/search.png) @@ -464,8 +554,111 @@ root.render(); {% endhighlight %} {% endtabs %} -[View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to/TextSearch) +## Text Search Events + +The PDF Viewer triggers events during text search operations, allowing you to customize behavior and respond to different stages of the search process. + +### textSearchStart + +The [textSearchStart](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#textsearchstartevent) event is raised the moment a search is initiated from the toolbar UI or by calling `textSearch.searchText(...)` programmatically. + +- Triggers when: the user submits a term in the search box or when code calls the search API. + +- Event arguments include ([TextSearchStartEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearchStartEventArgs/)): + - searchText: string — the term to search. + - matchCase: boolean — whether case-sensitive search is enabled. + - isMatchWholeWord: boolean — whether whole-word matching is enabled. + - name: string — event name. + - cancel: boolean — set to true to cancel the default search. + +{% raw %} + +import React from 'react'; +import { PdfViewerComponent } from '@syncfusion/ej2-react-pdfviewer'; + +export default function App() { + return ( + { + // args.searchText contains the term being searched + // args.cancel can be set to true to stop the default search + console.log(`Text search started for: "${args.searchText}"`); + }} + style={{ height: '640px' }} + /> + ); +} +{% endraw %} + +### textSearchHighlight + +The [textSearchHighlight](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#textsearchhighlightevent) event fires whenever an occurrence is highlighted during search or when navigating to next/previous results. +- Triggers when: a match is brought into view and highlighted (including navigation between matches). +- Event arguments include ([TextSearchHighlightEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearchHighlightEventArgs/)): + - bounds: RectangleBoundsModel | RectangleBoundsModel[] — rectangles of the highlighted match. + - pageNumber: number — page index where the match is highlighted. + - searchText: string — the searched term. + - matchCase: boolean — whether case-sensitive search was used. + - name: string — event name. + +{% raw %} + +import React from 'react'; +import { PdfViewerComponent } from '@syncfusion/ej2-react-pdfviewer'; + +export default function App() { + return ( + { + // args.bounds provides the rectangle(s) of the current match + console.log('Highlighted match bounds:', args.bounds); + }} + style={{ height: '640px' }} + /> + ); +} +{% endraw %} + +### textSearchComplete + +The [textSearchComplete](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/#textsearchcompleteevent) event is raised after the search engine finishes scanning and resolving all matches for the current query. + +- Triggers when: the search for the submitted term has completed across the document. +- Typical uses: + - Update UI with the total number of matches and enable navigation controls. + - Hide loading indicators or show a "no results" message if none were found. + - Record analytics for search effectiveness. +- Event arguments include ([TextSearchCompleteEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearchCompleteEventArgs/)): + - totalMatches: number — total number of occurrences found. + - isMatchFound: boolean — indicates whether at least one match was found. + - searchText: string — the searched term. + - matchCase: boolean — whether case-sensitive search was used. + - name: string — event name. + +{% raw %} + +import React from 'react'; +import { PdfViewerComponent } from '@syncfusion/ej2-react-pdfviewer'; + +export default function App() { + return ( + { + // args.totalMatches may indicate how many results were found (when available) + console.log('Text search completed.', args); + }} + style={{ height: '640px' }} + /> + ); +} +{% endraw %} ## See also * [Toolbar items](./toolbar) From 60f030a140465fbdd823198b89dac00f2cecb292 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Thu, 16 Oct 2025 14:05:09 +0530 Subject: [PATCH 09/47] 984044: Recheck --- Document-Processing/PDF/PDF-Viewer/react/download.md | 2 +- Document-Processing/PDF/PDF-Viewer/react/feature-module.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/download.md b/Document-Processing/PDF/PDF-Viewer/react/download.md index 89a269eb7..7784cc499 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/download.md +++ b/Document-Processing/PDF/PDF-Viewer/react/download.md @@ -7,7 +7,7 @@ platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Download in Typescript Pdf viewer control +# Download in React Pdf viewer control The PDF Viewer supports downloading the loaded PDF file. You can enable/disable the download using the following code snippet. diff --git a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md index cefa7294d..b8ec36591 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md +++ b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md @@ -8,7 +8,7 @@ documentation: ug domainurl: ##DomainURL## --- -# Feature module in Typescript Pdf viewer Control +# Feature module in React Pdf viewer Control The PDF Viewer features are segregated into individual feature-wise modules to enable selectively referencing in the application. The required modules should be injected to extend its functionality. The following are the selective modules of PDF Viewer that can be included as required: From aa7b78c07c2e7aaf8bf4277fd13c218c0ef6f7d9 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Thu, 16 Oct 2025 14:16:38 +0530 Subject: [PATCH 10/47] 984044: annot commit --- .../react/annotation/annotation-event.md | 749 +++++++++++------- .../annotation/line-angle-constraints.md | 2 +- .../annotation/text-markup-annotation.md | 2 +- 3 files changed, 478 insertions(+), 275 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md index ce6a18e69..c98a8019a 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md @@ -79,23 +79,36 @@ The following example illustrates how to handle the `annotationAdd` event. ``` -```react -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - annotationAdd: function (args: any) { - console.log('Annotation added with ID: ' + args.annotationId); - console.log('Annotation type: ' + args.annotationType); - } -}); -viewer.appendTo('#pdfViewer'); -``` +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const annotationAdd = (args) => { + console.log('Annotation added with ID: ' + args.annotationId); + console.log('Annotation type: ' + args.annotationType); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### annotationDoubleClick @@ -142,21 +155,35 @@ The following example illustrates how to handle the `annotationDoubleClick` even ``` -```react -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - annotationDoubleClick: function (args: any) { - console.log('Annotation double-clicked on page: ' + args.pageIndex); - } -}); -viewer.appendTo('#pdfViewer'); -``` +function App() { + const annotationDoubleClick = (args) => { + console.log('Annotation double-clicked on page: ' + args.pageIndex); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### annotationMouseLeave @@ -203,21 +230,32 @@ The following example illustrates how to handle the `annotationMouseLeave` event ``` -```react -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - annotationMouseLeave: function (args: any) { - console.log('Annotation mouse leave event is triggered for annotation with ID: ' + args.pageIndex); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const annotationMouseLeave = (args) => { + console.log('Annotation mouse leave event is triggered for annotation with ID: ' + args.pageIndex); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### annotationMouseover @@ -264,21 +302,32 @@ The following example illustrates how to handle the `annotationMouseover` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - annotationMouseover: function (args: any) { - console.log('Annotation mouse over event is triggered for annotation with ID: ' + args.annotationId); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const annotationMouseover = (args) => { + console.log('Annotation mouse over event is triggered for annotation with ID: ' + args.annotationId); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### annotationMove @@ -325,21 +374,32 @@ The following example illustrates how to handle the `annotationMove` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - annotationMove: function (args: any) { - console.log('Annotation moved. ID: ' + args.annotationId + ' on page ' + args.pageIndex); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const annotationMove = (args) => { + console.log('Annotation moved. ID: ' + args.annotationId + ' on page ' + args.pageIndex); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### annotationMoving @@ -386,21 +446,32 @@ The following example illustrates how to handle the `annotationMoving` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - annotationMoving: function (args: any) { - console.log('Annotation is being moved. Current Action: ' + args.currentPosition); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const annotationMoving = (args) => { + console.log('Annotation is being moved. Current Action: ' + args.currentPosition); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### annotationPropertiesChange @@ -447,22 +518,33 @@ The following example illustrates how to handle the `annotationPropertiesChange` ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - annotationPropertiesChange: function (args: any) { - console.log('Annotation properties changed for ID: ' + args.annotationId); - console.log('isThicknessChanged: ' + args.isThicknessChanged); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const annotationPropertiesChange = (args) => { + console.log('Annotation properties changed for ID: ' + args.annotationId); + console.log('isThicknessChanged: ' + args.isThicknessChanged); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### annotationRemove @@ -509,21 +591,32 @@ The following example illustrates how to handle the `annotationRemove` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - annotationRemove: function (args: any) { - console.log('Annotation removed with ID: ' + args.annotationId); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const annotationRemove = (args) => { + console.log('Annotation removed with ID: ' + args.annotationId); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### annotationResize @@ -570,21 +663,32 @@ The following example illustrates how to handle the `annotationResize` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - annotationResize: function (args: any) { - console.log('Annotation resized. ID: ' + args.annotationId); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const annotationResize = (args) => { + console.log('Annotation resized. ID: ' + args.annotationId); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### annotationSelect @@ -631,21 +735,32 @@ The following example illustrates how to handle the `annotationSelect` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - annotationSelect: (args: any) => { - console.log('Annotation selected with ID: ' + args.annotationId); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const annotationSelect = (args) => { + console.log('Annotation selected with ID: ' + args.annotationId); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### annotationUnselect @@ -692,21 +807,32 @@ The following example illustrates how to handle the `annotationUnselect` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - annotationUnselect: function (args: any) { - console.log('Annotation unselected with ID: ' + args.annotationId); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const annotationUnselect = (args) => { + console.log('Annotation unselected with ID: ' + args.annotationId); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### beforeAddFreeText @@ -753,23 +879,34 @@ The following example illustrates how to handle the `beforeAddFreeText` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - beforeAddFreeText: function (args: any) { - console.log('Before adding free text on page: ' + args.pageIndex); - // Set args.cancel to true to prevent adding the free text annotation - // args.cancel = true; - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const beforeAddFreeText = (args) => { + console.log('Before adding free text on page: ' + args.pageIndex); + // To prevent adding the free text annotation + // args.cancel = true; + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ## Signature-related events @@ -818,21 +955,32 @@ The following example illustrates how to handle the `addSignature` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - addSignature: function (args: any) { - console.log('Signature added to page: ' + args.pageIndex); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const addSignature = (args) => { + console.log('Signature added to page: ' + args.pageIndex); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### removeSignature @@ -879,21 +1027,32 @@ The following example illustrates how to handle the `removeSignature` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - removeSignature: function (args: any) { - console.log('Signature removed from page: ' + args.pageIndex); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const removeSignature = (args) => { + console.log('Signature removed from page: ' + args.pageIndex); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### resizeSignature @@ -940,21 +1099,32 @@ The following example illustrates how to handle the `resizeSignature` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - resizeSignature: function (args: any) { - console.log('Signature resized on page ' + args.pageIndex); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const resizeSignature = (args) => { + console.log('Signature resized on page ' + args.pageIndex); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### signaturePropertiesChange @@ -1001,21 +1171,32 @@ The following example illustrates how to handle the `signaturePropertiesChange` ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - signaturePropertiesChange: function (args: any) { - console.log('Signature properties changed on page ' + args.pageIndex); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const signaturePropertiesChange = (args) => { + console.log('Signature properties changed on page ' + args.pageIndex); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### signatureSelect @@ -1062,21 +1243,32 @@ The following example illustrates how to handle the `signatureSelect` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - signatureSelect: function (args: any) { - console.log('Signature selected on page ' + args.pageIndex); - } -}); -viewer.appendTo('#pdfViewer'); -``` +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const signatureSelect = (args) => { + console.log('Signature selected on page ' + args.pageIndex); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} ### signatureUnselect @@ -1123,18 +1315,29 @@ The following example illustrates how to handle the `signatureUnselect` event. ``` -```typescript -import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation,ThumbnailView, BookmarkView, - TextSelection, Annotation, FormDesigner, FormFields, FormFieldAddArgs, PageOrganizer } from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject( Toolbar,Magnification, Navigation, LinkAnnotation,ThumbnailView, - BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer ); - -let viewer: PdfViewer = new PdfViewer({ - documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', - signatureUnselect: function (args: any) { - console.log('Signature unselected on page ' + args.pageIndex); - } -}); -viewer.appendTo('#pdfViewer'); -``` \ No newline at end of file +```jsx +import * as React from 'react'; +import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const signatureUnselect = (args) => { + console.log('Signature unselected on page ' + args.pageIndex); + }; + + return ( + + + + ); +} + +export default App; + +{% endraw %} +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md index e770c02c2..da61f44f7 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md @@ -114,4 +114,4 @@ When modifying existing line annotations using selectors: [View a sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) -N> Refer to the TypeScript PDF Viewer [feature tour](https://www.syncfusion.com/pdf-viewer-sdk/javascript-pdf-viewer) for feature highlights. Explore the [TypeScript PDF Viewer examples](https://github.com/SyncfusionExamples/typescript-pdf-viewer-examples) to learn how to render and configure the PDF Viewer. +N> Refer to the React PDF Viewer [feature tour](https://www.syncfusion.com/pdf-viewer-sdk/javascript-pdf-viewer) for feature highlights. Explore the [React PDF Viewer examples](https://github.com/SyncfusionExamples/react-pdf-viewer-examples) to learn how to render and configure the PDF Viewer. diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md index d92c2b733..c81a43d03 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md @@ -8,7 +8,7 @@ documentation: ug domainurl: ##DomainURL## --- -# Text markup annotation in TypeScript PDF Viewer +# Text markup annotation in React PDF Viewer The PDF Viewer provides options to add, edit, and delete text markup annotations, including Highlight, Underline, Strikethrough, and Squiggly. From e2a3530e5cdaf8b358e14a4b9fe7c6c29bfd7389 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Thu, 16 Oct 2025 18:29:41 +0530 Subject: [PATCH 11/47] 984044: How to section --- .../how-to/add-annotation-in-text-search.md | 17 +++---- .../react/how-to/add-save-button.md | 46 +++++++++--------- .../react/how-to/clear-annotation.md | 23 ++++----- .../configure-annotation-selector-setting.md | 48 ++++++++----------- .../PDF-Viewer/react/how-to/conformance.md | 35 +++++++------- .../how-to/control-annotation-visibility.md | 16 +++---- ...pdf-library-bounds-to-pdf-viewer-bounds.md | 24 +++++----- .../react/how-to/custom-context-menu.md | 20 ++++---- .../how-to/custom-font-signature-field.md | 21 ++++---- .../PDF-Viewer/react/how-to/custom-fonts.md | 17 ++++--- .../react/how-to/delete-annotation.md | 19 ++++---- .../react/how-to/download-start-event.md | 20 ++++---- .../react/how-to/enable-local-storage.md | 24 ++++------ .../react/how-to/enable-text-selection.md | 30 ++++++------ .../react/how-to/export-as-image.md | 20 ++++---- .../react/how-to/extract-text-completed.md | 15 +++--- .../react/how-to/extract-text-option.md | 13 +++-- .../PDF-Viewer/react/how-to/extract-text.md | 33 +++++++------ .../react/how-to/find-text-async.md | 35 +++++--------- .../PDF/PDF-Viewer/react/how-to/get-base64.md | 15 +++--- .../PDF-Viewer/react/how-to/getPageInfo.md | 16 +++---- .../react/how-to/import-export-annotation.md | 15 +++--- .../PDF-Viewer/react/how-to/load-document.md | 23 +++++---- .../PDF-Viewer/react/how-to/min-max-zoom.md | 17 ++++--- .../PDF-Viewer/react/how-to/open-bookmark.md | 13 +++-- .../PDF-Viewer/react/how-to/open-thumbnail.md | 15 +++--- ...renderstarted-pagerendercompleted-event.md | 17 ++++--- ...lve-unable-to-find-an-entry-point-error.md | 25 +++++----- .../how-to/restricting-zoom-in-mobile-mode.md | 11 +++-- .../react/how-to/show-custom-stamp-item.md | 19 ++++---- .../react/how-to/show-hide-annotation.md | 15 +++--- .../signatureselect-signatureunselect.md | 18 +++---- .../react/how-to/unload-document.md | 2 +- 33 files changed, 326 insertions(+), 371 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md index 434ecae11..7efb5c1bf 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md @@ -1,24 +1,21 @@ --- layout: post -title: Add Annotation in Text Search in React PDF Viewer | Syncfusion -description: Learn how to add rectangle annotations using search text bounds in Syncfusion RReact Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Add rectangle annotation from textSearch in React PDF Viewer | Syncfusion +description: Learn to add rectangle annotations using text search bounds in the React PDF Viewer component, including initialization and search controls. control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Add Rectangle Annotations Using Search Text Bounds in PDF Viewer +# Add rectangle annotations using text search bounds in PDF Viewer -## Overview +A concise guide to adding rectangle annotations at highlighted text search results in the React PDF Viewer to visually emphasize matches and improve readability. -This guide demonstrates how to add rectangle annotations based on the bounds of highlighted search text in the PDF Viewer. This technique is useful for emphasizing search results with visual markers in annotation-supported applications. - -## Steps to Add Rectangle Annotations on Search Result Highlight +## Steps to add rectangle annotations on search result highlight **Step 1:** Follow the steps provided in the [Syncfusion® Getting Started Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to set up a basic PDF Viewer sample. -**Step 2:** Set Up the PdfViewer Component to add rectangle annotations based on the bounds of highlighted search text in the PDF Viewer. +**Step 2:** Initialize the PDF Viewer with the required modules {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -130,6 +127,6 @@ root.render(); {% endhighlight %} {% endtabs %} -By following this guide, you will enable the PDF Viewer to add rectangle annotations at search result locations, thus increasing the visibility of search results in your application. +Following these steps enables the PDF Viewer to add rectangle annotations at search result locations, improving the visibility of matches. [View sample on GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md index dde976e4a..e410824c9 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md @@ -1,22 +1,22 @@ --- layout: post -title: Add save button in toolbar in React Pdfviewer component | Syncfusion -description: Learn here all about Add Save button in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Add Save button to the built-in toolbar in React PDF Viewer | Syncfusion +description: Learn how to add, show, hide, enable, and disable a custom Save button in the built-in toolbar of the React PDF Viewer component. control: Toolbar platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Add Save button in Built-In Toolbar +# Add a Save button to the built-in toolbar -PDF Viewer allows you to customize(add, show, hide, enable, and disable) existing items in a toolbar. +PDF Viewer supports customizing toolbar items, including adding, showing, hiding, enabling, and disabling items. -* Save Button - New `save` button-item can defined by [**CustomToolbarItemModel**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/customToolbarItemModel/) and with existing items in [**ToolbarSettings**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbarSettings/) property. Newly added save button-item click action can be defined in [`toolbarclick`](https://ej2.syncfusion.com/react/documentation/api/toolbar/clickEventArgs/). +- Save button: The Save button can be defined using [CustomToolbarItemModel](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/customToolbarItemModel/) and included alongside existing items via [ToolbarSettings](https://ej2.syncfusion.com//react/documentation/api/file-manager/toolbarSettings/). Handle the click action using [`toolbarclick`](https://ej2.syncfusion.com/react/documentation/api/file-manager/toolbarClickEventArgs/). -* Show, Hide - `Save` button-item can be shown or hidden using the [`ToolbarSettings`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbarSettings/) property. Pre-defined toolbar items are available with [`ToolbarItem`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbarItem/). +- Show or hide: The Save button can be shown or hidden using [ToolbarSettings](https://ej2.syncfusion.com/react/documentation/api/file-manager/toolbarSettings/). Predefined items are listed under [`ToolbarItem`](https://ej2.syncfusion.com/react/documentation/api/chart/toolbarItems/). -* Enable, Disable - `Save` button-item can be enabled or disable using [`enabletoolbaritem`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbar/#enabletoolbaritem) +- Enable or disable: The Save button can be enabled or disabled using [`enabletoolbaritem`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbar/). {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -126,34 +126,34 @@ root.render(); {% endhighlight %} {% endtabs %} ->Note : Default value of toolbar items is ['OpenOption', 'PageNavigationTool','MagnificationTool', 'PanTool', 'SelectionTool', 'SearchOption', 'PrintOption', 'DownloadOption','UndoRedoTool', 'AnnotationEditTool', 'FormDesignerEditTool', 'CommentTool', 'SubmitForm'] +N> Default toolbar items: ['OpenOption', 'PageNavigationTool','MagnificationTool', 'PanTool', 'SelectionTool', 'SearchOption', 'PrintOption', 'DownloadOption','UndoRedoTool', 'AnnotationEditTool', 'FormDesignerEditTool', 'CommentTool', 'SubmitForm'] -### Align Property +### Align property -The align property is used to specify the alignment of a `save` button-item within the toolbar. +Specifies the alignment of the Save button within the toolbar. -`Left`: Aligns the item to the left side of the toolbar. -`Right`: Aligns the item to the right side of the toolbar. +- Left: Aligns the item to the left side of the toolbar. +- Right: Aligns the item to the right side of the toolbar. -### Tooltip Property +### Tooltip property -The tooltip property is used to set the tooltip text for a `save` button-item. Tooltip provides additional information when a user hovers over the item. +Sets the tooltip text for the Save button. The tooltip provides additional information on hover. -### CssClass Property +### CssClass property -The cssClass property is used to apply custom CSS classes to a `save` button-item. It allows custom styling of the `save` button-item. +Applies custom CSS classes to the Save button for styling. -### Prefix Property +### Prefix property -The prefix property is used to set the CSS class or icon that should be added as a prefix to the existing content of the toolbar item. +Sets the CSS class or icon to add as a prefix to the Save button content. -### ID Property +### ID property -The id property within a CustomToolbarItemModel is a compulsory attribute that plays a vital role in toolbar customization. It serves as a unique identifier for each toolbar item, facilitating distinct references and interactions. +The id property within a CustomToolbarItemModel is required and uniquely identifies each toolbar item for configuration and interaction. -When defining or customizing toolbar items, it is mandatory to assign a specific and descriptive id to each item. -These properties are commonly used when defining custom toolbar items with the `CustomToolbarItemModel` in the context of Syncfusion® PDF Viewer. When configuring the toolbar using the `ToolbarSettings` property, you can include these properties to customize the appearance and behavior of each toolbar item. +When defining or customizing toolbar items, assign a specific, descriptive id to each item. These properties are commonly used when defining custom toolbar items with `CustomToolbarItemModel` in the context of Syncfusion PDF Viewer. When configuring the toolbar using the `ToolbarSettings` property, include these properties to customize appearance and behavior. -N> When customizing `save` button-item, you have the flexibility to include either icons or text based on your design preference. + +N> When customizing the Save button, icons or text can be used based on design preference. [View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/clear-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/clear-annotation.md index 450d4845e..b0efe333b 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/clear-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/clear-annotation.md @@ -1,24 +1,24 @@ --- layout: post -title: Clear annotation in React Pdfviewer component | Syncfusion -description: Learn here all about Clear annotation in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Clear annotation +title: Clear annotations in React PDF Viewer | Syncfusion +description: Learn how to clear all annotations or delete specific annotations in the React PDF Viewer using deleteAnnotations and deleteAnnotationById. +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Clear annotation in React Pdfviewer component +# Clear annotations in React PDF Viewer -To clear all the annotations in a PDF document using the Syncfusion® PDF Viewer, you can use the **deleteAnnotations()** method. This method is used to clear all the annotations present in the currently loaded document. +Use the [deleteAnnotations](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#deleteannotations) method to clear all annotations in the currently loaded document. -Here is an example of how you can clear all the annotations present in the currently loaded document: +Example: Clear all annotations in the loaded document ```html ``` -We can also delete specific annotation with the **deleteAnnotationById()** method. This method is used to delete a specific annotation using its id. +To remove a specific annotation, use the deleteAnnotationById method to target an annotation by its id. -Here is an example of how you can delete specific annotation with the **deleteAnnotationById()** method: +Example: Delete a specific annotation by id ```html ``` -Find the sample [how to clear annotations using deleteAnnotations](https://stackblitz.com/edit/react-xlvqkm?file=public%2Findex.html) \ No newline at end of file +Sample: How to clear annotations using deleteAnnotations +(https://stackblitz.com/edit/react-xlvqkm?file=public%2Findex.html) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/configure-annotation-selector-setting.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/configure-annotation-selector-setting.md index 7122c949b..869f496ed 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/configure-annotation-selector-setting.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/configure-annotation-selector-setting.md @@ -1,26 +1,24 @@ --- layout: post -title: AnnotationSelector Setting in React Pdfviewer component | Syncfusion -description: Learn here all about AnnotationSelector Setting in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Configure annotation selector settings in React PDF Viewer | Syncfusion +description: Learn how to configure annotation selector settings in the React PDF Viewer using annotationSelectorSettings and related options. control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# How to Configure Annotation Selector Settings +# Configure annotation selector settings -### Annotation Selector Settings +Use the [annotationSelectorSettings](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationSelectorSettings/) property to customize the appearance and behavior of the annotation selector in the UI. -The [**annotationSelectorSettings**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationSelectorSettings/) property allows you to customize the appearance and behavior of the annotation selector in the UI. +AnnotationSelectorSettingsModel -The [**AnnotationSelectorSettingsModel**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationSelectorSettingsModel/) defines the settings for the annotation selector, including border colors, sizes, and shapes. It provides fine-grained control over how annotations are displayed and interacted with. +The [AnnotationSelectorSettingsModel](https://ej2.syncfusion.com/react/documentation/api/accumulation-chart/accumulationAnnotationSettingsModel/) defines settings such as border colors, sizes, and shapes, enabling fine-grained control over how annotations are displayed and interacted with. -### How to Configure Annotation Selector Settings - -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started/) to create a simple PDF Viewer sample. - -**Step 2:** Add JavaScript for Annotation Selector Settings: Below the PDF Viewer in your view, include the following script to configure the annotationSelectorSettings +Steps to configure annotation selector settings +- Step 1: Create a PdfViewer instance and initialize it. +- Step 2: Set the annotationSelectorSettings property to customize selector behavior. {% raw %} @@ -44,24 +42,18 @@ The [**AnnotationSelectorSettingsModel**](https://ej2.syncfusion.com/react/docum ``` {% endraw %} -#### Key properties include: - -* **selectionBorderColor**: Sets the color for the border around selected annotations. - -* **resizerBorderColor**: Sets the color for the border of the resizer handles. - -* **resizerFillColor**: Defines the fill color for the resizer handles. - -* **resizerSize**: Determines the size of the resizer handles. - -* **selectionBorderThickness**: Specifies how thick the selection border should be. - -* **resizerShape**: Allows you to choose the shape of the resizer handles (e.g., Circle or Square). - -* **selectorLineDashArray**: Specifies the dash pattern for the selector line to enhance visual cues. +- Step 3: Append the viewer to the target HTML element using appendTo. -* **resizerLocation**: Determines where the resizer appear in relation to the annotation (e.g., Corners or Edges). +Key properties -* **resizerCursorType**: Sets the cursor style when hovering over the resizer, improving user interaction. +- selectionBorderColor: Sets the color for the border around selected annotations. +- resizerBorderColor: Sets the color for the border of the resizer handles. +- resizerFillColor: Defines the fill color for the resizer handles. +- resizerSize: Determines the size of the resizer handles. +- selectionBorderThickness: Specifies the thickness of the selection border. +- resizerShape: Sets the shape of the resizer handles (for example, Circle or Square). +- selectorLineDashArray: Specifies the dash pattern for the selector line. +- resizerLocation: Determines where the resizers appear relative to the annotation (for example, Corners or Edges). +- resizerCursorType: Sets the cursor style when hovering over a resizer. [View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/conformance.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/conformance.md index 37752dbfe..751f83dae 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/conformance.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/conformance.md @@ -1,26 +1,25 @@ --- layout: post -title: Know the supported conformance PDF documents | Syncfusion -description: Learn here all about the supported conformance PDF documents in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. -control: Conformance +title: Supported PDF conformance levels | Syncfusion +description: Learn about the supported PDF/A and PDF/X conformance levels in the React PDF Viewer component. platform: document-processing +control: PDF Viewer documentation: ug -domainurl: ##DomainURL## --- -# Know the supported conformance PDF documents in React PDF Viewer component +# Supported PDF conformance in React PDF Viewer -The PDF Viewer supports the below conformance documents: +The PDF Viewer supports the following conformance levels: -* **PDF/A-1a conformance** -* **PDF/A-1b conformance** -* **PDF/X-1a conformance** -* **PDF/A-2a conformance** -* **PDF/A-2b conformance** -* **PDF/A-2u conformance** -* **PDF/A-3a conformance** -* **PDF/A-3b conformance** -* **PDF/A-3u conformance** -* **PDF/A-4 conformance** -* **PDF/A-4e conformance** -* **PDF/A-4f conformance** \ No newline at end of file +* PDF/A-1a +* PDF/A-1b +* PDF/X-1a +* PDF/A-2a +* PDF/A-2b +* PDF/A-2u +* PDF/A-3a +* PDF/A-3b +* PDF/A-3u +* PDF/A-4 +* PDF/A-4e +* PDF/A-4f \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/control-annotation-visibility.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/control-annotation-visibility.md index 6314de55d..6ad6f0ff7 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/control-annotation-visibility.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/control-annotation-visibility.md @@ -1,22 +1,22 @@ --- layout: post -title: Annotations Visibility in React Pdfviewer component | Syncfusion -description: Learn how to Control PDF Annotations Visibility in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Control annotation visibility in React PDF Viewer | Syncfusion +description: Learn how to control the visibility of PDF annotations in the React PDF Viewer, ensuring annotations appear only in the viewer as needed. control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Control PDF Annotations Visibility in PDF Viewer +# Control annotation visibility in PDF Viewer -### Overview +Overview -This guide demonstrates how to control the visibility of PDF annotations in documents loaded and saved using the Syncfusion® PDF Viewer. This process allows the annotations to be visible only in the Syncfusion® PDF Viewer. +This guide explains how to control the visibility of PDF annotations in documents loaded and saved using the Syncfusion PDF Viewer in React, so annotations are visible only in the viewer when required. -### How to Control Annotation Visibility +Steps to control annotation visibility -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/angular/getting-started/) to create a simple PDF Viewer sample. +**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started/) to create a simple PDF Viewer sample. **Step 2:** Set Up Your React Component @@ -114,6 +114,6 @@ root.render(); {% endhighlight %} {% endtabs %} -By following these steps, the annotations in a PDF document can be set to be visible in the Syncfusion® PDF Viewer, providing control over annotation visibility based on different platforms. +Following these steps ensures annotations are visible in the Syncfusion PDF Viewer while controlling their visibility in the downloaded PDF. [View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md index 61607e4a2..dd3df4947 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md @@ -1,32 +1,30 @@ --- layout: post -title: Converting Library Bounds in React PdfViewer | Syncfusion -description: Learn how to convert Library bounds into Viewer bounds in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Convert PDF Library bounds to PDF Viewer bounds | Syncfusion +description: Learn how to convert PDF Library bounds into PDF Viewer bounds when exporting annotations, ensuring accurate placement in the React PDF Viewer. control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Converting PDF Library Bounds to PDF Viewer Bounds +# Convert PDF Library bounds to PDF Viewer bounds -### Overview +When exporting annotations from the PDF Library, convert the bounds values into the PDF Viewer format to ensure accurate placement. -When exporting annotations from the PDF Library, you may need to convert the bounds values into the PDF Viewer format. This guide will help you achieve that using the Syncfusion® PDF Viewer component. +Steps to convert bounds values -### How to Convert Bounds Values - -**Step 1:** Initialize the PdfViewer Instance +**Step 1:** Initialize the PdfViewer instance Create an instance of the PdfViewer and configure it with the required services. -**Step 2:** Handle Export Success +**Step 2:** Handle export success Convert the exported blob URL to an object and then extract and convert the annotation bounds. -**Step 3:** Create a Function to Convert Blob URL to Object +**Step 3:** Convert Blob URL to object -This function fetches the blob data and converts it into a JSON object. +Fetch the blob data and convert it into a JSON object. {% tabs %} {% highlight js tabtitle="Server-Backed" %} @@ -155,8 +153,8 @@ root.render(); {% endhighlight %} {% endtabs %} -### Conclusion +Conclusion -By following these steps, you can successfully convert PDF Library bounds values into PDF Viewer bounds values when exporting annotations as JSON. This will help maintain accuracy in the annotation placement and ensure a seamless user experience. +These steps convert PDF Library bounds values into PDF Viewer bounds values when exporting annotations as JSON, maintaining accurate annotation placement. [View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to/) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-context-menu.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-context-menu.md index 0c152695c..30e50e50b 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-context-menu.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-context-menu.md @@ -1,20 +1,20 @@ --- layout: post -title: Customize context menu in | Syncfusion -description: Learn here all about Customize context menu in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Customize the context menu in React PDF Viewer | Syncfusion +description: Learn how to add and customize custom context menu options in the React PDF Viewer using addCustomMenu, customContextMenuSelect, and related events. control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Customize context menu in React Pdfviewer component +# Customize the context menu in PDF Viewer -PDF Viewer allows you to add custom option in context menu. It can be achieved by using the `addCustomMenu()` method and custom action is defined using the `customContextMenuSelect()`method. +PDF Viewer supports adding custom options to the context menu using the [addCustomMenu()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#addcustommenu) method. Define actions for custom items with the [customContextMenuSelect()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#customcontextMenuselect) method. -### Add Custom Option +### Add a custom option -The following code shows how to add custom option in context menu. +The following example adds custom options to the context menu. ```js export function App() { @@ -74,9 +74,9 @@ const root = ReactDOM.createRoot(document.getElementById('sample')); root.render(); ``` -### Customize custom option in context menu +#### Show or hide custom items before opening -The PDF Viewer feature enables customization of custom options and the ability to toggle the display of the default context menu. When the addCustomMenu parameter is set to `true`, the default menu is hidden; conversely, when it is set to `false`, the default menu items are displayed. +Use [customContextMenuBeforeOpen()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#customcontextMenubeforeopen) to hide or show custom options dynamically. ```js export function App() { @@ -181,7 +181,7 @@ export function App() { case 'search_in_google': for (var i = 0; i < viewer.textSelectionModule.selectionRangeArray.length; i++) { var content = viewer.textSelectionModule.selectionRangeArray[i].textContent; - if ((viewer.textSelectionModule.isTextSelection) && (/\S/.test(content))) { + if ((viewer.textSelectionModule.isTextSelection) && (\/\S\/.test(content))) { window.open('http://google.com/search?q=' + content); } } @@ -306,7 +306,7 @@ export function App() { const root = ReactDOM.createRoot(document.getElementById('sample')); root.render(); ``` -The following is the output of custom context menu with customization. +The following is the output of the custom context menu with customization. {% tabs %} {% highlight js tabtitle="index.jsx" %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-font-signature-field.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-font-signature-field.md index 165742268..34de478d4 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-font-signature-field.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-font-signature-field.md @@ -1,25 +1,24 @@ --- layout: post -title: How to change the font family in Syncfusion React Pdfviewer component -description: Learn how to change the font family in Form Field's Type Signature in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Change font family in React PDF Viewer | Syncfusion +description: Learn how to change the font family for form field type signatures and initials in the React PDF Viewer using typeSignatureFonts and typeInitialFonts. platform: document-processing control: PDF Viewer documentation: ug domainurl: ##DomainURL## --- -# To Change the Font Family -Change the Font Family in Type Signature of the Syncfusion® PDF Viewer by adding a custom css stylesheet to the document , and then apply the desired font family to the type signature element. Include the Google font link in the HTML head section to apply the Google Font. +# Change the font family for type signatures -### Signature Field property +Change the font family for Type Signature and Initial fields by adding a stylesheet to load fonts and assigning them via the PDF Viewer settings. Include Google Font links in the HTML head to use those fonts. -The Syncfusion® PDF Viewer provides the ability to change the font family for Signature and Initial Field using `typeSignatureFonts` and `typeInitialFonts`property. +### Signature field property -The following steps are used to include custom fonts for signature and initial field. +The PDF Viewer supports changing fonts for Signature and Initial fields using the `typeSignatureFonts` and `typeInitialFonts` properties. **Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample. -**Step 2:** Insert the following code snippet to implement the functionality for using custom fonts in Signature field. +**Step 2:** Use the following code to apply custom fonts to the Signature field. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -61,9 +60,9 @@ root.render(); {% endtabs %} -### Initial Field property +### Initial field property -Insert the following code snippet to implement the functionality for using custom fonts in Initial field. +Use the following code to apply custom fonts to the Initial field. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -105,4 +104,4 @@ root.render(); {% endhighlight %} {% endtabs %} -By implementing this , you can use custom fonts in form field's signature in both `signature` and `initial` field \ No newline at end of file +By implementing this configuration, custom fonts can be used for both Signature and Initial form fields. \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-fonts.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-fonts.md index efd872055..80cea180e 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-fonts.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-fonts.md @@ -1,23 +1,22 @@ --- layout: post -title: Add custom fonts to the PDF Viewer using the PDF document | Syncfusion -description: Learn here all about how to add custom fonts using the PDF document in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Add custom fonts in React PDF Viewer | Syncfusion +description: Learn how to add and load custom TTF fonts for documents displayed in the React PDF Viewer using the customFonts property. control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# How to add custom fonts to the PDF viewer used in the PDF document +# Add custom fonts in PDF Viewer -To use custom fonts in the Syncfusion® PDF Viewer within your PDF document, you need to add the custom TTF font files to the resource URL directory and configure the viewer to load these fonts. You can specify the custom font names using the -**customFonts** property, which accepts an array of font names. +To use custom fonts in the Syncfusion PDF Viewer, add the custom TTF files to the resource URL directory and configure the viewer to load them. Specify font file names using the `customFonts` property as an array of names. -The following steps are used to customize the selection border. +Steps to add custom fonts -**Step 1:** Add the custom TTF font files to the resource URL path referenced in your application. For example, place the custom TTF files in the ej2-pdfviewer-lib folder, which will serve as the resource URL path. +**Step 1:** Add custom TTF font files to the resource URL path referenced in the application. For example, place the TTF files in the ej2-pdfviewer-lib folder that serves as the resource URL path. -**Step 2:** The following code snippet are how you can add custom fonts to the PDF viewer. +**Step 2:** Use the following code to configure custom fonts in the PDF Viewer. {% raw %} @@ -33,4 +32,4 @@ The following steps are used to customize the selection border. ``` {% endraw %} -By following these steps, you can successfully integrate and use custom fonts in your PDF documents displayed in the EJ2 PDF Viewer. \ No newline at end of file +These steps integrate custom fonts into PDF documents displayed in the PDF Viewer. \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/delete-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/delete-annotation.md index 8c33749bd..9b829fe8f 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/delete-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/delete-annotation.md @@ -1,22 +1,22 @@ --- layout: post -title: Delete annotation in React Pdfviewer component | Syncfusion -description: Learn here all about Delete annotation in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Delete annotation +title: Delete an annotation in React PDF Viewer | Syncfusion +description: Learn how to delete a specific annotation in the React PDF Viewer using the deleteAnnotationById method. +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Delete annotation in React Pdfviewer component +# Delete an annotation in PDF Viewer -The PDF Viewer library allows you to delete a specific annotation from a PDF document. Deleting a specific annotation can be done using the **deleteAnnotationById()** method. This method is used to delete a specific annotation using its id. +Use the `deleteAnnotationById()` method to remove a specific annotation from a PDF document by its id. -The following steps are used to delete a specific annotation from PDF Document. +Steps to delete a specific annotation -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/angular/getting-started/) to create a simple PDF Viewer sample. +**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started/) to create a simple PDF Viewer sample. -**Step 2:** Use the following code snippet to delete a specific annotation using `deleteAnnotationById()` method. +**Step 2:** Use the following code to delete a specific annotation using `deleteAnnotationById()`. ``` @@ -30,4 +30,5 @@ The following steps are used to delete a specific annotation from PDF Document. ``` -Find the sample [how to delete a specific annotation using deleteAnnotationById](https://stackblitz.com/edit/react-svdb9y?file=src%2Findex.js) \ No newline at end of file +Sample: How to delete a specific annotation using deleteAnnotationById +(https://stackblitz.com/edit/react-svdb9y?file=src%2Findex.js) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/download-start-event.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/download-start-event.md index 1f69e5f00..754505b1c 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/download-start-event.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/download-start-event.md @@ -1,20 +1,16 @@ --- layout: post -title: Controlling File Downloadsl in React Pdfviewer component | Syncfusion -description: Learn here how to Controlling File Downloads in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Control file downloads in React PDF Viewer | Syncfusion +description: Learn how to intercept and control file downloads in the React PDF Viewer using the downloadStart event. control: Open thumbnail platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Controlling File Downloads in Syncfusion® PDF Viewer +# Control file downloads in PDF Viewer -In the Syncfusion® PDF Viewer, we've introduced a new feature that enables you to manage file downloads more effectively. This feature allows you to intercept and potentially skip the download process of a PDF document, providing enhanced control over user interactions within your application. - -### Using the downloadStart Event - -The key to this functionality lies in the downloadStart event, which offers a mechanism to intercept the initiation of the download process. Within the event handler, you can set the cancel argument to true to programmatically prevent the download action from proceeding. +Use the downloadStart event to intercept the start of a download and optionally cancel it. In the event handler, set `args.cancel = true` to prevent the download. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -30,7 +26,7 @@ let pdfviewer; function App() { function downloadStart(args){ - // Your custom logic here + // Custom logic args.cancel = true; // Prevent download action }; return (
@@ -95,8 +91,8 @@ root.render(); {% endhighlight %} {% endtabs %} -By default, the cancel argument is set to `false`, indicating that the download action will proceed unless explicitly canceled by your custom logic. +By default, `args.cancel` is `false`, so the download proceeds unless explicitly canceled. -### Enhanced Flexibility +### Flexibility -By leveraging the `downloadStart` event and its cancel argument, you gain the ability to implement custom logic to control and potentially prevent download actions based on your application's specific requirements. This enhancement provides greater flexibility in managing user interactions with PDF documents, empowering you to tailor the experience according to your needs. \ No newline at end of file +Leverage the [downloadStart](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#downloadstart) event to apply custom rules for allowing or preventing downloads based on application needs. diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/enable-local-storage.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/enable-local-storage.md index ff2af8b02..b21781a88 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/enable-local-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/enable-local-storage.md @@ -1,20 +1,20 @@ --- layout: post -title: Managing Local Storage in React Pdfviewer component | Syncfusion -description: Learn how to manage local storage in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Manage local storage in React PDF Viewer | Syncfusion +description: Learn how to control session-specific data storage in the React PDF Viewer using the enableLocalStorage property. control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Managing Local Storage in Syncfusion® PDF Viewer +# Manage local storage in PDF Viewer -The Syncfusion® PDF Viewer provides the `enableLocalStorage` property, which allows you to control how session-specific data is stored. You can choose to store this data in an internal collection or rely on the default session storage. +Use the `enableLocalStorage` property to control whether session-specific data is stored in session storage (default) or an internal in-memory collection. -### Using the enableLocalStorage Property +### Use enableLocalStorage -Set the `enableLocalStorage` property to manage whether the PDF Viewer uses session storage (default) or an internal collection. When set to `true`, session-specific data is kept in memory. Otherwise, session storage is used. +Set `enableLocalStorage` to manage storage behavior. When `true`, data is kept in memory; otherwise, session storage is used. {% tabs %} {% highlight js tabtitle="Server-Backed" %} @@ -48,14 +48,10 @@ root.render(); {% endhighlight %} {% endtabs %} -### Impact and Considerations +### Considerations -- **Increased Memory Usage**: Setting `enableLocalStorage` to `true` can increase memory usage, particularly with larger documents or those containing many interactive elements, such as form fields and annotations. -- **Avoiding Memory Leaks**: It is crucial to properly dispose of the PDF Viewer instance when it's no longer needed to prevent memory leaks, especially when using in-memory storage. -- **Default Behavior**: By default, this property is set to `false`, meaning the session storage mechanism is utilized unless explicitly changed. - -### Enhanced Control - -Leveraging the `enableLocalStorage` property provides greater flexibility in managing how data is stored during a session, allowing you to optimize performance and storage based on your application’s specific requirements. +- Memory usage can increase when using in-memory storage with large documents or many interactive elements. +- Dispose of the PDF Viewer instance when no longer needed to avoid memory leaks. +- Default: `enableLocalStorage` is `false`, so session storage is used unless changed. [View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to/) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/enable-text-selection.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/enable-text-selection.md index bfe198e52..79a6894fa 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/enable-text-selection.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/enable-text-selection.md @@ -1,20 +1,20 @@ --- layout: post -title: Enable Text Selection in React PdfViewer component | Syncfusion -description: Learn how to Enable Text Selection in Syncfusion React PdfViewer component of Syncfusion Essential JS 2 and more. +title: Enable or disable text selection in React PDF Viewer | Syncfusion +description: Learn how to enable or disable text selection in the React PDF Viewer using the enableTextSelection property. control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Enable or Disable Text Selection in Syncfusion PDF Viewer +# Enable or disable text selection in PDF Viewer -The Syncfusion PDF Viewer provides the `enableTextSelection` property, which allows you to control whether users can select text within the displayed PDF document. This feature can be toggled programmatically during runtime. +Use the `enableTextSelection` property to control whether users can select text in the displayed PDF. This setting can be configured at initialization and toggled at runtime. -## Configure Text Selection on Initialization +## Configure on initialization -You can set the initial text selection behavior when initializing the PDF Viewer control by configuring the `enableTextSelection` property. +Set initial behavior when instantiating the PDF Viewer. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -51,9 +51,9 @@ root.render(); {% endhighlight %} {% endtabs %} -## Toggle Text Selection Dynamically +## Toggle dynamically -You can change the text selection behavior at runtime using buttons, menu options, or other UI elements. The following example demonstrates how to toggle text selection with button clicks: +Change the behavior at runtime using buttons or other UI. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -116,14 +116,14 @@ root.render(); {% endhighlight %} {% endtabs %} -## Use Cases and Considerations +## Use cases and considerations -- **Document Protection**: Disabling text selection helps prevent unauthorized copying of sensitive content. -- **Read-only Documents**: In scenarios where documents are meant for viewing only, disabling text selection can provide a cleaner user experience. -- **Interactive Applications**: Toggle text selection based on user roles or document states in complex applications. +- Document protection: Disable text selection to help prevent copying sensitive content. +- Read-only documents: Provide a cleaner viewing experience by preventing selection. +- Interactive apps: Toggle selection based on user roles or document states. -## Default Behavior +## Default behavior -By default, text selection is enabled in the PDF Viewer. Set the `enableTextSelection` property to `false` explicitly if you want to disable this functionality. +Text selection is enabled by default. Set `enableTextSelection` to `false` to disable it. -[View Sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/export-as-image.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/export-as-image.md index 134bf387c..d37974077 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/export-as-image.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/export-as-image.md @@ -1,22 +1,22 @@ --- layout: post -title: Export As Image in React PDF Viewer component | Syncfusion -description: Learn here all about Export As Image in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Export pages as images in React PDF Viewer | Syncfusion +description: Learn how to export pages as Base64-encoded images in the React PDF Viewer using exportAsImage and exportAsImages. control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Export As Image in React Pdfviewer component +# Export pages as images in PDF Viewer -The PDF Viewer library allows you to export specified pages as a Base64-encoded image string using the **exportAsImage()** method and exporting a range of pages as Base64-encoded image strings using the **exportAsImages()** method. +Export a single page as a Base64-encoded image using `exportAsImage()` or export a range of pages using `exportAsImages()`. -The following steps are used to exportAsImage. +Steps to export pages as images **Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started/) to create a simple PDF Viewer sample. -**Step 2:** The following code snippet to implement the functionality for exporting a specified page as a Base64-encoded image string or exporting a range of pages as Base64-encoded image strings. +**Step 2:** Use the following code to export a specified page as a Base64-encoded image or a range of pages as Base64-encoded images. ``` @@ -33,7 +33,7 @@ exportAsImage() { }); } ``` -Similarly, to code snippet for exports the specified page as a Base64-encoded image string, allowing for custom image size: +Export a specified page as a Base64-encoded image with a custom size: ``` @@ -51,7 +51,7 @@ exportAsImageWithSize() { }); } ``` -Similarly, to code snippet for exports the range of pages as Base64-encoded image strings: +Export a range of pages as Base64-encoded image strings: ``` @@ -68,7 +68,7 @@ exportAsImages() { }); } ``` -Similarly, to code snippet for exports the range of pages as Base64-encoded image strings, allowing for custom image size: +Export a range of pages as Base64-encoded images with a custom size: ``` @@ -87,4 +87,4 @@ exportAsImageWithSize() { } ``` -By following these steps, you can successfully integrate and use the export as image API in the EJ2 PDF Viewer. \ No newline at end of file +These APIs enable exporting viewer pages as images for further processing or download. \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-completed.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-completed.md index d88fb52a0..1d281650f 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-completed.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-completed.md @@ -1,18 +1,17 @@ --- layout: post -title: extractTextCompleted Event in React Pdfviewer component | Syncfusion -description: Learn here all about extractTextCompleted Event in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: extractTextCompleted +title: extractTextCompleted event in React PDF Viewer | Syncfusion +description: Learn how to use the extractTextCompleted event and isExtractText property in the Syncfusion React PDF Viewer to extract text and bounds. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Extract text using extractTextCompleted Event in React Pdfviewer component +# Use extractTextCompleted to extract text in React PDF Viewer -The PDF Viewer library allows you to extract the text from a page along with the bounds. Text extraction can be done using the [**isExtractText**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#isextracttext) property and [**extractTextCompleted**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#extracttextcompleted) event. +Use the [isExtractText](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#isextracttext) property and the [extractTextCompleted](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#extracttextcompleted) event to extract page text along with bounds. -Here is an example of how you can use the isExtractText property and extractTextCompleted event: +The following example shows how to enable text extraction and handle the completion event: {% raw %} @@ -40,4 +39,4 @@ function extractTextCompleted(args){ ``` {% endraw %} -Find the sample [how to Extract Text](https://stackblitz.com/edit/react-ijmx6c?file=src%2Findex.js) \ No newline at end of file +Find the sample: [How to extract text](https://stackblitz.com/edit/react-ijmx6c?file=src%2Findex.js) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-option.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-option.md index ab93fc1f5..e8aad2eef 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-option.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-option.md @@ -1,16 +1,15 @@ --- layout: post -title: Extract text Option in React Pdfviewer component | Syncfusion -description: Learn here all about Extract text Option in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Extract text Option +title: Configure extractTextOption in React PDF Viewer | Syncfusion +description: Learn how to use the extractTextOption property in the Syncfusion React PDF Viewer to control text extraction and memory usage. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Extract Text Option in Syncfusion React Pdfviewer Control +# Configure extractTextOption in React PDF Viewer -The `extractTextOption` property in the Syncfusion PdfViewer control allows you to optimize memory usage by controlling the level of text extraction. This setting influences the data returned in the `extractTextCompleted` event. You can select one of the following options to determine the kind of text extraction and layout information to retrieve. +The `extractTextOption` property controls how text is extracted and optimizes memory usage. It also affects the data returned in the `extractTextCompleted` event. Choose one of the following options to determine the text and layout data to retrieve. ### Available Options: @@ -77,6 +76,6 @@ root.render(); **extractTextOption.None:** This option does not extract or return any text or layout information. It is used to optimize memory usage when no text extraction is necessary. This setting is only relevant for the `extractTextCompleted` event and cannot be used with the `ExtractText` method. -N> Text Search: When using the `ExtractTextOption.TextOnly` and `extractTextOption.None` option, the findText method will not work. Instead, you should use the findTextAsync method to perform text searches asynchronously. +N> Text search: When using the `extractTextOption.TextOnly` or `extractTextOption.None` options, the `findText` method is unavailable. Use the `findTextAsync` method to perform text searches asynchronously. [View Sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text.md index abedeeacf..27c4c6585 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text.md @@ -1,33 +1,33 @@ --- layout: post -title: Extract Text in React Pdfviewer component | Syncfusion -description: Learn about the Extract Text in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Extract Text +title: Use extractText in React PDF Viewer | Syncfusion +description: Learn how to use the extractText method in the Syncfusion React PDF Viewer to extract text and bounds from one or more pages. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Extract Text Method in Syncfusion PdfViewer Control +# Extract text using extractText in React PDF Viewer -The `extractText` method of the Syncfusion PdfViewer control enables text extraction from one or more pages in a PDF document. This method is useful for retrieving the text content along with its associated data, such as the bounds of each text element. +The `extractText` method extracts text from one or more pages and can return plain text or text with bounds for each element. -### extractText Method -The extractText method retrieves text data from the specified page(s) of a PDF document. It can extract text from one page, a range of pages, or even provide detailed text data, depending on the options specified. +### extractText method +Retrieves text data from one page or a range of pages based on the specified options. #### Parameters: **startIndex:** The starting page index for text extraction (0-based index). -**endIndex Or isOptions:** This can either be the ending page index for the text extraction (for extracting from multiple pages) or an option specifying text extraction criteria for a single page. +**endIndex or isOptions:** Either the ending page index (for multiple pages) or an option specifying extraction criteria for a single page. **options (optional):** Specifies additional options, such as extracting plain text `TextOnly` or more detailed text data `TextAndBounds`. You can specify various options for text extraction. These options determine whether you want to extract plain text, text with bounds, or detailed text data. -***TextOnly:*** Extracts only the plain text content without bounds or additional information. - -***TextAndBounds:*** Extracts text content along with its bounds (coordinates) within the PDF. +- TextOnly: Extracts only plain text without bounds. +- TextAndBounds: Extracts text with bounds (coordinates). #### Returns: -The method returns a Promise that resolves to an object containing two properties: +Returns a Promise with: +- textData: An array of TextDataSettingsModel with details including bounds and page text. +- pageText: A concatenated string of plain text from the specified page(s). **textData:** An array of TextDataSettingsModel objects, each representing the details of the extracted text (including bounds, page text, etc.). @@ -95,9 +95,8 @@ root.render(); {% endhighlight %} {% endtabs %} -#### Explanation: -**Single Page Extraction:** The first `extractText` call extracts text from page 1 (`startIndex = 1`), using the 'TextOnly' option for plain text extraction. - -**Multiple Pages Extraction:** The second extractText call extracts text from pages 0 through 2 (`startIndex = 0, endIndex = 2`), using the `TextOnly` option for plain text extraction. +#### Explanation +- Single page: Extracts text from page 1 (`startIndex = 1`) using `TextOnly`. +- Multiple pages: Extracts text from pages 0–2 (`startIndex = 0, endIndex = 2`) using `TextOnly`. [View Sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/find-text-async.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/find-text-async.md index e54509e9c..60f3b3845 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/find-text-async.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/find-text-async.md @@ -1,18 +1,17 @@ --- layout: post -title: Find Text Async in React Pdfviewer component | Syncfusion -description: Learn about the `findTextAsync` in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Find Text Async +title: Use findTextAsync in React PDF Viewer | Syncfusion +description: Learn how to search text asynchronously with findTextAsync in the Syncfusion React PDF Viewer and retrieve match bounds. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Find Text using findTextAsync Method in Syncfusion React PdfViewer Control +# Find text with findTextAsync in React PDF Viewer -The findTextAsync method in the Syncfusion PdfViewer control allows you to search for specific text or an array of strings asynchronously within a PDF document. The method returns the bounding rectangles for each occurrence of the search term, allowing you to find and work with text positions in the document. +The `findTextAsync` method searches for a string or array of strings asynchronously and returns bounding rectangles for each match. Use it to locate text positions across the document or on a specific page. -Here is an example of how you can use the **findTextAsync** method: +Here is an example of how to use `findTextAsync`: ```html @@ -73,29 +72,19 @@ root.render(); {% endhighlight %} {% endtabs %} -### Description: +### Description The `findTextAsync` method is designed for performing an asynchronous text search within a PDF document. You can use it to search for a single string or multiple strings, with the ability to control case sensitivity. By default, the search is applied to all pages of the document. However, you can adjust this behavior by specifying the page number (pageIndex), which allows you to search only a specific page if needed. -### Parameters: +### Parameters -**text (string | string[]):** +**text (string | string[]):** The text or array of texts to search for in the document. -The text or an array of texts you want to search for in the document. +**matchCase (boolean):** Whether the search is case-sensitive. `true` matches exact case; `false` ignores case. -**matchCase (boolean):** +**pageIndex (optional, number):** Zero-based page index to search. If omitted, searches all pages. -Indicates whether the search should be case-sensitive. -When set to true, the search will match the exact case. -When set to false, the search will ignore case differences. - -**pageIndex (optional, number):** - -Specifies the page number (zero-based index) to search within the document. -If not provided, the search will be performed across all pages in the document. -For example, passing 0 would search only the first page of the document. - -### Example Workflow: +### Example workflow **findTextAsync('pdf', false):** This will search for the term "pdf" in a case-insensitive manner across all pages of the document. diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/get-base64.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/get-base64.md index 38a4538ee..d3b39e1a2 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/get-base64.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/get-base64.md @@ -1,22 +1,21 @@ --- layout: post -title: Retrieving Base64 Value in React Pdfviewer component | Syncfusion -description: Learn here all about how to retrieve the Base64 value in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Toolbar +title: Get Base64 from loaded PDF in React PDF Viewer | Syncfusion +description: Learn how to retrieve the Base64 value of a loaded PDF in the Syncfusion React PDF Viewer using saveAsBlob and FileReader. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Retrieving Base64 Value from a PDF in PDF Viewer +# Get Base64 value from a loaded PDF ### Overview -This guide demonstrates how to fetch the base64-encoded value of a PDF document loaded in the Syncfusion® PDF Viewer using React. This is useful for sending the PDF as a base64 string or processing it in the front end. +This guide shows how to get the base64-encoded value of a PDF loaded in the Syncfusion PDF Viewer using React. This is useful for sending the PDF as a base64 string or processing it on the client. ### How to Retrieve Base64 Value -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample. +**Step 1:** Follow the steps in the [Get started with React PDF Viewer](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) guide to create a sample. **Step 2:** Set Up Your React Component @@ -178,6 +177,6 @@ root.render(); ### Conclusion -By implementing these steps in your React application, you can convert a PDF document loaded in the Syncfusion® PDF Viewer to a base64 string upon button click. This facilitates the manipulation or transfer of PDF data as needed. +By following these steps, a loaded PDF can be converted to a Base64 string on button click for transfer or processing. [View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/getPageInfo.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/getPageInfo.md index 6fee041e2..18734eaa7 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/getPageInfo.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/getPageInfo.md @@ -1,22 +1,22 @@ --- layout: post -title: Get Page Info in React PDF Viewer component | Syncfusion -description: Learn here all about Get Page Info in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Get page info in React PDF Viewer | Syncfusion +description: Learn how to retrieve page height, width, and rotation using getPageInfo in the Syncfusion React PDF Viewer. control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Get Page Info in React Pdfviewer component +# Get page info in React PDF Viewer -The PDF Viewer library allows you to retrieves the information of a specified page in the viewer using the **getPageInfo()** method.This provides Essential® information such as the height, width and rotation. +Use the **getPageInfo()** method to retrieve information for a specified page, including height, width, and rotation. -The following steps are used to getPageInfo. +The following steps show how to use `getPageInfo`. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started/) to create a simple PDF Viewer sample. +**Step 1:** Follow the steps in the [Get started with React PDF Viewer](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started/) guide to create a sample. -**Step 2:** The following code snippet to implement the functionality for retrieving height, width and rotation of a specified page in the viewer. +**Step 2:** Use the following code to get the height, width, and rotation for a specified page. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -103,6 +103,6 @@ root.render(); {% endhighlight %} {% endtabs %} -By following these steps, you can successfully integrate and use the get page info API in the EJ2 PDF Viewer. +By following these steps, the page info API can be integrated and used in the EJ2 PDF Viewer. [View Sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/import-export-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/import-export-annotation.md index 42f0b4201..ecdb215d1 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/import-export-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/import-export-annotation.md @@ -1,22 +1,21 @@ --- layout: post -title: Import export annotation in React Pdfviewer component | Syncfusion -description: Learn here all about Import export annotation in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Import export annotation object +title: Import and export annotations in React PDF Viewer | Syncfusion +description: Learn how to import and export annotations as objects, JSON, or XFDF in the Syncfusion React PDF Viewer. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Import export annotation in React Pdfviewer component +# Import and export annotations in React PDF Viewer -The PDF Viewer library allows you to import annotations from objects or streams instead of loading it as a file. To import such annotation objects, the PDF Viewer control must export the PDF annotations as objects using the [**ExportAnnotationsAsObject()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#exportannotationsasobject) method. Only the annotations objects that are exported from the PDF Viewer can be imported. +Import annotations from objects or streams instead of files. To import such objects, first export annotations as objects using the [exportAnnotationsAsObject()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#exportannotationsasobject) method. Only objects exported from the PDF Viewer can be imported. -The following steps are used to import and export annotations in various formats such as objects, JSON, and XFDF. +Use the following steps to import and export annotations as objects, JSON, or XFDF. **Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started/) to create a simple PDF Viewer sample. -**Step 2:** Use the following code snippet to perform import and export annotation. +**Step 2:** Use the following code to perform import and export operations. ``` diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/load-document.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/load-document.md index 19dc78c79..f48f551b4 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/load-document.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/load-document.md @@ -1,28 +1,27 @@ --- layout: post -title: Load document in React Pdfviewer component | Syncfusion -description: Learn here all about Load document in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Load document +title: Load documents dynamically in React PDF Viewer | Syncfusion +description: Learn how to load or switch PDF documents dynamically in the Syncfusion React PDF Viewer using the load method. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Load document in React Pdfviewer component +# Load documents dynamically in React PDF Viewer -The PDF Viewer library allows to switch or load PDF documents dynamically after the initial load operation. To achieve this, load the PDF document as a base64 string or the file name into the PDF Viewer control using the [**Load()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#load) method dynamically. +Load or switch PDF documents dynamically after the initial load. Use the [load](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#load) method to load a PDF by Base64 string or file name. The following steps are used to load the PDF document dynamically. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started/) to create a simple PDF Viewer sample. +**Step 1:** Follow the steps in the [Get started with React PDF Viewer](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started/) guide to create a sample. -**Step 2:** Use the following code snippet to load the PDF document using a base64 string. +**Step 2:** Use the following code to load a PDF using a Base64 string. ``` ``` -**Step 3:** Use the following code snippet to the load PDF document the using document name. +**Step 3:** Use the following code to load a PDF by document name. ``` ``` -Similarly, to close the Bookmark pane programmatically, employ the following code snippet: +To close the Bookmark pane programmatically, use the following code: ``` diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/open-thumbnail.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/open-thumbnail.md index e913cc788..f0afe2d2b 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/open-thumbnail.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/open-thumbnail.md @@ -1,20 +1,19 @@ --- layout: post -title: Open thumbnail in React Pdfviewer component | Syncfusion -description: Learn here all about Open thumbnail in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Open thumbnail +title: Open the thumbnail pane programmatically | Syncfusion +description: Learn how to open the thumbnail pane programmatically in the Syncfusion React PDF Viewer using openThumbnailPane. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Open thumbnail in React Pdfviewer component +# Open the thumbnail pane programmatically -The PDF Viewer library allows you to open the thumbnail pane programmatically using the [**openThumbnailPane()**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/thumbnailView/#openthumbnailpane) method. +Open the thumbnail pane programmatically using the [openThumbnailPane()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/thumbnailView/#openthumbnailpane) method. The following steps are used to open the thumbnail. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started/) to create a simple PDF Viewer sample. +**Step 1:** Follow the steps in the [Get started with React PDF Viewer](https://help.syncfusion.com/react/document-processing/pdf/pdf-viewer/react/getting-started/) guide to create a sample. **Step 2:** Use the following code snippet to open thumbnail. @@ -30,4 +29,4 @@ The following steps are used to open the thumbnail. ``` -Find the sample [how to open the thumbnail pane programmatically](https://stackblitz.com/edit/react-8rp7h2?file=public%2Findex.html) \ No newline at end of file +Find the sample: [Open the thumbnail pane programmatically](https://stackblitz.com/edit/react-8rp7h2?file=public%2Findex.html) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/pagerenderstarted-pagerendercompleted-event.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/pagerenderstarted-pagerendercompleted-event.md index bc187bf04..3f376d307 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/pagerenderstarted-pagerendercompleted-event.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/pagerenderstarted-pagerendercompleted-event.md @@ -1,24 +1,23 @@ --- layout: post -title: Rendering event in React PDF Viewer component | Syncfusion -description: Learn here all about pageRenderInitiate and pageRenderComplete event in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Handle pageRenderInitiate and pageRenderComplete | Syncfusion +description: Learn how to use the pageRenderInitiate and pageRenderComplete events in the Syncfusion React PDF Viewer during page rendering. control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# PageRenderInitiate and PageRenderComplete event +# Handle pageRenderInitiate and pageRenderComplete events -In Syncfusion® PDF Viewer, `pageRenderInitiate` and `pageRenderComplete` actions are events that occur during the rendering process of PDF documents. +In the Syncfusion PDF Viewer, the [pageRenderInitiate](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#pagerenderinitiate) and [pageRenderComplete](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#pagerendercomplete) events occur during page rendering. -**PageRenderInitiate** +**pageRenderInitiate** -The `pageRenderInitiate` event is triggered when the rendering of a page in the PDF document begins. This event provides developers with an opportunity to perform any necessary initialization or setup before the rendering of the page content commences. It can be utilized to prepare resources, set up rendering parameters, or execute any other actions required before the page rendering process starts. +Triggered when page rendering begins. Use this event to initialize or set up resources before rendering starts. **PageRenderComplete** -The `pageRenderComplete` event is triggered when the rendering of a page in the PDF document is completed. This event allows developers to perform cleanup tasks or finalize rendering-related processes after the rendering of the page content finishes. It can be used to release resources, finalize rendering settings, or handle any post-rendering tasks necessary for the application. +Triggered when page rendering completes. Use this event to perform cleanup or finalize rendering-related tasks. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -115,4 +114,4 @@ root.render(); The provided code demonstrates how to subscribe to the `pageRenderStart` and `pageRenderComplete` events in the Syncfusion® PDF Viewer component. -[View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to/PageRenderStarted%20and%20PageRenderCompleted%20event) \ No newline at end of file +The following code demonstrates how to subscribe to these events in the Syncfusion PDF Viewer component. \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/resolve-unable-to-find-an-entry-point-error.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/resolve-unable-to-find-an-entry-point-error.md index 45b9ead4b..50cbd0fa3 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/resolve-unable-to-find-an-entry-point-error.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/resolve-unable-to-find-an-entry-point-error.md @@ -1,26 +1,25 @@ --- layout: post -title: Find an entry point error in React Pdfviewer component | Syncfusion -description: Learn here how to resolve unable to find an entry point named error in React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Resolve unable to find an entry point error +title: Resolve “unable to find an entry point” error | Syncfusion +description: Learn how to resolve the “unable to find an entry point” error after upgrading the Pdfium package in the Syncfusion React PDF Viewer. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Resolve "Unable to find an entry point named FPDFText_GetCharAngle" error +# Resolve “unable to find an entry point” error -From the release of version **21.1.0.35 (2023 Volume 1)** of Essential Studio®, the Pdfium package has been upgraded to improve various functionalities like text search, text selection, rendering, and even performance. If you are updating your project to this version of the Syncfusion PDF Viewer, you may encounter the **"Web-Service is not listening"** error. The Network tab can help you identify the root cause of the issue, which is typically caused by an old version of pdfium assembly being referenced in the local web service project. Below are the assemblies to be referred to in the respective operating systems. +Starting with **21.1.0.35 (2023 Volume 1)**, the Pdfium package was upgraded to improve text search, selection, rendering, and performance. After upgrading, the PDF Viewer may display a **“Web-Service is not listening”** error. In most cases, the Network tab reveals that an outdated Pdfium assembly is referenced in the local web service project. Ensure the correct native assembly is deployed for the target OS: -* Windows – pdfium.dll -* Linux – libpdfium.so -* OSX – libpdfium.dylib +- Windows: pdfium.dll +- Linux: libpdfium.so +- macOS: libpdfium.dylib ![Error information in the Network tab](../images/ErrorinformationuintheNetworkTab.png) -## To solve this issue, you should follow the below steps: +## Resolution steps -1. Clear the bin and object files of the web-service project. -2. Re-publish the web-service project. +1. Delete the bin and obj folders in the web service project. +2. Rebuild and republish the web service. -N> **Note:** If you are hosting your application in Azure, AWS, or in Linux environments, delete the older published files and republish the application. \ No newline at end of file +N> If hosting in Azure, AWS, or Linux environments, remove old published files on the server before republishing. \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/restricting-zoom-in-mobile-mode.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/restricting-zoom-in-mobile-mode.md index 8442ac9d5..8854c2cd2 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/restricting-zoom-in-mobile-mode.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/restricting-zoom-in-mobile-mode.md @@ -1,16 +1,15 @@ --- layout: post -title: Restrict Zoom Percentage in React PDF Viewer component | Syncfusion -description: Learn here all how to restrict zoom percentage in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Restrict zoom percentage on mobile devices | Syncfusion +description: Learn how to restrict zoom percentage on mobile devices using minZoom and maxZoom in the Syncfusion React PDF Viewer. control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# How to Restrict Zoom Percentage on Mobile Devices +# Restrict zoom percentage on mobile devices -In Syncfusion® PDF Viewer, you can easily restrict the zoom percentage on mobile devices using the **maxZoom** and **minZoom** property. This feature allows you to set specific limits for zooming, ensuring smoother scrolling performance and efficient document loading, on mobile devices. +Restrict zoom on mobile devices using the `maxZoom` and `minZoom` properties. This improves scrolling performance and document loading on mobile. {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -101,4 +100,6 @@ root.render(); {% endhighlight %} {% endtabs %} +This limits maximum zoom to 200% and minimum zoom to 10% on mobile devices, helping prevent performance issues from excessive zooming. + [View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to/Restrict%20Zoom%20Percentage%20on%20Mobile%20Devices) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/show-custom-stamp-item.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/show-custom-stamp-item.md index b7a2e74ff..b184aecfb 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/show-custom-stamp-item.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/show-custom-stamp-item.md @@ -1,26 +1,25 @@ --- layout: post -title: Displaying Custom Items in React Pdfviewer component | Syncfusion -description: Learn how to display custom items in the custom stamp Dropdown in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Toolbar +title: Show custom items in the Custom Stamp dropdown | Syncfusion +description: Learn how to display custom items in the Custom Stamp dropdown using customStampSettings in the Syncfusion React PDF Viewer. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Displaying Custom Items in Custom Stamp Dropdown +# Show custom items in the Custom Stamp dropdown ### Overview -This guide explains how to add and display custom items in the custom stamp dropdown menu of Syncfusion's PDF Viewer using React. This feature allows users to easily access and apply custom stamps to their PDF documents. +Add and display custom items in the Custom Stamp dropdown using React. This enables users to quickly apply personalized stamps in the PDF Viewer. -### Steps to Show Custom Items in Custom Stamp Dropdown +### Steps to show custom items in the Custom Stamp dropdown -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample. +**Step 1:** Follow the steps in the [Get started with React PDF Viewer](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) guide to create a sample. -**Step 2:** Configure Custom Stamp Settings +**Step 2:** Configure custom stamp settings Within the PDF Viewer setup, utilize `customStampSettings` to specify the custom stamps that should appear in the dropdown menu. @@ -182,6 +181,6 @@ root.render(); {% endtabs %} -By following these instructions, you can successfully configure to display custom items in the custom stamp dropdown, allowing users to easily apply personalized stamps to their documents. +Use `customStampSettings` to specify the custom stamps that should appear in the dropdown menu. [View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/show-hide-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/show-hide-annotation.md index b966d72ec..64153d07b 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/show-hide-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/show-hide-annotation.md @@ -1,22 +1,21 @@ --- layout: post -title: Show and Hide Annotations in React Pdfviewer component | Syncfusion -description: Learn here all about how to show and hide annotations in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Pdfviewer +title: Show or hide annotations in React PDF Viewer | Syncfusion +description: Learn how to toggle annotation visibility in the Syncfusion React PDF Viewer by exporting and importing annotations. +control: PDF Viewer platform: document-processing documentation: ug -domainurl: ##DomainURL## --- -# Show and Hide Annotations in PDF Viewer +# Show or hide annotations in the PDF Viewer ### Overview -This guide demonstrates how to toggle the visibility of annotations in the Syncfusion PDF Viewer component for React. This functionality is useful when you need to temporarily hide annotations for a cleaner view or show them again for collaborative review. +Toggle annotation visibility in the Syncfusion PDF Viewer using React. Hide annotations for a cleaner view and show them again as needed. ### How to Show and Hide Annotations -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) to create a simple PDF Viewer sample. +**Step 1:** Follow the steps in the [Get started with React PDF Viewer](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/getting-started) guide to create a sample. **Step 2:** Set Up Your React Component with Annotation Toggle Functionality @@ -126,6 +125,6 @@ root.render(); ### Conclusion -The ability to show and hide annotations provides users with a more flexible viewing experience. By implementing this functionality, you can allow users to focus on the document content without distractions when needed, and bring back annotations for collaborative review. +These steps add the ability to toggle annotation visibility in a PDF Viewer application for selective viewing. [View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/signatureselect-signatureunselect.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/signatureselect-signatureunselect.md index 84ce1ae70..4685cf22c 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/signatureselect-signatureunselect.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/signatureselect-signatureunselect.md @@ -1,26 +1,26 @@ --- layout: post -title: Signature selection events in React PDF Viewer component | Syncfusion -description: Learn here all about signatureSelect and signatureUnselect event in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Handle signatureSelect and signatureUnselect events | Syncfusion +description: Learn how to handle signatureSelect and signatureUnselect events in the Syncfusion React PDF Viewer to manage handwritten signature selection state. control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# SignatureSelect and SignatureUnselect event +# Handle signatureSelect and signatureUnselect events -The Syncfusion® PDF Viewer provides event-handling capabilities for various actions, including selecting and unselecting handwritten signatures. The `signatureSelect` and `signatureUnselect` events enable developers to programmatically manage the selection state of signatures within the PDF Viewer component. +Use the [signatureSelect](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#signatureselect) and [signatureUnselect](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#signatureunselect) events to manage the selection state of handwritten signatures in the PDF Viewer. **signatureSelect** -The `signatureSelect` event triggers when a handwritten signature annotation is selected. This event allows developers to capture the signature selection and handle it programmatically, such as updating the UI or storing the selection data for further processing. +Triggered when a handwritten signature annotation is selected. Use this event to capture selection and update the UI or store state. **signatureUnselect** -The `signatureUnselect` event triggers when a handwritten signature annotation is unselected. This event enables developers to manage the unselection programmatically, which can be useful for tasks like cleanup operations or updating the application's state to reflect that a signature is no longer selected. +Triggered when a handwritten signature annotation is unselected. Use this event to handle cleanup or update application state. -The code snippet demonstrates how to subscribe to the `signatureSelect` and `signatureUnselect` events in the Syncfusion® PDF Viewer component. +The following code demonstrates how to subscribe to these events: {% tabs %} {% highlight js tabtitle="Standalone" %} @@ -109,6 +109,6 @@ root.render(); {% endhighlight %} {% endtabs %} -The `signatureSelect` and `signatureUnselect` events in Syncfusion® PDF Viewer offer robust options for managing the state of handwritten signatures within your application. By handling these events, developers can create a more interactive and dynamic user experience, responding programmatically to signature selection and unselection. +These events enable robust management of handwritten signature state, supporting interactive and dynamic user experiences. -[View sample in GitHub]() \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/unload-document.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/unload-document.md index c110e3f09..e6f1e1050 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/unload-document.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/unload-document.md @@ -2,7 +2,7 @@ layout: post title: Unload document in React Pdfviewer component | Syncfusion description: Learn here all about Unload document in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Unload document +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## From 4e45f71c54877fb2e7c322a8cb760430d2d58537 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 22 Oct 2025 09:44:07 +0530 Subject: [PATCH 12/47] 984044: common file --- .../PDF/PDF-Viewer/react/events.md | 1863 +++++++++++++++++ .../PDF/PDF-Viewer/react/form-filling.md | 83 + .../PDF/PDF-Viewer/react/how-to-overview.md | 65 + .../PDF-Viewer/react/organize-pdf-overview.md | 28 + .../PDF/PDF-Viewer/react/organize-pdf.md | 346 --- .../PDF/PDF-Viewer/react/preact.md | 2 +- .../PDF/PDF-Viewer/react/print.md | 2 +- .../PDF/PDF-Viewer/react/text-selection.md | 229 ++ 8 files changed, 2270 insertions(+), 348 deletions(-) create mode 100644 Document-Processing/PDF/PDF-Viewer/react/events.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/form-filling.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/organize-pdf-overview.md delete mode 100644 Document-Processing/PDF/PDF-Viewer/react/organize-pdf.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/text-selection.md diff --git a/Document-Processing/PDF/PDF-Viewer/react/events.md b/Document-Processing/PDF/PDF-Viewer/react/events.md new file mode 100644 index 000000000..ac2882d60 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/events.md @@ -0,0 +1,1863 @@ +--- +layout: post +title: Events in React PDF Viewer | Syncfusion +description: Comprehensive list of events in the Syncfusion React PDF Viewer with descriptions, event arguments, and usage examples to integrate custom logic. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Events in React PDF Viewer + +The PDF Viewer component triggers events for creation, page navigation, document lifecycle, context menu interactions, comments, bookmarks, download and export, hyperlinks, annotation import/export, custom keyboard commands, printing, signatures, text search, and text selection. Use these events to integrate custom logic into application workflows. + +The following table lists commonly used events supported by the PDF Viewer component: + +| Event | Description | +| ----- | ----------- | +| [`bookmarkClick`](#bookmarkclick) | Triggers when a bookmark item is clicked in the bookmark panel. | +| [`buttonFieldClick`](#buttonfieldclick) | Triggers when a button form field is clicked. | +| [`commentAdd`](#commentadd) | Triggers when a comment is added to the comment panel. | +| [`commentDelete`](#commentdelete) | Triggers when a comment is deleted from the comment panel. | +| [`commentEdit`](#commentedit) | Triggers when a comment is edited in the comment panel. | +| [`commentSelect`](#commentselect) | Triggers when a comment is selected in the comment panel. | +| [`commentStatusChanged`](#commentstatuschanged) | Triggers when a comment’s status changes in the comment panel. | +| [`created`](#created) | Triggers during the creation of the PDF Viewer component. | +| [`customContextMenuBeforeOpen`](#customcontextmenubeforeopen) | Fires before the custom context menu opens. | +| [`customContextMenuSelect`](#customcontextmenuselect) | Fires when a custom context menu item is selected. | +| [`documentLoad`](#documentload) | Triggers while loading a document into the PDF Viewer. | +| [`documentLoadFailed`](#documentloadfailed) | Triggers when document loading fails. | +| [`documentUnload`](#documentunload) | Triggers when the document is closed. | +| [`downloadEnd`](#downloadend) | Triggers after a document is downloaded. | +| [`downloadStart`](#downloadstart) | Triggers when the download action is initiated. | +| [`exportFailed`](#exportfailed) | Triggers when exporting annotations fails. | +| [`exportStart`](#exportstart) | Triggers when exporting annotations starts. | +| [`exportSuccess`](#exportsuccess) | Triggers when annotations are exported successfully. | +| [`extractTextCompleted`](#extracttextcompleted) | Triggers when text extraction is completed. | +| [`hyperlinkClick`](#hyperlinkclick) | Triggers when a hyperlink is clicked. | +| [`hyperlinkMouseOver`](#hyperlinkmouseover) | Triggers when hovering over a hyperlink. | +| [`importFailed`](#importfailed) | Triggers when importing annotations fails. | +| [`importStart`](#importstart) | Triggers when importing annotations starts. | +| [`importSuccess`](#importsuccess) | Triggers when annotations are imported successfully. | +| [`keyboardCustomCommands`](#keyboardcustomcommands) | Triggers when customized keyboard command keys are pressed. | +| [`moveSignature`](#movesignature) | Triggers when a signature is moved across the page. | +| [`pageChange`](#pagechange) | Triggers when the current page number changes. | +| [`pageClick`](#pageclick) | Triggers when a mouse click occurs on a page. | +| [`pageMouseover`](#pagemouseover) | Triggers when moving the mouse over a page. | +| [`pageOrganizerSaveAs`](#pageorganizersaveas) | Triggers when a `save as` action is performed in the page organizer. | +| [`pageRenderComplete`](#pagerendercomplete) | Triggers after a page finishes rendering. | +| [`pageRenderInitiate`](#pagerenderinitiate) | Triggers when page rendering begins. | +| [`printEnd`](#printend) | Triggers when a print action is completed. | +| [`printStart`](#printstart) | Triggers when a print action is initiated. | +| [`removeSignature`](#removesignature) | Triggers when a signature is removed. | +| [`resizeSignature`](#resizesignature) | Triggers when a signature is resized. | +| [`resourcesLoaded`](#resourcesloaded) | Triggers after PDFium resources are loaded. | +| [`signaturePropertiesChange`](#signaturepropertieschange) | Triggers when signature properties are changed. | +| [`signatureSelect`](#signatureselect) | Triggers when a signature is selected. | +| [`signatureUnselect`](#signatureunselect) | Triggers when a signature is unselected. | +| [`textSearchComplete`](#textsearchcomplete) | Triggers when a text search is completed. | +| [`textSearchHighlight`](#textsearchhighlight) | Triggers when the searched text is highlighted. | +| [`textSearchStart`](#textsearchstart) | Triggers when a text search is initiated. | +| [`textSelectionEnd`](#textselectionend) | Triggers when text selection is complete. | +| [`textSelectionStart`](#textselectionstart) | Triggers when text selection is initiated. | +| [`thumbnailClick`](#thumbnailclick) | Triggers when a thumbnail is clicked. | +| [`toolbarClick`](#toolbarclick) | Triggers when a toolbar item is clicked. | +| [`validateFormFields`](#validateformfields) | Triggers when form field validation fails. | +| [`zoomChange`](#zoomchange) | Triggers when the magnification value changes. | + +Note: For annotation and signature events, see the dedicated Annotations Events topic. + +## bookmarkClick + +The [bookmarkClick](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#bookmarkclickevent) event triggers when a bookmark item is clicked in the bookmark panel. + +- Event arguments: [BookmarkClickEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/bookmarkClickEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Bookmark clicked: ${args.name}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## toolbarClick + +The [toolbarClick](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#toolbarclickevent) event triggers when a toolbar item is clicked. Use it to handle actions based on the clicked item's id or name. + +- Event arguments: `ClickEventArgs`. + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Toolbar item clicked: ${args.name}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## validateFormFields + +The [validateFormFields](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#validateformfieldsevent) event triggers when form field validation fails, typically before a download or submit action proceeds. Use this event to inspect which required fields are empty and show custom messages or block application logic if needed. + +- Event arguments: [ValidateFormFieldsArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/validateFormFieldsArgs/) + - name: Event name + - documentName: Current document name + - formField: The last interacted field’s data (if applicable) + - nonFillableFields: Array detailing required/invalid fields + +When it triggers +- Add a form field and mark it Required (UI: right‑click field > Properties > Required). +- Leave the field empty and click Download. The event fires and provides the list of fields that failed validation. + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('form field event name:', args.name); + console.log('form field document name:', args.documentName); + console.log('form field data:', args.formField); + console.log('non fillable form field details:', args.nonFillableFields); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +Tip +- To require a field programmatically, set isRequired: true when creating or editing the field via Form Designer APIs. + +## zoomChange + +The [zoomChange](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#zoomchangeevent) event triggers when the magnification value changes. + +- Event arguments: [ZoomChangeEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/zoomChangeEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Zoom changed to: ${args.zoomValue}%`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## buttonFieldClick + +The [buttonFieldClick](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#buttonfieldclickevent) event triggers when a button form field is clicked. + +- Event arguments: [ButtonFieldClickEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/buttonFieldClickEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Button field clicked. Name: ${args.name}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## commentAdd + +The [commentAdd](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#commentaddevent) event triggers when a comment is added in the comment panel. + +- Event arguments: [CommentEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/commentEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Comment added. Id: ${args.id}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## commentDelete + +The [commentDelete](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#commentdeleteevent) event triggers when a comment is deleted in the comment panel. + +- Event arguments: [CommentEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/commentEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Comment deleted. Id: ${args.id}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## commentEdit + +The [commentEdit](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#commenteditevent) event triggers when a comment is edited in the comment panel. + +- Event arguments: [CommentEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/commentEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Comment edited. Id: ${args.id}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## commentSelect + +The [commentSelect](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#commentselectevent) event triggers when a comment is selected in the comment panel. + +- Event arguments: [CommentEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/commentEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Comment selected. Id: ${args.id}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## commentStatusChanged + +The [commentStatusChanged](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#commentstatuschangedevent) event triggers when a comment status is changed in the comment panel. + +- Event arguments: [CommentEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/commentEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Comment status changed. Id: ${args.id}, Status: ${args.status}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## created + +The [created](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#createdevent) event is triggered during the creation of the PDF Viewer component. + +- Event arguments: `void`. + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('PDF Viewer created'); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## customContextMenuBeforeOpen + +The [customContextMenuBeforeOpen](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#customcontextmenubeforeopenevent) event fires just before the context menu is shown. Use it to show or hide items based on the current state (for example, only show search items when text is selected). + +- Event arguments: [CustomContextMenuBeforeOpenEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/customContextMenuBeforeOpenEventArgs/) + - name: Event name + - ids: Array of menu item ids that will be shown; remove ids to hide items for this open + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + const menuItems = React.useMemo(() => ([ + { + text: 'SEARCH_ON_WEB', + id: 'web_search', + iconCss: 'e-icons e-search', + items: [ + { text: 'SEARCH_IN_GOOGLE_IMAGE', id: 'web_search_images' }, + { text: 'SEARCH_IN_WIKIPEDIA', id: 'web_search_wikipedia' }, + { text: 'SEARCH_IN_YOUTUBE', id: 'web_search_youtube' }, + { text: 'SEARCH_GOOGLE', id: 'web_search_google' }, + ], + }, + { id: 'web_search_separator', separator: true }, + ]), []); + + return ( + { + console.log(`Before open context menu at page ${args.name}`); + }} + documentLoad={() => { + viewer.current.addCustomMenu(menuItems, false, false); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## customContextMenuSelect + +The [customContextMenuSelect](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#customcontextmenuselectevent) event fires when a custom menu item is clicked. Use it to branch logic by the clicked item's id. + +- Event arguments: [CustomContextMenuSelectEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/customContextMenuSelectEventArgs/). + +- name: Event name +- id: The id of the clicked menu item + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + const menuItems = React.useMemo(() => ([ + { + text: 'SEARCH_ON_WEB', + id: 'web_search', + iconCss: 'e-icons e-search', + items: [ + { text: 'SEARCH_IN_GOOGLE_IMAGE', id: 'web_search_images' }, + { text: 'SEARCH_IN_WIKIPEDIA', id: 'web_search_wikipedia' }, + { text: 'SEARCH_IN_YOUTUBE', id: 'web_search_youtube' }, + { text: 'SEARCH_GOOGLE', id: 'web_search_google' }, + ], + }, + { id: 'web_search_separator', separator: true }, + ]), []); + + return ( + { + console.log(`Context menu item selected: ${args.name}`); + }} + documentLoad={() => { + viewer.current.addCustomMenu(menuItems, false, false); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## documentLoad + +The [documentLoad](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#documentloadevent) event occurs after a document is successfully loaded and parsed. + +- Event arguments: [LoadEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/loadEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Document loaded: page count = ${args.pageData}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## documentLoadFailed + +The [documentLoadFailed](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#documentloadfailedevent) event triggers when loading a document fails. + +- Event arguments: [LoadFailedEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/loadFailedEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Load failed. Error: ${args.documentName}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## documentUnload + +The [documentUnload](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#documentunloadevent) event triggers when closing the current document. + +- Event arguments: [UnloadEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/unloadEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('Document unloaded'); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## downloadEnd + +The [downloadEnd](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#downloadendevent) event triggers after a document download completes. + +- Event arguments: [DownloadEndEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/downloadEndEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Download finished. File name: ${args.fileName}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## downloadStart + +The [downloadStart](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#downloadstartevent) event triggers when the download operation is initiated. + +- Event arguments: [DownloadStartEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/downloadStartEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('Download started'); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## exportFailed + +The [exportFailed](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#exportfailedevent) event triggers when exporting annotations fails. + +- Event arguments: [ExportFailureEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/exportFailureEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Export failed: ${args.name}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## exportStart + +The [exportStart](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#exportstartevent) event triggers when exporting annotations starts. + +- Event arguments: [ExportStartEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/exportStartEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('Export started'); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## exportSuccess + +The [exportSuccess](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#exportsuccessevent) event triggers when annotations are exported successfully. + +- Event arguments: [ExportSuccessEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/exportSuccessEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('Export success'); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## extractTextCompleted + +The [extractTextCompleted](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#extracttextcompletedevent) event triggers when text extraction completes. + +- Event arguments: [ExtractTextCompletedEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/extractTextCompletedEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Extracted text length: ${(args.documentTextCollection || '').length}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## hyperlinkClick + +The [hyperlinkClick](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#hyperlinkclickevent) event triggers when a hyperlink is clicked. + +- Event arguments: [HyperlinkClickEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/hyperlinkClickEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Hyperlink clicked: ${args.hyperlink}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## hyperlinkMouseOver + +The [hyperlinkMouseOver](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#hyperlinkmouseoverevent) event triggers when hovering over a hyperlink. + +- Event arguments: HyperlinkMouseOverArgs. + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Hyperlink hover at page: ${args.name}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## importFailed + +The [importFailed](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#importfailedevent) event triggers when importing annotations fails. + +- Event arguments: [ImportFailureEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/importFailureEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Import failed: ${args.name}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## importStart + +The [importStart](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#importstartevent) event triggers when importing annotations starts. + +- Event arguments: [ImportStartEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/importStartEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('Import started'); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## importSuccess + +The [importSuccess](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#importsuccessevent) event triggers when annotations are imported successfully. + +- Event arguments: [ImportSuccessEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/importSuccessEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('Import success'); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## keyboardCustomCommands + +The [keyboardCustomCommands](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#keyboardcustomcommandsevent) event triggers when customized keyboard command keys are pressed. + +- Event arguments: [KeyboardCustomCommandsEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/keyboardCustomCommandsEventArgs/). + + - name: Event name + - keyboardCommand: The command metadata raised by Command Manager + +When it triggers +- After registering gestures in commandManager.keyboardCommand. For example, pressing Shift + Alt + G or Shift + Alt + H triggers the event. Use this to handle custom keyboard shortcuts. + +Refer to [Keyboard interaction](./accessibility.md#keyboard-interaction) for details about adding and handling custom shortcut keys. +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + + const onCreated = React.useCallback(() => { + if (viewer.current) { + viewer.current.commandManager = { + keyboardCommand: [ + { name: 'customCopy', gesture: { pdfKeys: PdfKeys.G, modifierKeys: ModifierKeys.Shift | ModifierKeys.Alt } }, + { name: 'customPaste', gesture: { pdfKeys: PdfKeys.H, modifierKeys: ModifierKeys.Shift | ModifierKeys.Alt } }, + { name: 'customCut', gesture: { pdfKeys: PdfKeys.Z, modifierKeys: ModifierKeys.Control } }, + { name: 'customSelectAll', gesture: { pdfKeys: PdfKeys.E, modifierKeys: ModifierKeys.Control } }, + ], + }; + } + }, []); + + return ( + { + console.log('Custom command triggered:', args); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## moveSignature + +The [moveSignature](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#movesignatureevent) event triggers when a signature is moved across the page. + +- Event arguments: `MoveSignatureEventArgs`. + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Signature moved on page ${args.id}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## pageChange + +The [pageChange](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#pagechangeevent) event triggers when the current page number changes (for example, via scrolling or navigation controls). + +- Event arguments: [PageChangeEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/pageChangeEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Page changed from ${args.previousPageNumber} to ${args.currentPageNumber}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## pageClick + +The [pageClick](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#pageclickevent) event triggers when a mouse click occurs on a page. + +- Event arguments: [PageClickEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/pageClickEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Page ${args.pageNumber} clicked at (${args.x}, ${args.y})`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## pageMouseover + +The [pageMouseover](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#pagemouseoverevent) event triggers when the mouse moves over a page. + +- Event arguments: `PageMouseoverEventArgs`. + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Mouse over page ${args.name}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## pageOrganizerSaveAs + +The [pageOrganizerSaveAs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#pageorganizersaveasevent) event triggers when a Save As action is performed in the page organizer. + +- Event arguments: `PageOrganizerSaveAsEventArgs`. + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Page organizer save triggered. File name: ${args.downloadDocument}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## pageRenderComplete + +The [pageRenderComplete](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#pagerendercompleteevent) event triggers after a page finishes rendering. + +- Event arguments: [PageRenderCompleteEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/pageRenderCompleteEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Page ${args.data} rendering completed.`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## pageRenderInitiate + +The [pageRenderInitiate](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#pagerenderinitiateevent) event triggers when page rendering begins. + +- Event arguments: [PageRenderInitiateEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/pageRenderInitiateEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Page ${args.jsonData} rendering initiated.`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## printEnd + +The [printEnd](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#printendevent) event triggers when a print action completes. + +- Event arguments: [PrintEndEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/printEndEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('Print action completed.'); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## printStart + +The [printStart](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#printstartevent) event triggers when a print action is initiated. + +- Event arguments: [PrintStartEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/printStartEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('Print action initiated.'); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## removeSignature + +The [removeSignature](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#removesignatureevent) event triggers when a signature is removed. + +- Event arguments: [RemoveSignatureEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/removeSignatureEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Signature removed from page ${args.bounds}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## resizeSignature + +The [resizeSignature](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#resizesignatureevent) event triggers when a signature is resized. + +- Event arguments: [ResizeSignatureEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/resizeSignatureEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Signature resized on page ${args.currentPosition}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## resourcesLoaded + +The [resourcesLoaded](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#resourcesloadedevent) event triggers after the viewer's required resources are loaded. + +- Event arguments: `void`. + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('PDFium resources loaded.'); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## signaturePropertiesChange + +The [signaturePropertiesChange](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#signaturepropertieschangeevent) event triggers when signature properties change. + +- Event arguments: [SignaturePropertiesChangeEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/signaturePropertiesChangeEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Signature properties changed on page ${args.type}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## signatureSelect + +The [signatureSelect](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#signatureselectevent) event triggers when a signature is selected. + +- Event arguments: [SignatureSelectEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/signatureSelectEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Signature selected on page ${args.signature}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## signatureUnselect + +The [signatureUnselect](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#signatureunselectevent) event triggers when a signature is unselected. + +- Event arguments: [SignatureUnselectEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/signatureUnselectEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Signature unselected ${args.signature}`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## textSearchComplete + +The [textSearchComplete](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#textsearchcompleteevent) event triggers when a text search completes. + +- Event arguments: [TextSearchCompleteEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearchCompleteEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log('Text search completed.'); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## textSearchHighlight + +The [textSearchHighlight](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#textsearchhighlightevent) event triggers when searched text is highlighted. + +- Event arguments: [TextSearchHighlightEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearchHighlightEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Search result ${args.bounds} highlighted.`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## textSearchStart + +The [textSearchStart](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#textsearchstartevent) event triggers when a text search is initiated. + +- Event arguments: [TextSearchStartEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearchStartEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Text search started for: "${args.searchText}"`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## textSelectionEnd + +The [textSelectionEnd](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#textselectionendevent) event triggers when text selection is complete. + +- Event arguments: [TextSelectionEndEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSelectionEndEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Text selection ended on page ${args.pageIndex}.`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## textSelectionStart + +The [textSelectionStart](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#textselectionstartevent) event triggers when text selection is initiated. + +- Event arguments: `TextSelectionStartEventArgs`. + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Text selection started on page ${args.pageIndex}.`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +## thumbnailClick + +The [thumbnailClick](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#thumbnailclickevent) event triggers when a thumbnail is clicked. + +- Event arguments: [ThumbnailClickEventArgs](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/thumbnailClickEventArgs/). + +Example: + +```jsx +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + { + console.log(`Thumbnail clicked for page index ${args.pageNumber}.`); + }} + style={{ height: '600px' }} + > + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('pdfViewer')); +root.render(); +``` + +> Tip: For annotation and signature-specific events and arguments, see the dedicated Annotations Events topic. diff --git a/Document-Processing/PDF/PDF-Viewer/react/form-filling.md b/Document-Processing/PDF/PDF-Viewer/react/form-filling.md new file mode 100644 index 000000000..b4159c303 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/form-filling.md @@ -0,0 +1,83 @@ +--- +layout: post +title: Form filling in React PDF Viewer | Syncfusion +description: Learn how to view, fill, export, and import PDF form fields using the Syncfusion React PDF Viewer, including disabling interaction and working with signatures. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Form filling in React PDF Viewer + +The PDF Viewer displays existing form fields in a PDF and enables users to fill, validate, and download the filled data. + +The PDF Viewer supports the following form field types: + +* Text box +* Password +* Check box +* Radio button +* List box +* Dropdown +* Signature field +* Initial field + +![Form filling in React PDF Viewer](./images/form-filling.png) + +## Disabling form fields + +The PDF Viewer provides an option to disable interaction with form fields. Use the following configuration to disable form fields in the viewer. + +{% tabs %} +{% highlight ts tabtitle="index.ts" %} + +import { PdfViewer, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner} from '@syncfusion/ej2-pdfviewer'; + +PdfViewer.Inject(Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner); + +let pdfviewer: PdfViewer = new PdfViewer(); +pdfviewer.documentPath = "https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf"; +pdfviewer.resourceUrl = "https://cdn.syncfusion.com/ej2/31.1.17/dist/ej2-pdfviewer-lib"; +pdfviewer.enableFormDesigner = false; +pdfviewer.appendTo('#PdfViewer'); + +{% endhighlight %} +{% endtabs %} + +## Add a handwritten signature to a signature field + +Add a handwritten signature to a signature field by following these steps: + +* Click the signature field in the PDF document to open the signature panel. + +![Signature field in React PDF Viewer](./images/form-filling-signature.png) + +* Draw the signature in the signature panel. + +![Signature panel in React PDF Viewer](./images/form-filling-signature-dialog.png) + +* Select **CREATE**. The drawn signature is added to the signature field. + +![Signature added in React PDF Viewer](./images/form-filling-signature-signed.png) + +## Delete a signature from a signature field + +Delete a signature placed in a signature field by using the Delete option in the annotation toolbar. + +![Deleting a signature in React PDF Viewer](./images/form-filling-signature-del.png) + +## Export and import form fields + +The PDF Viewer supports exporting and importing form field data using the `importFormFields`, `exportFormFields`, and `exportFormFieldsAsObject` methods. The following formats are supported: + +* FDF +* XFDF +* JSON + +For more information, see the [Form fields documentation](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/form-designer/create-programmatically#export-and-import-form-fields). + +## See also + +* [Handwritten signature in React PDF Viewer](./annotations/signature-annotation) +* [Form Designer events](./form-designer/form-field-events) diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md b/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md new file mode 100644 index 000000000..036f0e239 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md @@ -0,0 +1,65 @@ +--- +layout: post +title: FAQ Section in Pdfviewer control | Syncfusion +description: In this section, you can know about the various questions asked about manipulation of in Pdfviewer control. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Frequently Asked Questions Section in PDF Viewer control + +The frequently asked questions in Essential® PDF Viewer are listed below. + +* [How to add annotation in text search in react?](./how-to/add-annotation-in-text-search-ts.md) +* [How to add custom header to the PDF Viewer ajax request?](./how-to/add-header-value.md) +* [How to add a save button to PDF Viewer toolbar?](./how-to/add-save-button-ts.md) +* [How to customize the annotation selectors?](./how-to/annotation-selectors.md) +* [How to change the author name of the annotation dynamically?](./how-to/change-author-name-using-annotation-settings.md) +* [How to clear all the annotations from the PDF document?](./how-to/clear-annotations.md) +* [How to configure the annotation selector settings?](./how-to/configure-annotationselector-setting-ts.md) +* [What are the supported conformance or standards of PDF Viewer?](./how-to/conformance.md) +* [How to control the visibility of the annotation?](./how-to/control-annotation-visibility-ts.md) +* [How to convert the PDF library bounds to PDF viewer bounds?](./how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds-ts.md) +* [How to create PDF Viewer service using ASP.NET Core?](./how-to/create-pdfviewer-service-core.md) +* [How to create PDF viewer web service using ASP.NET MVC?](./how-to/create-pdfviewer-service.md) +* [How to customize the context menu in PDF Viewer?](./how-to/custom-context-menu.md) +* [How to add custom font in handwritten signature?](./how-to/custom-font-signature-field-ts.md) +* [How to add custom fonts for form fields and free text annotations?](./how-to/custom-fonts-ts.md) +* [How to customize text search highlight color in PDF Viewer?](./how-to/customize-text-search-color.md) +* [How to delete a specific annotation from the PDF document?](./how-to/delete-annotation.md) +* [How to disable the context menu?](./how-to/disable-context-menu.md) +* [How to disable tile rendering in PDF Viewer?](./how-to/disable-tile-rendering.md) +* [How to display custom tooltip for annotation?](./how-to/display-custom-tool-tip-for-annotation.md) +* [How to get the download start event?](./how-to/download-start-event-ts.md) +* [How to enable or disable the local storage?](./how-to/enable-local-storage-ts.md) +* [Enable the resizer for text markup annotation?](./how-to/enable-resize.md) +* [How to enable or disable the text selection?](./how-to/enable-text-selection-ts.md) +* [How to export the PDF pages as images?](./how-to/export-as-image-ts.md) +* [How to extract text from the PDF document?](./how-to/extract-text-completed-ts.md) +* [How to extract text from a specific region?](./how-to/extract-text-option-ts.md) +* [How to extract text from the PDF document?](./how-to/extract-text-ts.md) +* [How to find the text in the PDF document asynchronously?](./how-to/find-text-async-ts.md) +* [How to get the base64 string of the loaded document?](./how-to/get-base64-ts.md) +* [How to get the page information of the loaded document?](./how-to/get-page-info-ts.md) +* [How to perform highlight, underline, and strikethrough for the selected text?](./how-to/highlight-underline-strikeout-text.md) +* [How to identify the added annotation and its mode?](./how-to/identify-added-annotation-mode.md) +* [How to import annotations from the PDF document?](./how-to/import-annotations.md) +* [How to import and export annotations in PDF Viewer?](./how-to/import-export-annotation-ts.md) +* [How to load a PDF document in PDF Viewer?](./how-to/load-document.md) +* [How to set the minimum and maximum zoom percentage?](./how-to/min-max-zoom-ts.md) +* [How to open the bookmark pane when the document is loaded?](./how-to/open-bookmark-ts.md) +* [How to open the thumbnail pane when the document is loaded?](./how-to/open-thumbnail.md) +* [How to get the annotation when it is overlapped with another annotation on its selection?](./how-to/overlapped-annotation.md) +* [How to get the page render started and completed event?](./how-to/pagerenderstarted-pagerendercompleted-ts.md) +* [How to print the PDF document silently?](./how-to/print-document.md) +* [How to resolve the `Unable to find an entry point named 'FreeExportedValues' in DLL 'pdfium''?](./how-to/resolve-unable-to-find-an-entry-point-error.md) +* [How to restrict the zooming in mobile mode?](./how-to/restricting-zoom-in-mobile-mode-ts.md) +* [How to save the PDF document to database or URL?](./how-to/save-pdf-document-to-url.md) +* [How to select annotations in multi page?](./how-to/select-multi-page-annotations.md) +* [How to show custom stamp item in the stamp annotation?](./how-to/show-custom-stamp-item-ts.md) +* [How to show or hide a particular annotation?](./how-to/show-hide-annotation-ts.md) +* [How to get the signature selected and unselected event?](./how-to/signatureselect-signatureunselect-ts.md) +* [How to unload the PDF document from the viewer?](./how-to/unload-document.md) + diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf-overview.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf-overview.md new file mode 100644 index 000000000..2eb540365 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf-overview.md @@ -0,0 +1,28 @@ +--- +layout: post +title: Organize pages in React PDF Viewer | Syncfusion +description: Learn how to reorder, rotate, insert, delete, and save pages with the Syncfusion React PDF Viewer component. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Organize pages in React PDF Viewer + +The React PDF Viewer component provides an Organize Pages panel that helps you prepare documents before sharing them. Use it to tidy scanned files, move pages into the right order, and duplicate important content without leaving the viewer. + +To open the Organize Pages panel, load a document, ensure that the Organize Pages toolbar item is enabled, and choose **Organize Pages** from the left vertical toolbar. The document must allow page-level edits; otherwise, the toolbar item is hidden. + +The Organize Pages panel supports the following actions: + +* **Rotate pages**: Fix page orientation in 90-degree increments to correct scanned pages. +* **Rearrange pages**: Drag and drop thumbnails to update the reading order. +* **Insert new pages**: Add blank pages at the required position. +* **Delete pages**: Remove pages that are no longer needed. +* **Copy pages**: Duplicate selected pages to reuse content elsewhere in the document. +* **Import a PDF document**: Merge the current document with pages from another PDF file. +* **Select all pages**: Apply bulk actions, such as rotation or deletion, to every page. +* **Save updates**: Review changes in real time and use **Save** or **Save As** to download the revised document. + +After completing the changes, apply them by selecting **Save** to overwrite the current document or **Save As** to download a new copy that retains the updated page order. diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf.md deleted file mode 100644 index f7f43882d..000000000 --- a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf.md +++ /dev/null @@ -1,346 +0,0 @@ ---- -layout: post -title: Organize Pages in React PDF Viewer component | Syncfusion -description: Learn here all about Organize Pages in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. -control: PDF Viewer -platform: document-processing -documentation: ug -domainurl: ##DomainURL## ---- - -# Organize Pages in React PDF Viewer component - -The PDF Viewer allows you to manage your PDF documents efficiently by organizing pages seamlessly. Whether you need to add new pages, remove unnecessary ones, rotate pages, move pages within the document, and copy or duplicate pages, the PDF Viewer facilitates these tasks effortlessly. - -## Getting started - -To access the organize pages feature, simply open the PDF document in the PDF Viewer and navigate to the left vertical toolbar. Look for the `Organize Pages` option to begin utilizing these capabilities. - -![Alt text](images/organize-page.png) - -The page organization support enables you to perform various actions such as rotating, rearranging, inserting, copying, and deleting pages within a PDF document using organize pages dialog. - -### Rotating PDF pages - -You can adjust the orientation of PDF pages to ensure proper alignment. The rotate icon offers the following options: - -* `Rotate clockwise`: Rotate the selected pages 90 degrees clockwise. -* `Rotate counter-clockwise`: Rotate the selected pages 90 degrees counter-clockwise. - -### Rearranging PDF pages - -You can easily change the sequence of pages within your document using the drag and drop method: - -* `Drag and drop`: Click and drag a page thumbnail to the desired position within the document, then release it to rearrange the page order. - -![Alt text](images/rotate-rearrange.gif) - -### Inserting new pages - -Effortlessly add new pages to your document with the following options: - -* `Insert blank page left`: Insert a blank page to the left of the selected page using the respective icon. -* `Insert blank page right`: Insert a blank page to the right of the selected page using the corresponding icon. - -### Deleting PDF pages - -Removing unwanted pages from your document is straight forward: - -* `Select pages to delete`: Click on the page thumbnails you wish to remove. You can select multiple pages at once. -* `Delete selected pages`: Use the delete option in the organize pages pane to remove the selected pages from the document. - -### Copying PDF pages - -Duplicate the pages within your PDF document effortlessly: - -* `Select pages to copy`: Click on the page thumbnails you wish to duplicate. Use the copy option to create duplicates. When a page is copied, the duplicate is automatically added to the right of the selected page. Multiple copies can be made using the toolbar action. - -![Alt text](images/insert-delete-copy.gif) - -### Importing a PDF Document - -Seamlessly import a PDF document into your existing document: - -* `Import PDF document`: Click the **Import Document** button to import a PDF. If a page is selected, the imported document’s thumbnail will be inserted to the right of the selected page. If multiple or no pages are selected, the thumbnail will be added as the first page. When **Save** or **Save As** is clicked, the imported PDF will be merged with the current document. You can insert a blank page to the left or right of the imported thumbnail, delete it, or drag and drop it to reposition as needed. - -![Alt text](images/import.gif) - -### Selecting all pages - -Make comprehensive adjustments by selecting all pages simultaneously. This facilitates efficient editing and formatting across the entire document. - -![Alt text](images/selectall.png) - -### Zooming Page Thumbnails - -Adjust the size of page thumbnails within the organizer panel for better visibility and precision when editing. The zoom functionality allows you to: - -* Increase or decrease the size of page thumbnails using the zoom slider -* See more details on pages when zoomed in -* View more pages simultaneously when zoomed out - -This feature is especially useful when working with documents containing complex layouts or small details that need careful examination during organization. - -![Alt text](./images/zoomOrganize.png) - -### Real-time updates - -Witness instant changes in page organization reflected within the PDF Viewer. Simply click the **Save** button to preserve your modifications. - -### SaveAs functionality - -Safeguard your edits by utilizing the **Save As** feature. This enables you to download the modified version of the PDF document for future reference, ensuring that your changes are securely stored. - -## API's supported - -**enablePageOrganizer:** This API enables or disables the page organizer feature in the PDF Viewer. By default, it is set to `true`, indicating that the page organizer is enabled. - -{% tabs %} -{% highlight js tabtitle="Standalone" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, - BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, - FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; -let pdfviewer; - -function App() { - return (
-
- { pdfviewer = scope; }} - id="container" - documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" - enablePageOrganizer={true} - style={{ 'height': '640px' }}> - - - -
-
); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% highlight js tabtitle="Server-Backed" %} -{% raw %} - - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, - BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, - FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; -let pdfviewer; - -function App() { - return (
-
- { pdfviewer = scope; }} - id="container" - documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer" - enablePageOrganizer={true} - style={{ 'height': '640px' }}> - - - -
-
); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% endtabs %} - -**isPageOrganizerOpen:** This API determines whether the page organizer dialog will be displayed automatically when a document is loaded into the PDF Viewer. By default, it is set to `false`, meaning the dialog is not displayed initially. - -{% tabs %} -{% highlight js tabtitle="Standalone" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, - BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, - FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; -let pdfviewer; - -function App() { - return (
-
- { pdfviewer = scope; }} - id="container" - documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" - isPageOrganizerOpen={true} - style={{ 'height': '640px' }}> - - - -
-
); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% highlight js tabtitle="Server-Backed" %} -{% raw %} - - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, - BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, - FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; -let pdfviewer; - -function App() { - return (
-
- { pdfviewer = scope; }} - id="container" - documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer" - isPageOrganizerOpen={true} - style={{ 'height': '640px' }}> - - - -
-
); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% endtabs %} - -**pageOrganizerSettings:** This API allows control over various page management functionalities within the PDF Viewer. It includes options to enable or disable actions such as deleting, inserting, rotating, copying, importing and rearranging pages, as well as configuring thumbnail zoom settings. By default, all these actions are enabled and standard zoom settings are applied. - -{% tabs %} -{% highlight js tabtitle="Standalone" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, - BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, - FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; -let pdfviewer; - -function App() { - return (
-
- { pdfviewer = scope; }} - id="container" - documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" - pageOrganizerSettings = {{canDelete: true, canInsert: true, canRotate: true, canCopy: true, canRearrange: true, canImport: true, imageZoom: 1, showImageZoomingSlider: true, imageZoomMin: 1, imageZoomMax: 5}} - style={{ 'height': '640px' }}> - - - -
-
); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% highlight js tabtitle="Server-Backed" %} -{% raw %} - - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, - BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, - FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; -let pdfviewer; - -function App() { - return (
-
- { pdfviewer = scope; }} - id="container" - documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer" - pageOrganizerSettings = {{canDelete: true, canInsert: true, canRotate: true, canCopy: true, canRearrange: true, canImport: true, imageZoom: 1, showImageZoomingSlider: true, imageZoomMin: 1, imageZoomMax: 5}} - style={{ 'height': '640px' }}> - - - -
-
); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% endtabs %} - -**openPageOrganizer:** This API opens the page organizer dialog within the PDF Viewer, providing access to manage PDF pages. - -``` - -``` - -```ts - -``` - -**closePageOrganizer:** This API closes the currently open page organizer dialog within the PDF Viewer, if it is present. It allows users to dismiss the dialog when done with page organization tasks. - -``` - -``` - -```ts - -``` - -## Keyboard shortcuts - -The following keyboard shortcuts are available at the organize pages dialog. - -* **Ctrl+Z** : Undo the last action performed. -* **Ctrl+Y** : Redo the action that was undone -* **Ctrl+Scroll** : Zoom in and zoom out page thumbnails for better visibility. - -![Alt text](images/undo-redo.png) - -#### Conclusion - -With the Organize Pages feature in the PDF Viewer, managing your PDF documents has never been easier. Whether you are adding new content, adjusting page orientation, moving the pages, duplicating the pages, or removing unnecessary pages, this feature provides the tools you need to streamline your document management workflow. Explore these capabilities today and take control of your PDF documents with ease! - -[View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to/Organize%20pdf) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/preact.md b/Document-Processing/PDF/PDF-Viewer/react/preact.md index 88181af37..133a20f79 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/preact.md +++ b/Document-Processing/PDF/PDF-Viewer/react/preact.md @@ -2,7 +2,7 @@ layout: post title: Getting Started with Preact Framework | Syncfusion description: Check out and learn about getting started with the Preact Framework and React PDF Viewer Component of Syncfusion Essential JS 2 and more details. -control: Preact +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## diff --git a/Document-Processing/PDF/PDF-Viewer/react/print.md b/Document-Processing/PDF/PDF-Viewer/react/print.md index 330e513be..17c30a6de 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/print.md +++ b/Document-Processing/PDF/PDF-Viewer/react/print.md @@ -2,7 +2,7 @@ layout: post title: Print in React Pdfviewer component | Syncfusion description: Learn here all about Print in Syncfusion React Pdfviewer component of Syncfusion Essential JS 2 and more. -control: Print +control: PDF Viewer platform: document-processing documentation: ug domainurl: ##DomainURL## diff --git a/Document-Processing/PDF/PDF-Viewer/react/text-selection.md b/Document-Processing/PDF/PDF-Viewer/react/text-selection.md new file mode 100644 index 000000000..b6a8a0bd6 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/text-selection.md @@ -0,0 +1,229 @@ +--- +layout: post +title: Text selection in React PDF Viewer control | Syncfusion +description: Learn how to configure text selection, react to selection events, and manage copy workflows in the Syncfusion React PDF Viewer. +platform: document-processing +control: Text selection +documentation: ug +domainurl: ##DomainURL## +--- +# Text selection in React PDF Viewer control + +The TextSelection module lets users highlight and copy text from the loaded PDF. Selection is enabled by default and can be configured or monitored programmatically to match application workflows. + +## Enable or disable text selection + +Use the `enableTextSelection` property to enable or disable choosing text in the PDF Viewer. + +```html + + + + + Essential JS 2 + + + + + + + + + + + + + + + + + +
+ + + +``` + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewerRef = React.useRef(null); + + React.useEffect(() => { + // Disable text selection later if required + if (viewerRef.current) { + // Example toggle; set to false to disable after mount + viewerRef.current.enableTextSelection = false; + } + }, []); + + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewerRef = React.useRef(null); + + React.useEffect(() => { + // Toggle on demand + if (viewerRef.current) { + viewerRef.current.enableTextSelection = false; + } + }, []); + + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% endtabs %} + +## Text selection events + +Monitor user interaction with selection events to coordinate downstream actions such as showing tooltips, enabling context menus, or storing analytics. + +### textSelectionStart + +The [textSelectionStart](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#textselectionstartevent) event fires when a user begins selecting text. Use it to reset temporary UI, pause conflicting shortcuts, or capture the starting context. + +- Event arguments: `TextSelectionStartEventArgs` supplies details such as `pageNumber`, `bounds`, and `selectionBehavior`. + +```ts +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const textSelectionStart = (args) => { + // args.pageNumber, args.bounds provide the starting context + console.log('Selection started', args); + }; + + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +``` + +### textSelectionEnd + +The [textSelectionEnd](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#textselectionendevent) event triggers after the selection is finalized. Use it to access the selected text, toggle contextual commands, or store telemetry. + +- Event arguments: `TextSelectionEndEventArgs` includes `pageNumber`, `bounds`, `selectedText`, and `isSelectionCopied`. + +```ts +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const textSelectionEnd = (args) => { + // For example, automatically copy or show a custom menu + console.log('Selection ended', args); + }; + + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +``` + + +## See also + +- [Text search](./text-search) +- [Interaction modes](./interaction-mode) +- [Toolbar items](./toolbar) From 32c1170605dea4cb0887f65b34fafe85d400753d Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 22 Oct 2025 09:50:34 +0530 Subject: [PATCH 13/47] 984044: navigation --- .../bookmark-navigation.md | 189 ++++++++++ .../page-navigation.md | 326 +++++++++++++++++ .../page-thumbnail-navigation.md | 116 +++++++ .../table-of-content-navigation.md | 328 ++++++++++++++++++ 4 files changed, 959 insertions(+) create mode 100644 Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-navigation.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-thumbnail-navigation.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/table-of-content-navigation.md diff --git a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md new file mode 100644 index 000000000..87aa64d45 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md @@ -0,0 +1,189 @@ +--- +layout: post +title: Navigation in React Pdfviewer control | Syncfusion +description: Learn here all about Navigation in Syncfusion React Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Bookmark navigation in React PDF Viewer control + +The Bookmarks saved in PDF files are loaded and made ready for easy navigation. +You can enable/disable bookmark navigation by using the following code snippet., + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + LinkAnnotation, + Annotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + LinkAnnotation, + Annotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% endtabs %} + +![Alt text](../images/bookmark.png) + +To perform bookmark navigation, you can use the **goToBookmark** method. It's important to note that the **goToBookmark** method will throw an error if the specified bookmark does not exist in the PDF document. + +Here is an example of how to use the **goToBookmark** method: + +``` + +``` + +```ts +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, BookmarkView, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +const viewer = React.createRef(); + +function App() { + const onGoToBookmark = () => { + // x - pageIndex, y - Y coordinate + viewer.current && viewer.current.bookmark.goToBookmark(x, y); + }; + + return ( +
+ + + + +
+ ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +``` + +x - Specifies the pageIndex for Navigate. + +y - Specifies the Y coordinates value of the Page. + +Also, you can use the **getBookmarks** method to retrieve a list of all the bookmarks in a PDF document. This method returns a List of Bookmark objects, which contain information about each bookmark. + +Here is an example of how to use the getBookmarks method: + +``` + +``` + +```ts +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, BookmarkView, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +const viewer = React.createRef(); + +function App() { + const onGetBookmarks = () => { + var getBookmarks = viewer.current && viewer.current.bookmark.getBookmarks(); + console.log(getBookmarks); + }; + + return ( +
+ + + + +
+ ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +``` + +## See also + +* [Toolbar items](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/toolbar/) +* [Feature Modules](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/feature-module/) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-navigation.md b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-navigation.md new file mode 100644 index 000000000..90f1e5ead --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-navigation.md @@ -0,0 +1,326 @@ +--- +layout: post +title: Navigation in React Pdfviewer control | Syncfusion +description: Learn here all about Navigation in Syncfusion React Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Navigation in React PDF Viewer control + +The ASP.NET Core PDF Viewer supports different internal and external navigations. + +## Toolbar page navigation option + +The default toolbar of PDF Viewer contains the following navigation options + +* [**Go to page**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/navigation/#gotopage):- Navigates to the specific page of a PDF document. +* [**Show next page**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/navigation/#gotonextpage):- Navigates to the next page of PDF a document. +* [**Show previous page**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/navigation/#gotopreviouspage):- Navigates to the previous page of a PDF document. +* [**Show first page**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/navigation/#gotofirstpage):- Navigates to the first page of a PDF document. +* [**Show last page**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/navigation/#gotolastpage):- Navigates to the last page of a PDF document. + +```html + + + + + Essential JS 2 + + + + + + + + + + + + + + + + + +
+ + + +``` + +You can enable/disable page navigation option in PDF Viewer using the following code snippet., + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% endtabs %} + +![Alt text](../images/navigation.png) + +Also, you can programmatically perform page navigation options as follows. + +```html + + + + + Essential JS 2 + + + + + + + + + + + + + + + + + + + + + + +
+ + + +``` + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + LinkAnnotation, + BookmarkView, + ThumbnailView, + Print, + TextSelection, + TextSearch, + Annotation, + FormFields, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +const viewer = React.createRef(); + +function App() { + const onGoToFirstPage = () => viewer.current && viewer.current.navigation.goToFirstPage(); + const onGoToLastPage = () => viewer.current && viewer.current.navigation.goToLastPage(); + const onGoToNextPage = () => viewer.current && viewer.current.navigation.goToNextPage(); + const onGoToPage = () => viewer.current && viewer.current.navigation.goToPage(4); + const onGoToPreviousPage = () => viewer.current && viewer.current.navigation.goToPreviousPage(); + + React.useEffect(() => { + // Load document after mount if needed + // viewer.current && viewer.current.load('https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', null); + }, []); + + return ( +
+ + + + + + + + +
+ ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + LinkAnnotation, + BookmarkView, + ThumbnailView, + Print, + TextSelection, + TextSearch, + Annotation, + FormFields, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +const viewer = React.createRef(); + +function App() { + const onGoToFirstPage = () => viewer.current && viewer.current.navigation.goToFirstPage(); + const onGoToLastPage = () => viewer.current && viewer.current.navigation.goToLastPage(); + const onGoToNextPage = () => viewer.current && viewer.current.navigation.goToNextPage(); + const onGoToPage = () => viewer.current && viewer.current.navigation.goToPage(4); + const onGoToPreviousPage = () => viewer.current && viewer.current.navigation.goToPreviousPage(); + + return ( +
+ + + + + + + + +
+ ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% endtabs %} + +Find the [here](https://stackblitz.com/edit/5dqbkd?file=index.ts) to perform the page navigation options programmatically. + +## See also + +* [Toolbar items](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/toolbar/) +* [Feature Modules](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/feature-module/) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-thumbnail-navigation.md b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-thumbnail-navigation.md new file mode 100644 index 000000000..e311cb4d7 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-thumbnail-navigation.md @@ -0,0 +1,116 @@ +--- +layout: post +title: Navigation in React Pdfviewer control | Syncfusion +description: Learn here all about Navigation in Syncfusion React Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Page Thumbnail navigation in React PDF Viewer control + +Thumbnails is the miniature representation of actual pages in PDF files. This feature displays thumbnails of the pages and allows navigation. +You can enable/disable thumbnail navigation by using the following code snippet., + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + Annotation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + Annotation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% endtabs %} + +![Alt text](../images/thumbnail.png) + + +## See also + +* [Toolbar items](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/toolbar/) +* [Feature Modules](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/feature-module/) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/table-of-content-navigation.md b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/table-of-content-navigation.md new file mode 100644 index 000000000..c7837872c --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/table-of-content-navigation.md @@ -0,0 +1,328 @@ +layout: post +title: Table of contents navigation in PDF Viewer | Syncfusion +description: Learn how to navigate PDFs using the table of contents in the Syncfusion PDF Viewer control for React. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Table of contents navigation in PDF Viewer + +The PDF Viewer supports a built-in table of contents (TOC) experience to help users jump to sections defined by the document’s bookmarks or outline. + +## Table of contents navigation + +Use the table of contents to quickly navigate to headings and sections defined in the PDF. When the document contains a bookmarks/outline structure, the viewer exposes those entries in the table of contents (Bookmarks) pane. Selecting an entry navigates directly to the mapped destination. If the PDF does not include a table of contents, the pane will not list any entries. + +![Table of contents pane in PDF Viewer](../images/toc.png) + +## Hyperlink Navigation + +The PDF Viewer provides robust support for hyperlink navigation within PDF documents. This allows users to interact with embedded links, which can point to external websites or other locations within the same document. This section covers how to configure hyperlink behavior, including enabling or disabling links, controlling how they open, and responding to hyperlink-related events. + +![Hyperlink Navigation in PDF Viewer](../images/link.png) + +### Enabling and Disabling Hyperlinks + +By default, the PDF Viewer automatically detects and enables all hyperlinks present in a loaded document. This behavior can be controlled using the `enableHyperlink` property. + +- **Property**: `enableHyperlink` +- **Type**: `boolean` +- **Default**: `true` + +When `enableHyperlink` is set to `false`, all hyperlinks in the document become non-interactive. This means that users cannot click them, and no hyperlink-related events will be triggered. + +The following example demonstrates how to disable hyperlink navigation: + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + Annotation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +const viewer = React.createRef(); + +function App() { + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + Annotation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +const viewer = React.createRef(); + +function App() { + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +{% endhighlight %} +{% endtabs %} + +> Note: Disabling hyperlinks only affects the viewer's behavior and does not alter the original PDF document. +### Controlling Link Behavior + +The `hyperlinkOpenState` property determines how external URLs are opened when a hyperlink is clicked. + +- **Property**: `hyperlinkOpenState` +- **Type**: `'CurrentTab' | 'NewTab'` +- **Default**: `'CurrentTab'` + +By default, links open in the same browser tab (`CurrentTab`). To open links in a new tab, set this property to `'NewTab'`. This is useful for preserving the user's current viewing session. + +The following example configures hyperlinks to open in a new tab: + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + Annotation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +const viewer = React.createRef(); + +function App() { + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + Annotation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +const viewer = React.createRef(); + +function App() { + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +{% endhighlight %} +{% endtabs %} + +### Handling Hyperlink Events + +The PDF Viewer exposes events that allow for monitoring and customizing hyperlink interactions. + +#### hyperlinkClick + +The `hyperlinkClick` event is triggered when a user clicks a hyperlink. This event can be used to implement custom logic, such as validating a URL or preventing the default navigation behavior. + +The event arguments provide the following information: +- `hyperlink`: The URL of the clicked hyperlink. +- `cancel`: A boolean that, when set to `true`, prevents the default navigation action. + +#### hyperlinkMouseOver + +The `hyperlinkMouseOver` event is triggered when the mouse pointer hovers over a hyperlink. This can be used to display custom tooltips or other visual feedback. + +The event arguments include: +- `hyperlinkElement`: The HTML anchor element (``) corresponding to the hyperlink. + +The following example demonstrates how to use these events: + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Magnification, Navigation, Toolbar, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const hyperlinkClick = (args) => { + console.log('Hyperlink Clicked:', args.hyperlink); + // To prevent the default navigation behavior, set args.cancel = true; + // args.cancel = true; + }; + + const hyperlinkMouseOver = (args) => { + console.log('Mouse is over hyperlink:', args.hyperlinkElement.href); + }; + + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Magnification, Navigation, Toolbar, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const hyperlinkClick = (args) => { + console.log('Hyperlink Clicked:', args.hyperlink); + // To prevent the default navigation behavior, set args.cancel = true; + // args.cancel = true; + }; + + const hyperlinkMouseOver = (args) => { + console.log('Mouse is over hyperlink:', args.hyperlinkElement.href); + }; + + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +{% endhighlight %} +{% endtabs %} + +## See also + +- [Bookmark navigation](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/interactive-pdf-navigation/bookmark-navigation/) +- [Page navigation](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/interactive-pdf-navigation/page-navigation/) +- [Page thumbnail navigation](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/interactive-pdf-navigation/page-thumbnail-navigation/) \ No newline at end of file From 42f10e19ae41e0a22718663339871a884414aceb Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 22 Oct 2025 09:55:06 +0530 Subject: [PATCH 14/47] 984044: toolbar module --- .../annotation-toolbar-customization.md | 197 ++ .../toolbar-customization/custom-toolbar.md | 1874 +++++++++++++++++ .../form-designer-toolbar-customization.md | 170 ++ .../toolbar-customization/mobile-toolbar.md | 185 ++ .../primary-toolbar-customization.md | 154 ++ 5 files changed, 2580 insertions(+) create mode 100644 Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/primary-toolbar-customization.md diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md new file mode 100644 index 000000000..fd8ce4c42 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md @@ -0,0 +1,197 @@ +--- +layout: post +title: Annotation Toolbar Customization in React Pdfviewer control | Syncfusion +description: Learn here all about annotation toolbar customization in Syncfusion React Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: Annotation Toolbar Customization +publishingplatform: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Annotation Toolbar Customization + +The annotation toolbar can be customized by showing or hiding default items and by controlling the order in which they appear. + +## Show or hide the annotation toolbar + +Show or hide the annotation toolbar programmatically during initialization or at runtime. + +Use the [EnableAnnotationToolbar](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/pdfViewerModel/#enableannotationtoolbar) property or the [showAnnotationToolbar](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbar/#showannotationtoolbar) method to toggle visibility. + +The following code snippet explains how to show or hide the annotation toolbar using the `showAnnotationToolbar` method. + +{% tabs %} +{% highlight ts tabtitle="index.ts" %} +import * as React from 'react'; +import * as ReactDOM from 'react-dom'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, + ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner } from '@syncfusion/ej2-react-pdfviewer'; + +PdfViewerComponent.Inject(Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, + BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner); + +const App = () => { + const pdfviewer = React.useRef(null); + + React.useEffect(() => { + const buttonElement = document.getElementById('set'); + const handleClick = () => { + if (pdfviewer.current) { + pdfviewer.current.toolbar.showAnnotationToolbar(false); + } + }; + buttonElement?.addEventListener('click', handleClick); + return () => buttonElement?.removeEventListener('click', handleClick); + }, []); + + return ( + + ); +}; + +ReactDOM.render(, document.getElementById('container')); +{% endhighlight %} +{% highlight html tabtitle="index.html" %} + + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+ +
+
+
+ + + +{% endhighlight %} +{% endtabs %} + +## How to customize the annotation toolbar + +Choose which tools appear and control their order in the annotation toolbar. + +Use [`PdfViewerToolbarSettings`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbarSettings/) with the [`AnnotationToolbarItems`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbarSettings/#annotationtoolbaritems) property to choose which tools are displayed in the annotation toolbar. The property accepts a list of [`AnnotationToolbarItem`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationToolbarItem/) values. Only the items included in this list are shown; any item not listed is hidden. The rendered order follows the sequence of items in the list. + +The annotation toolbar is presented when entering annotation mode in PdfViewer and adapts responsively based on the available width. Include the Close tool to allow users to exit the annotation toolbar when needed. + +The following example demonstrates how to customize the annotation toolbar by specifying a selected set of tools using `AnnotationToolbarItem`. + +{% tabs %} +{% highlight ts tabtitle="index.ts" %} +import * as React from 'react'; +import * as ReactDOM from 'react-dom'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, + ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, AnnotationToolbarItem } from '@syncfusion/ej2-react-pdfviewer'; + +PdfViewerComponent.Inject(Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, + BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner); + +const App = () => { + const pdfviewer = React.useRef(null); + const annotationToolbarItems: AnnotationToolbarItem[] = [ + "HighlightTool", + "UnderlineTool", + "StrikethroughTool", + "ColorEditTool", + "OpacityEditTool", + "AnnotationDeleteTool", + "StampAnnotationTool", + "HandWrittenSignatureTool", + "InkAnnotationTool", + "ShapeTool", + "CalibrateTool", + "StrokeColorEditTool", + "ThicknessEditTool", + "FreeTextAnnotationTool", + "FontFamilyAnnotationTool", + "FontSizeAnnotationTool", + "FontStylesAnnotationTool", + "FontAlignAnnotationTool", + "FontColorAnnotationTool", + "CommentPanelTool" + ]; + + return ( + + ); +}; + +ReactDOM.render(, document.getElementById('container')); +{% endhighlight %} +{% highlight html tabtitle="index.html" %} + + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md new file mode 100644 index 000000000..ea5558f5d --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md @@ -0,0 +1,1874 @@ +--- +layout: post +title: Custom Toolbar in React PDF Viewer Component | Syncfusion +description: Learn here all about custom toolbar in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Custom Toolbar + +The PDF Viewer provides APIs for user interaction options available in its built-in toolbar. Using these, you can create your own custom user interface for toolbar actions at the application level by hiding the default toolbar. + +Follow these steps to create a custom toolbar for the PDF Viewer: + +**Step 1: Create a simple PDF Viewer sample.** + +Follow the steps provided in the [getting started](https://ej2.syncfusion.com/react/documentation/pdfviewer/getting-started/) guide to create a basic PDF Viewer sample. + +**Step 2: Add HTML elements for the custom toolbar.** + +Add HTML `div` elements to act as containers for the custom toolbar actions: + +```html + + + + + Essential JS 2 + + + + + + + + + + + + + + + +
+
+
+ + +
+
+ + + + + + +
+
+ +
+
+ + +``` + +**Step 3: Import and inject the necessary modules.** + +Import and inject the modules required for the custom toolbar functionality: + +```ts +import { + PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, + IPageChangeEventArgs, ILoadEventArgs, TextSearch, TextSelection +} from '@syncfusion/ej2-pdfviewer'; +import { Toolbar as Tool, TreeView, NodeSelectEventArgs } from '@syncfusion/ej2-navigations'; +import { ClickEventArgs, Button, CheckBox, ChangeEventArgs } from '@syncfusion/ej2-buttons'; +import { Dialog } from '@syncfusion/ej2-popups'; + +PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection); + +``` + +**Step 4: Hide the default toolbar of the PDF Viewer.** + +Hide the default toolbar using `enableToolbar` and `enableThumbnail` properties: + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +```ts +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +``` +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +```ts +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const viewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); +``` +{% endhighlight %} +{% endtabs %} + +**Step 5: Add EJ2 Toolbar for primary actions.** + +Add Syncfusion EJ2 Toolbar components to perform primary actions like Open, Previous page, Next page, Go to page, Print, and Download: + +```ts + let toolbarObj: Tool = new Tool({ + items: [ + { prefixIcon: 'e-pv-open-document', tooltipText: 'Open', id: 'openButton', click: openDocument.bind(this) }, + { prefixIcon: 'e-pv-bookmark-icon', tooltipText: 'Bookmark', id: 'bookmarkButton', click: bookmarkClicked }, + // tslint:disable-next-line:max-line-length + { prefixIcon: 'e-pv-previous-page-navigation-icon', id: 'previousPage', tooltipText: 'Previous Page', align: 'Center', click: previousClicked.bind(this) }, + // tslint:disable-next-line:max-line-length + { prefixIcon: 'e-pv-next-page-navigation-icon', id: 'nextPage', tooltipText: 'Next Page', align: 'Center', click: nextClicked.bind(this) }, + { template: inputTemplate, tooltipText: 'Page Number', align: 'Center' }, + { template: ele, tooltipText: 'Page Number', align: 'Center' }, + { prefixIcon: 'e-pv-search-icon', tooltipText: 'Text Search', align: 'Right', click: searchClicked.bind(this) }, + { prefixIcon: 'e-pv-print-document-icon', tooltipText: 'Print', align: 'Right', click: printClicked.bind(this) }, + { prefixIcon: 'e-pv-download-document-icon', tooltipText: 'Download', align: 'Right', click: downloadClicked.bind(this) } + ] + }); + toolbarObj.appendTo('#topToolbar'); + +``` + +**Step 6: Add EJ2 Toolbar for magnification actions.** + +Add Syncfusion EJ2 Toolbar components to perform magnification actions in the PDF Viewer: + +```ts + + let magnificationToolbar: Tool = new Tool({ + items: [ + { prefixIcon: 'e-pv-fit-page-icon', id: 'fitPage', tooltipText: 'Fit to page', click: pageFitClicked.bind(this) }, + { prefixIcon: 'e-pv-zoom-in-icon', id: 'zoomIn', tooltipText: 'Zoom in', click: zoomInClicked.bind(this) }, + { prefixIcon: 'e-pv-zoom-out-icon', id: 'zoomOut', tooltipText: 'Zoom out', click: zoomOutClicked.bind(this) }, + ] + }); + magnificationToolbar.appendTo('#magnificationToolbar'); + +``` + +**Step 7: Add custom toolbar styling.** + +Add the following CSS styles to achieve the desired custom toolbar styling: + +```css + +``` + +> The icons are embedded in the font file used in the above code snippet. + +**Step 8: Add scripts for PDF Viewer user interaction.** + +Add the following scripts for handling user interactions with the custom toolbar: + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +```ts + +import { + PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, + IPageChangeEventArgs, ILoadEventArgs, TextSearch, TextSelection +} from '@syncfusion/ej2-pdfviewer'; +import { Toolbar as Tool, TreeView, NodeSelectEventArgs } from '@syncfusion/ej2-navigations'; +import { ClickEventArgs, Button, CheckBox, ChangeEventArgs } from '@syncfusion/ej2-buttons'; +import { Dialog } from '@syncfusion/ej2-popups'; + +PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection); + +/** + * Default PdfViewer sample + */ + +let inputTemplate: string = '
'; +let ele: string = '
of 0
'; +let isBookmarkOpen: boolean = false; +let isBookmarkClick: boolean = false; +let isTextSearchBoxOpen: boolean = false; +let bookmarkPopup: Dialog; +let textSearchPopup: Dialog; +let toolbarObj: Tool; +let viewer: PdfViewer; +let currentPageBox: HTMLElement; +let searchInput: HTMLElement; +let searchButton: HTMLElement; +let matchCase: boolean = false; + +function previousClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.navigation.goToPreviousPage(); +} + +function hidePopups(): void { + isBookmarkOpen = false; + isTextSearchBoxOpen = false; + bookmarkPopup.hide(); + textSearchPopup.hide(); +} + +function bookmarkClicked(): void { + textSearchPopup.hide(); + if (!isBookmarkOpen) { + let bookmarkDetails: any = viewer.bookmark.getBookmarks(); + if (bookmarkDetails.bookmarks) { + let bookmarks: any = bookmarkDetails.bookmarks.bookMark; + let treeObj: TreeView = new TreeView({ + fields: + { + dataSource: bookmarks, + id: 'Id', + parentID: 'Pid', + text: 'Title', + hasChildren: 'HasChild', + }, nodeSelected: nodeClick + }); + treeObj.appendTo('#bookmarkview'); + bookmarkPopup.show(); + isBookmarkOpen = true; + isBookmarkClick = true; + } else { + toolbarObj.enableItems(document.getElementById('bookmarkButton'), false); + isBookmarkOpen = false; + } + } else { + if (!isBookmarkClick) { + bookmarkPopup.show(); + isBookmarkClick = true; + } else { + bookmarkPopup.hide(); + isBookmarkClick = false; + } + } +} + +function nextClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.navigation.goToNextPage(); +} + +function searchClicked(args: ClickEventArgs): void { + bookmarkPopup.hide(); + if (!isTextSearchBoxOpen) { + textSearchPopup.show(); + } else { + viewer.textSearch.cancelTextSearch(); + textSearchPopup.hide(); + } + isTextSearchBoxOpen = !isTextSearchBoxOpen; +} + +function printClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.print.print(); +} + +function downloadClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.download(); +} + +function pageFitClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.fitToPage(); + updateZoomButtons(); + toolbarObj.enableItems(document.getElementById('fitPage'), false); +} + +function zoomInClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.zoomIn(); + updateZoomButtons(); +} + +function zoomOutClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.zoomOut(); + updateZoomButtons(); +} + +function onCurrentPageBoxKeypress(event: KeyboardEvent): boolean { + if ((event.which < 48 || event.which > 57) && event.which !== 8 && event.which !== 13) { + event.preventDefault(); + return false; + } else { + // tslint:disable-next-line:radix + let currentPageNumber: number = parseInt((currentPageBox as HTMLInputElement).value); + if (event.which === 13) { + if (currentPageNumber > 0 && currentPageNumber <= viewer.pageCount) { + viewer.navigation.goToPage(currentPageNumber); + } else { + (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); + } + } + return true; + } +} + +function onCurrentPageBoxClicked(): void { + (currentPageBox as HTMLInputElement).select(); + (currentPageBox).focus(); +} + +function readFile(args: any): void { + // tslint:disable-next-line + let upoadedFiles: any = args.target.files; + if (args.target.files[0] !== null) { + let uploadedFile: File = upoadedFiles[0]; + if (uploadedFile) { + let reader: FileReader = new FileReader(); + let filename: string = upoadedFiles[0].name; + reader.readAsDataURL(uploadedFile); + // tslint:disable-next-line + reader.onload = (e: any): void => { + let uploadedFileUrl: string = e.currentTarget.result; + viewer.load(uploadedFileUrl, null); + viewer.fileName = filename; + (currentPageBox as HTMLInputElement).value = '1'; + document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; + document.getElementById('bookmarkview').innerHTML = ''; + isBookmarkOpen = false; + }; + } + } +} + +function openDocument(e: ClickEventArgs): void { + document.getElementById('fileUpload').click(); +} + +function updatePageNavigation(): void { + if (viewer.currentPageNumber === 1) { + toolbarObj.enableItems(document.getElementById('previousPage'), false); + toolbarObj.enableItems(document.getElementById('nextPage'), true); + } else if (viewer.currentPageNumber === viewer.pageCount) { + toolbarObj.enableItems(document.getElementById('previousPage'), true); + toolbarObj.enableItems(document.getElementById('nextPage'), false); + } else { + toolbarObj.enableItems(document.getElementById('previousPage'), true); + toolbarObj.enableItems(document.getElementById('nextPage'), true); + } +} + +function updateZoomButtons(): void { + if (viewer.zoomPercentage <= 50) { + toolbarObj.enableItems(document.getElementById('zoomIn'), true); + toolbarObj.enableItems(document.getElementById('zoomOut'), false); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } else if (viewer.zoomPercentage >= 400) { + toolbarObj.enableItems(document.getElementById('zoomIn'), false); + toolbarObj.enableItems(document.getElementById('zoomOut'), true); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } else { + toolbarObj.enableItems(document.getElementById('zoomIn'), true); + toolbarObj.enableItems(document.getElementById('zoomOut'), true); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } +} + +function nodeClick(args: NodeSelectEventArgs): boolean { + let bookmarksDetails: any = viewer.bookmark.getBookmarks(); + let bookmarksDestination: any = bookmarksDetails.bookmarksDestination; + let bookid: number = Number(args.nodeData.id); + let pageIndex: number = bookmarksDestination.bookMarkDestination[bookid].PageIndex; + let Y: number = bookmarksDestination.bookMarkDestination[bookid].Y; + viewer.bookmark.goToBookmark(pageIndex, Y); + return false; +} + +function searchInputKeypressed(event: KeyboardEvent): void { + enablePrevButton(true); + enableNextButton(true); + if (event.which === 13) { + initiateTextSearch(); + updateSearchInputIcon(false); + } +} + +function searchClickHandler(): void { + if (searchButton.classList.contains('e-pv-search-icon')) { + viewer.textSearch.cancelTextSearch(); + initiateTextSearch(); + } else if (searchButton.classList.contains('e-pv-search-close')) { + (searchInput as HTMLInputElement).value = ''; + searchInput.focus(); + viewer.textSearch.cancelTextSearch(); + } +} + +function initiateTextSearch(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + viewer.textSearch.searchText(searchString, matchCase); +} + +function previousSearchClicked(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + if (searchString) { + viewer.textSearch.searchPrevious(); + } +} + +function nextSearchClicked(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + if (searchString) { + viewer.textSearch.searchNext(); + } +} + +function checkBoxChanged(args: ChangeEventArgs): void { + if (args.checked) { + matchCase = true; + } else { + matchCase = false; + } + initiateTextSearch(); +} + +function enablePrevButton(isEnable: boolean): void { + let previousSearchButton: HTMLElement = document.getElementById('previousSearch'); + if (isEnable) { + previousSearchButton.removeAttribute('disabled'); + } else { + (previousSearchButton as HTMLButtonElement).disabled = true; + } +} + +function enableNextButton(isEnable: boolean): void { + let nextSearchButton: HTMLElement = document.getElementById('nextSearch'); + if (isEnable) { + nextSearchButton.removeAttribute('disabled'); + } else { + (nextSearchButton as HTMLButtonElement).disabled = true; + } +} + +function updateSearchInputIcon(isEnable: boolean): void { + if (isEnable) { + searchButton.classList.remove('e-pv-search-close'); + searchButton.classList.add('e-pv-search-icon'); + } else { + searchButton.classList.remove('e-pv-search-icon'); + searchButton.classList.add('e-pv-search-close'); + } +} + + + toolbarObj = new Tool({ + items: [ + { prefixIcon: 'e-pv-open-document', tooltipText: 'Open', id: 'openButton', click: openDocument.bind(this) }, + { prefixIcon: 'e-pv-bookmark-icon', tooltipText: 'Bookmark', id: 'bookmarkButton', click: bookmarkClicked }, + // tslint:disable-next-line:max-line-length + { prefixIcon: 'e-pv-previous-page-navigation-icon', id: 'previousPage', tooltipText: 'Previous Page', align: 'Center', click: previousClicked.bind(this) }, + // tslint:disable-next-line:max-line-length + { prefixIcon: 'e-pv-next-page-navigation-icon', id: 'nextPage', tooltipText: 'Next Page', align: 'Center', click: nextClicked.bind(this) }, + { template: inputTemplate, tooltipText: 'Page Number', align: 'Center' }, + { template: ele, tooltipText: 'Page Number', align: 'Center' }, + { prefixIcon: 'e-pv-search-icon', tooltipText: 'Text Search', align: 'Right', click: searchClicked.bind(this) }, + { prefixIcon: 'e-pv-print-document-icon', tooltipText: 'Print', align: 'Right', click: printClicked.bind(this) }, + { prefixIcon: 'e-pv-download-document-icon', tooltipText: 'Download', align: 'Right', click: downloadClicked.bind(this) } + ] + }); + toolbarObj.appendTo('#topToolbar'); + let magnificationToolbar: Tool = new Tool({ + items: [ + { prefixIcon: 'e-pv-fit-page-icon', id: 'fitPage', tooltipText: 'Fit to page', click: pageFitClicked.bind(this) }, + { prefixIcon: 'e-pv-zoom-in-icon', id: 'zoomIn', tooltipText: 'Zoom in', click: zoomInClicked.bind(this) }, + { prefixIcon: 'e-pv-zoom-out-icon', id: 'zoomOut', tooltipText: 'Zoom out', click: zoomOutClicked.bind(this) }, + ] + }); + magnificationToolbar.appendTo('#magnificationToolbar'); + viewer = new PdfViewer({ + enableToolbar: false, + enableThumbnail: false, + documentPath: 'https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf' + }); + viewer.appendTo('#pdfViewer'); + document.getElementById('fileUpload').addEventListener('change', readFile, false); + currentPageBox = document.getElementById('currentPage'); + (currentPageBox as HTMLInputElement).value = '1'; + searchInput = document.getElementById('searchInput'); + bookmarkPopup = new Dialog({ + showCloseIcon: true, header: 'Bookmarks', closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), + content: '
', + buttons: [{ + buttonModel: {}, + }], position: { X: 'left', Y: 'top' }, cssClass: 'e-bookmark-popup', beforeClose: (): void => { + isBookmarkOpen = false; + } + }); + bookmarkPopup.appendTo('#popup'); + + textSearchPopup = new Dialog({ + showCloseIcon: false, closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), + buttons: [{ + buttonModel: {}, + }], position: { X: 'right', Y: 'top' }, cssClass: 'e-text-search-popup', + }); + textSearchPopup.appendTo('#textSearchBox'); + + let previousSearch: Button = new Button({ iconCss: 'e-pv-previous-search' }); + previousSearch.appendTo('#previousSearch'); + + let nextSearch: Button = new Button({ iconCss: 'e-pv-next-search-btn' }); + nextSearch.appendTo('#nextSearch'); + + let matchCaseCheck: CheckBox = new CheckBox({ label: 'Match case', change: checkBoxChanged }); + matchCaseCheck.appendTo('#matchCase'); + + viewer.pageChange = (args: IPageChangeEventArgs): void => { + (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); + updatePageNavigation(); + }; + + viewer.documentLoad = (args: ILoadEventArgs): void => { + document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; + updatePageNavigation(); + }; + searchButton = document.getElementById('searchBtn'); + searchInput.addEventListener('focus', () => { searchInput.parentElement.classList.add('e-input-focus'); }); + searchInput.addEventListener('blur', () => { searchInput.parentElement.classList.remove('e-input-focus'); }); + searchInput.addEventListener('keypress', searchInputKeypressed); + document.getElementById('previousSearch').addEventListener('click', previousSearchClicked); + document.getElementById('nextSearch').addEventListener('click', nextSearchClicked); + currentPageBox.addEventListener('keypress', onCurrentPageBoxKeypress); + currentPageBox.addEventListener('click', onCurrentPageBoxClicked); + searchButton.addEventListener('click', searchClickHandler); + bookmarkPopup.hide(); + textSearchPopup.hide(); + enableNextButton(false); + enablePrevButton(false); + +``` +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} +```ts + +import { + PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, + IPageChangeEventArgs, ILoadEventArgs, TextSearch, TextSelection +} from '@syncfusion/ej2-pdfviewer'; +import { Toolbar as Tool, TreeView, NodeSelectEventArgs } from '@syncfusion/ej2-navigations'; +import { ClickEventArgs, Button, CheckBox, ChangeEventArgs } from '@syncfusion/ej2-buttons'; +import { Dialog } from '@syncfusion/ej2-popups'; + +PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection); + +/** + * Default PdfViewer sample + */ + +let inputTemplate: string = '
'; +let ele: string = '
of 0
'; +let isBookmarkOpen: boolean = false; +let isBookmarkClick: boolean = false; +let isTextSearchBoxOpen: boolean = false; +let bookmarkPopup: Dialog; +let textSearchPopup: Dialog; +let toolbarObj: Tool; +let viewer: PdfViewer; +let currentPageBox: HTMLElement; +let searchInput: HTMLElement; +let searchButton: HTMLElement; +let matchCase: boolean = false; + +function previousClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.navigation.goToPreviousPage(); +} + +function hidePopups(): void { + isBookmarkOpen = false; + isTextSearchBoxOpen = false; + bookmarkPopup.hide(); + textSearchPopup.hide(); +} + +function bookmarkClicked(): void { + textSearchPopup.hide(); + if (!isBookmarkOpen) { + let bookmarkDetails: any = viewer.bookmark.getBookmarks(); + if (bookmarkDetails.bookmarks) { + let bookmarks: any = bookmarkDetails.bookmarks.bookMark; + let treeObj: TreeView = new TreeView({ + fields: + { + dataSource: bookmarks, + id: 'Id', + parentID: 'Pid', + text: 'Title', + hasChildren: 'HasChild', + }, nodeSelected: nodeClick + }); + treeObj.appendTo('#bookmarkview'); + bookmarkPopup.show(); + isBookmarkOpen = true; + isBookmarkClick = true; + } else { + toolbarObj.enableItems(document.getElementById('bookmarkButton'), false); + isBookmarkOpen = false; + } + } else { + if (!isBookmarkClick) { + bookmarkPopup.show(); + isBookmarkClick = true; + } else { + bookmarkPopup.hide(); + isBookmarkClick = false; + } + } +} + +function nextClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.navigation.goToNextPage(); +} + +function searchClicked(args: ClickEventArgs): void { + bookmarkPopup.hide(); + if (!isTextSearchBoxOpen) { + textSearchPopup.show(); + } else { + viewer.textSearch.cancelTextSearch(); + textSearchPopup.hide(); + } + isTextSearchBoxOpen = !isTextSearchBoxOpen; +} + +function printClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.print.print(); +} + +function downloadClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.download(); +} + +function pageFitClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.fitToPage(); + updateZoomButtons(); + toolbarObj.enableItems(document.getElementById('fitPage'), false); +} + +function zoomInClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.zoomIn(); + updateZoomButtons(); +} + +function zoomOutClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.zoomOut(); + updateZoomButtons(); +} + +function onCurrentPageBoxKeypress(event: KeyboardEvent): boolean { + if ((event.which < 48 || event.which > 57) && event.which !== 8 && event.which !== 13) { + event.preventDefault(); + return false; + } else { + // tslint:disable-next-line:radix + let currentPageNumber: number = parseInt((currentPageBox as HTMLInputElement).value); + if (event.which === 13) { + if (currentPageNumber > 0 && currentPageNumber <= viewer.pageCount) { + viewer.navigation.goToPage(currentPageNumber); + } else { + (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); + } + } + return true; + } +} + +function onCurrentPageBoxClicked(): void { + (currentPageBox as HTMLInputElement).select(); + (currentPageBox).focus(); +} + +function readFile(args: any): void { + // tslint:disable-next-line + let upoadedFiles: any = args.target.files; + if (args.target.files[0] !== null) { + let uploadedFile: File = upoadedFiles[0]; + if (uploadedFile) { + let reader: FileReader = new FileReader(); + let filename: string = upoadedFiles[0].name; + reader.readAsDataURL(uploadedFile); + // tslint:disable-next-line + reader.onload = (e: any): void => { + let uploadedFileUrl: string = e.currentTarget.result; + viewer.load(uploadedFileUrl, null); + viewer.fileName = filename; + (currentPageBox as HTMLInputElement).value = '1'; + document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; + document.getElementById('bookmarkview').innerHTML = ''; + isBookmarkOpen = false; + }; + } + } +} + +function openDocument(e: ClickEventArgs): void { + document.getElementById('fileUpload').click(); +} + +function updatePageNavigation(): void { + if (viewer.currentPageNumber === 1) { + toolbarObj.enableItems(document.getElementById('previousPage'), false); + toolbarObj.enableItems(document.getElementById('nextPage'), true); + } else if (viewer.currentPageNumber === viewer.pageCount) { + toolbarObj.enableItems(document.getElementById('previousPage'), true); + toolbarObj.enableItems(document.getElementById('nextPage'), false); + } else { + toolbarObj.enableItems(document.getElementById('previousPage'), true); + toolbarObj.enableItems(document.getElementById('nextPage'), true); + } +} + +function updateZoomButtons(): void { + if (viewer.zoomPercentage <= 50) { + toolbarObj.enableItems(document.getElementById('zoomIn'), true); + toolbarObj.enableItems(document.getElementById('zoomOut'), false); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } else if (viewer.zoomPercentage >= 400) { + toolbarObj.enableItems(document.getElementById('zoomIn'), false); + toolbarObj.enableItems(document.getElementById('zoomOut'), true); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } else { + toolbarObj.enableItems(document.getElementById('zoomIn'), true); + toolbarObj.enableItems(document.getElementById('zoomOut'), true); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } +} + +function nodeClick(args: NodeSelectEventArgs): boolean { + let bookmarksDetails: any = viewer.bookmark.getBookmarks(); + let bookmarksDestination: any = bookmarksDetails.bookmarksDestination; + let bookid: number = Number(args.nodeData.id); + let pageIndex: number = bookmarksDestination.bookMarkDestination[bookid].PageIndex; + let Y: number = bookmarksDestination.bookMarkDestination[bookid].Y; + viewer.bookmark.goToBookmark(pageIndex, Y); + return false; +} + +function searchInputKeypressed(event: KeyboardEvent): void { + enablePrevButton(true); + enableNextButton(true); + if (event.which === 13) { + initiateTextSearch(); + updateSearchInputIcon(false); + } +} + +function searchClickHandler(): void { + if (searchButton.classList.contains('e-pv-search-icon')) { + viewer.textSearch.cancelTextSearch(); + initiateTextSearch(); + } else if (searchButton.classList.contains('e-pv-search-close')) { + (searchInput as HTMLInputElement).value = ''; + searchInput.focus(); + viewer.textSearch.cancelTextSearch(); + } +} + +function initiateTextSearch(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + viewer.textSearch.searchText(searchString, matchCase); +} + +function previousSearchClicked(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + if (searchString) { + viewer.textSearch.searchPrevious(); + } +} + +function nextSearchClicked(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + if (searchString) { + viewer.textSearch.searchNext(); + } +} + +function checkBoxChanged(args: ChangeEventArgs): void { + if (args.checked) { + matchCase = true; + } else { + matchCase = false; + } + initiateTextSearch(); +} + +function enablePrevButton(isEnable: boolean): void { + let previousSearchButton: HTMLElement = document.getElementById('previousSearch'); + if (isEnable) { + previousSearchButton.removeAttribute('disabled'); + } else { + (previousSearchButton as HTMLButtonElement).disabled = true; + } +} + +function enableNextButton(isEnable: boolean): void { + let nextSearchButton: HTMLElement = document.getElementById('nextSearch'); + if (isEnable) { + nextSearchButton.removeAttribute('disabled'); + } else { + (nextSearchButton as HTMLButtonElement).disabled = true; + } +} + +function updateSearchInputIcon(isEnable: boolean): void { + if (isEnable) { + searchButton.classList.remove('e-pv-search-close'); + searchButton.classList.add('e-pv-search-icon'); + } else { + searchButton.classList.remove('e-pv-search-icon'); + searchButton.classList.add('e-pv-search-close'); + } +} + + + toolbarObj = new Tool({ + items: [ + { prefixIcon: 'e-pv-open-document', tooltipText: 'Open', id: 'openButton', click: openDocument.bind(this) }, + { prefixIcon: 'e-pv-bookmark-icon', tooltipText: 'Bookmark', id: 'bookmarkButton', click: bookmarkClicked }, + // tslint:disable-next-line:max-line-length + { prefixIcon: 'e-pv-previous-page-navigation-icon', id: 'previousPage', tooltipText: 'Previous Page', align: 'Center', click: previousClicked.bind(this) }, + // tslint:disable-next-line:max-line-length + { prefixIcon: 'e-pv-next-page-navigation-icon', id: 'nextPage', tooltipText: 'Next Page', align: 'Center', click: nextClicked.bind(this) }, + { template: inputTemplate, tooltipText: 'Page Number', align: 'Center' }, + { template: ele, tooltipText: 'Page Number', align: 'Center' }, + { prefixIcon: 'e-pv-search-icon', tooltipText: 'Text Search', align: 'Right', click: searchClicked.bind(this) }, + { prefixIcon: 'e-pv-print-document-icon', tooltipText: 'Print', align: 'Right', click: printClicked.bind(this) }, + { prefixIcon: 'e-pv-download-document-icon', tooltipText: 'Download', align: 'Right', click: downloadClicked.bind(this) } + ] + }); + toolbarObj.appendTo('#topToolbar'); + let magnificationToolbar: Tool = new Tool({ + items: [ + { prefixIcon: 'e-pv-fit-page-icon', id: 'fitPage', tooltipText: 'Fit to page', click: pageFitClicked.bind(this) }, + { prefixIcon: 'e-pv-zoom-in-icon', id: 'zoomIn', tooltipText: 'Zoom in', click: zoomInClicked.bind(this) }, + { prefixIcon: 'e-pv-zoom-out-icon', id: 'zoomOut', tooltipText: 'Zoom out', click: zoomOutClicked.bind(this) }, + ] + }); + magnificationToolbar.appendTo('#magnificationToolbar'); + viewer = new PdfViewer({ + enableToolbar: false, + enableThumbnail: false, + documentPath: 'https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf' + }); + viewer.appendTo('#pdfViewer'); + document.getElementById('fileUpload').addEventListener('change', readFile, false); + currentPageBox = document.getElementById('currentPage'); + (currentPageBox as HTMLInputElement).value = '1'; + searchInput = document.getElementById('searchInput'); + bookmarkPopup = new Dialog({ + showCloseIcon: true, header: 'Bookmarks', closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), + content: '
', + buttons: [{ + buttonModel: {}, + }], position: { X: 'left', Y: 'top' }, cssClass: 'e-bookmark-popup', beforeClose: (): void => { + isBookmarkOpen = false; + } + }); + bookmarkPopup.appendTo('#popup'); + + textSearchPopup = new Dialog({ + showCloseIcon: false, closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), + buttons: [{ + buttonModel: {}, + }], position: { X: 'right', Y: 'top' }, cssClass: 'e-text-search-popup', + }); + textSearchPopup.appendTo('#textSearchBox'); + + let previousSearch: Button = new Button({ iconCss: 'e-pv-previous-search' }); + previousSearch.appendTo('#previousSearch'); + + let nextSearch: Button = new Button({ iconCss: 'e-pv-next-search-btn' }); + nextSearch.appendTo('#nextSearch'); + + let matchCaseCheck: CheckBox = new CheckBox({ label: 'Match case', change: checkBoxChanged }); + matchCaseCheck.appendTo('#matchCase'); + + viewer.pageChange = (args: IPageChangeEventArgs): void => { + (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); + updatePageNavigation(); + }; + + viewer.documentLoad = (args: ILoadEventArgs): void => { + document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; + updatePageNavigation(); + }; + searchButton = document.getElementById('searchBtn'); + searchInput.addEventListener('focus', () => { searchInput.parentElement.classList.add('e-input-focus'); }); + searchInput.addEventListener('blur', () => { searchInput.parentElement.classList.remove('e-input-focus'); }); + searchInput.addEventListener('keypress', searchInputKeypressed); + document.getElementById('previousSearch').addEventListener('click', previousSearchClicked); + document.getElementById('nextSearch').addEventListener('click', nextSearchClicked); + currentPageBox.addEventListener('keypress', onCurrentPageBoxKeypress); + currentPageBox.addEventListener('click', onCurrentPageBoxClicked); + searchButton.addEventListener('click', searchClickHandler); + bookmarkPopup.hide(); + textSearchPopup.hide(); + enableNextButton(false); + enablePrevButton(false); + +``` +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} +```ts + +import { + PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, + IPageChangeEventArgs, ILoadEventArgs, TextSearch, TextSelection +} from '@syncfusion/ej2-pdfviewer'; +import { Toolbar as Tool, TreeView, NodeSelectEventArgs } from '@syncfusion/ej2-navigations'; +import { ClickEventArgs, Button, CheckBox, ChangeEventArgs } from '@syncfusion/ej2-buttons'; +import { Dialog } from '@syncfusion/ej2-popups'; + +PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection); + +/** + * Default PdfViewer sample + */ + +let inputTemplate: string = '
'; +let ele: string = '
of 0
'; +let isBookmarkOpen: boolean = false; +let isBookmarkClick: boolean = false; +let isTextSearchBoxOpen: boolean = false; +let bookmarkPopup: Dialog; +let textSearchPopup: Dialog; +let toolbarObj: Tool; +let viewer: PdfViewer; +let currentPageBox: HTMLElement; +let searchInput: HTMLElement; +let searchButton: HTMLElement; +let matchCase: boolean = false; + +function previousClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.navigation.goToPreviousPage(); +} + +function hidePopups(): void { + isBookmarkOpen = false; + isTextSearchBoxOpen = false; + bookmarkPopup.hide(); + textSearchPopup.hide(); +} + +function bookmarkClicked(): void { + textSearchPopup.hide(); + if (!isBookmarkOpen) { + let bookmarkDetails: any = viewer.bookmark.getBookmarks(); + if (bookmarkDetails.bookmarks) { + let bookmarks: any = bookmarkDetails.bookmarks.bookMark; + let treeObj: TreeView = new TreeView({ + fields: + { + dataSource: bookmarks, + id: 'Id', + parentID: 'Pid', + text: 'Title', + hasChildren: 'HasChild', + }, nodeSelected: nodeClick + }); + treeObj.appendTo('#bookmarkview'); + bookmarkPopup.show(); + isBookmarkOpen = true; + isBookmarkClick = true; + } else { + toolbarObj.enableItems(document.getElementById('bookmarkButton'), false); + isBookmarkOpen = false; + } + } else { + if (!isBookmarkClick) { + bookmarkPopup.show(); + isBookmarkClick = true; + } else { + bookmarkPopup.hide(); + isBookmarkClick = false; + } + } +} + +function nextClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.navigation.goToNextPage(); +} + +function searchClicked(args: ClickEventArgs): void { + bookmarkPopup.hide(); + if (!isTextSearchBoxOpen) { + textSearchPopup.show(); + } else { + viewer.textSearch.cancelTextSearch(); + textSearchPopup.hide(); + } + isTextSearchBoxOpen = !isTextSearchBoxOpen; +} + +function printClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.print.print(); +} + +function downloadClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.download(); +} + +function pageFitClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.fitToPage(); + updateZoomButtons(); + toolbarObj.enableItems(document.getElementById('fitPage'), false); +} + +function zoomInClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.zoomIn(); + updateZoomButtons(); +} + +function zoomOutClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.zoomOut(); + updateZoomButtons(); +} + +function onCurrentPageBoxKeypress(event: KeyboardEvent): boolean { + if ((event.which < 48 || event.which > 57) && event.which !== 8 && event.which !== 13) { + event.preventDefault(); + return false; + } else { + // tslint:disable-next-line:radix + let currentPageNumber: number = parseInt((currentPageBox as HTMLInputElement).value); + if (event.which === 13) { + if (currentPageNumber > 0 && currentPageNumber <= viewer.pageCount) { + viewer.navigation.goToPage(currentPageNumber); + } else { + (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); + } + } + return true; + } +} + +function onCurrentPageBoxClicked(): void { + (currentPageBox as HTMLInputElement).select(); + (currentPageBox).focus(); +} + +function readFile(args: any): void { + // tslint:disable-next-line + let upoadedFiles: any = args.target.files; + if (args.target.files[0] !== null) { + let uploadedFile: File = upoadedFiles[0]; + if (uploadedFile) { + let reader: FileReader = new FileReader(); + let filename: string = upoadedFiles[0].name; + reader.readAsDataURL(uploadedFile); + // tslint:disable-next-line + reader.onload = (e: any): void => { + let uploadedFileUrl: string = e.currentTarget.result; + viewer.load(uploadedFileUrl, null); + viewer.fileName = filename; + (currentPageBox as HTMLInputElement).value = '1'; + document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; + document.getElementById('bookmarkview').innerHTML = ''; + isBookmarkOpen = false; + }; + } + } +} + +function openDocument(e: ClickEventArgs): void { + document.getElementById('fileUpload').click(); +} + +function updatePageNavigation(): void { + if (viewer.currentPageNumber === 1) { + toolbarObj.enableItems(document.getElementById('previousPage'), false); + toolbarObj.enableItems(document.getElementById('nextPage'), true); + } else if (viewer.currentPageNumber === viewer.pageCount) { + toolbarObj.enableItems(document.getElementById('previousPage'), true); + toolbarObj.enableItems(document.getElementById('nextPage'), false); + } +} + +function updateZoomButtons(): void { + if (viewer.zoomPercentage <= 50) { + toolbarObj.enableItems(document.getElementById('zoomIn'), true); + toolbarObj.enableItems(document.getElementById('zoomOut'), false); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } else if (viewer.zoomPercentage >= 400) { + toolbarObj.enableItems(document.getElementById('zoomIn'), false); + toolbarObj.enableItems(document.getElementById('zoomOut'), true); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } else { + toolbarObj.enableItems(document.getElementById('zoomIn'), true); + toolbarObj.enableItems(document.getElementById('zoomOut'), true); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } +} + +function nodeClick(args: NodeSelectEventArgs): boolean { + let bookmarksDetails: any = viewer.bookmark.getBookmarks(); + let bookmarksDestination: any = bookmarksDetails.bookmarksDestination; + let bookid: number = Number(args.nodeData.id); + let pageIndex: number = bookmarksDestination.bookMarkDestination[bookid].PageIndex; + let Y: number = bookmarksDestination.bookMarkDestination[bookid].Y; + viewer.bookmark.goToBookmark(pageIndex, Y); + return false; +} + +function searchInputKeypressed(event: KeyboardEvent): void { + enablePrevButton(true); + enableNextButton(true); + if (event.which === 13) { + initiateTextSearch(); + updateSearchInputIcon(false); + } +} + +function searchClickHandler(): void { + if (searchButton.classList.contains('e-pv-search-icon')) { + viewer.textSearch.cancelTextSearch(); + initiateTextSearch(); + } else if (searchButton.classList.contains('e-pv-search-close')) { + (searchInput as HTMLInputElement).value = ''; + searchInput.focus(); + viewer.textSearch.cancelTextSearch(); + } +} + +function initiateTextSearch(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + viewer.textSearch.searchText(searchString, matchCase); +} + +function previousSearchClicked(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + if (searchString) { + viewer.textSearch.searchPrevious(); + } +} + +function nextSearchClicked(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + if (searchString) { + viewer.textSearch.searchNext(); + } +} + +function checkBoxChanged(args: ChangeEventArgs): void { + if (args.checked) { + matchCase = true; + } else { + matchCase = false; + } + initiateTextSearch(); +} + +function enablePrevButton(isEnable: boolean): void { + let previousSearchButton: HTMLElement = document.getElementById('previousSearch'); + if (isEnable) { + previousSearchButton.removeAttribute('disabled'); + } else { + (previousSearchButton as HTMLButtonElement).disabled = true; + } +} + +function enableNextButton(isEnable: boolean): void { + let nextSearchButton: HTMLElement = document.getElementById('nextSearch'); + if (isEnable) { + nextSearchButton.removeAttribute('disabled'); + } else { + (nextSearchButton as HTMLButtonElement).disabled = true; + } +} + +function updateSearchInputIcon(isEnable: boolean): void { + if (isEnable) { + searchButton.classList.remove('e-pv-search-close'); + searchButton.classList.add('e-pv-search-icon'); + } else { + searchButton.classList.remove('e-pv-search-icon'); + searchButton.classList.add('e-pv-search-close'); + } +} + + + toolbarObj = new Tool({ + items: [ + { prefixIcon: 'e-pv-open-document', tooltipText: 'Open', id: 'openButton', click: openDocument.bind(this) }, + { prefixIcon: 'e-pv-bookmark-icon', tooltipText: 'Bookmark', id: 'bookmarkButton', click: bookmarkClicked }, + // tslint:disable-next-line:max-line-length + { prefixIcon: 'e-pv-previous-page-navigation-icon', id: 'previousPage', tooltipText: 'Previous Page', align: 'Center', click: previousClicked.bind(this) }, + // tslint:disable-next-line:max-line-length + { prefixIcon: 'e-pv-next-page-navigation-icon', id: 'nextPage', tooltipText: 'Next Page', align: 'Center', click: nextClicked.bind(this) }, + { template: inputTemplate, tooltipText: 'Page Number', align: 'Center' }, + { template: ele, tooltipText: 'Page Number', align: 'Center' }, + { prefixIcon: 'e-pv-search-icon', tooltipText: 'Text Search', align: 'Right', click: searchClicked.bind(this) }, + { prefixIcon: 'e-pv-print-document-icon', tooltipText: 'Print', align: 'Right', click: printClicked.bind(this) }, + { prefixIcon: 'e-pv-download-document-icon', tooltipText: 'Download', align: 'Right', click: downloadClicked.bind(this) } + ] + }); + toolbarObj.appendTo('#topToolbar'); + let magnificationToolbar: Tool = new Tool({ + items: [ + { prefixIcon: 'e-pv-fit-page-icon', id: 'fitPage', tooltipText: 'Fit to page', click: pageFitClicked.bind(this) }, + { prefixIcon: 'e-pv-zoom-in-icon', id: 'zoomIn', tooltipText: 'Zoom in', click: zoomInClicked.bind(this) }, + { prefixIcon: 'e-pv-zoom-out-icon', id: 'zoomOut', tooltipText: 'Zoom out', click: zoomOutClicked.bind(this) }, + ] + }); + magnificationToolbar.appendTo('#magnificationToolbar'); + viewer = new PdfViewer({ + enableToolbar: false, + enableThumbnail: false, + documentPath: 'https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf' + }); + viewer.appendTo('#pdfViewer'); + document.getElementById('fileUpload').addEventListener('change', readFile, false); + currentPageBox = document.getElementById('currentPage'); + (currentPageBox as HTMLInputElement).value = '1'; + searchInput = document.getElementById('searchInput'); + bookmarkPopup = new Dialog({ + showCloseIcon: true, header: 'Bookmarks', closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), + content: '
', + buttons: [{ + buttonModel: {}, + }], position: { X: 'left', Y: 'top' }, cssClass: 'e-bookmark-popup', beforeClose: (): void => { + isBookmarkOpen = false; + } + }); + bookmarkPopup.appendTo('#popup'); + + textSearchPopup = new Dialog({ + showCloseIcon: false, closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), + buttons: [{ + buttonModel: {}, + }], position: { X: 'right', Y: 'top' }, cssClass: 'e-text-search-popup', + }); + textSearchPopup.appendTo('#textSearchBox'); + + let previousSearch: Button = new Button({ iconCss: 'e-pv-previous-search' }); + previousSearch.appendTo('#previousSearch'); + + let nextSearch: Button = new Button({ iconCss: 'e-pv-next-search-btn' }); + nextSearch.appendTo('#nextSearch'); + + let matchCaseCheck: CheckBox = new CheckBox({ label: 'Match case', change: checkBoxChanged }); + matchCaseCheck.appendTo('#matchCase'); + + viewer.pageChange = (args: IPageChangeEventArgs): void => { + (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); + updatePageNavigation(); + }; + + viewer.documentLoad = (args: ILoadEventArgs): void => { + document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; + updatePageNavigation(); + }; + searchButton = document.getElementById('searchBtn'); + searchInput.addEventListener('focus', () => { searchInput.parentElement.classList.add('e-input-focus'); }); + searchInput.addEventListener('blur', () => { searchInput.parentElement.classList.remove('e-input-focus'); }); + searchInput.addEventListener('keypress', searchInputKeypressed); + document.getElementById('previousSearch').addEventListener('click', previousSearchClicked); + document.getElementById('nextSearch').addEventListener('click', nextSearchClicked); + currentPageBox.addEventListener('keypress', onCurrentPageBoxKeypress); + currentPageBox.addEventListener('click', onCurrentPageBoxClicked); + searchButton.addEventListener('click', searchClickHandler); + bookmarkPopup.hide(); + textSearchPopup.hide(); + enableNextButton(false); + enablePrevButton(false); + +``` +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} +```ts + +import { + PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, + IPageChangeEventArgs, ILoadEventArgs, TextSearch, TextSelection +} from '@syncfusion/ej2-pdfviewer'; +import { Toolbar as Tool, TreeView, NodeSelectEventArgs } from '@syncfusion/ej2-navigations'; +import { ClickEventArgs, Button, CheckBox, ChangeEventArgs } from '@syncfusion/ej2-buttons'; +import { Dialog } from '@syncfusion/ej2-popups'; + +PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection); + +/** + * Default PdfViewer sample + */ + +let inputTemplate: string = '
'; +let ele: string = '
of 0
'; +let isBookmarkOpen: boolean = false; +let isBookmarkClick: boolean = false; +let isTextSearchBoxOpen: boolean = false; +let bookmarkPopup: Dialog; +let textSearchPopup: Dialog; +let toolbarObj: Tool; +let viewer: PdfViewer; +let currentPageBox: HTMLElement; +let searchInput: HTMLElement; +let searchButton: HTMLElement; +let matchCase: boolean = false; + +function previousClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.navigation.goToPreviousPage(); +} + +function hidePopups(): void { + isBookmarkOpen = false; + isTextSearchBoxOpen = false; + bookmarkPopup.hide(); + textSearchPopup.hide(); +} + +function bookmarkClicked(): void { + textSearchPopup.hide(); + if (!isBookmarkOpen) { + let bookmarkDetails: any = viewer.bookmark.getBookmarks(); + if (bookmarkDetails.bookmarks) { + let bookmarks: any = bookmarkDetails.bookmarks.bookMark; + let treeObj: TreeView = new TreeView({ + fields: + { + dataSource: bookmarks, + id: 'Id', + parentID: 'Pid', + text: 'Title', + hasChildren: 'HasChild', + }, nodeSelected: nodeClick + }); + treeObj.appendTo('#bookmarkview'); + bookmarkPopup.show(); + isBookmarkOpen = true; + isBookmarkClick = true; + } else { + toolbarObj.enableItems(document.getElementById('bookmarkButton'), false); + isBookmarkOpen = false; + } + } +} else { + if (!isBookmarkClick) { + bookmarkPopup.show(); + isBookmarkClick = true; + } else { + bookmarkPopup.hide(); + isBookmarkClick = false; + } + } +} + +function nextClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.navigation.goToNextPage(); +} + +function searchClicked(args: ClickEventArgs): void { + bookmarkPopup.hide(); + if (!isTextSearchBoxOpen) { + textSearchPopup.show(); + } else { + viewer.textSearch.cancelTextSearch(); + textSearchPopup.hide(); + } + isTextSearchBoxOpen = !isTextSearchBoxOpen; +} + +function printClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.print.print(); +} + +function downloadClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.download(); +} + +function pageFitClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.fitToPage(); + updateZoomButtons(); + toolbarObj.enableItems(document.getElementById('fitPage'), false); +} + +function zoomInClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.zoomIn(); + updateZoomButtons(); +} + +function zoomOutClicked(args: ClickEventArgs): void { + hidePopups(); + viewer.magnification.zoomOut(); + updateZoomButtons(); +} + +function onCurrentPageBoxKeypress(event: KeyboardEvent): boolean { + if ((event.which < 48 || event.which > 57) && event.which !== 8 && event.which !== 13) { + event.preventDefault(); + return false; + } else { + // tslint:disable-next-line:radix + let currentPageNumber: number = parseInt((currentPageBox as HTMLInputElement).value); + if (event.which === 13) { + if (currentPageNumber > 0 && currentPageNumber <= viewer.pageCount) { + viewer.navigation.goToPage(currentPageNumber); + } else { + (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); + } + } + return true; + } +} + +function onCurrentPageBoxClicked(): void { + (currentPageBox as HTMLInputElement).select(); + (currentPageBox).focus(); +} + +function readFile(args: any): void { + // tslint:disable-next-line + let upoadedFiles: any = args.target.files; + if (args.target.files[0] !== null) { + let uploadedFile: File = upoadedFiles[0]; + if (uploadedFile) { + let reader: FileReader = new FileReader(); + let filename: string = upoadedFiles[0].name; + reader.readAsDataURL(uploadedFile); + // tslint:disable-next-line + reader.onload = (e: any): void => { + let uploadedFileUrl: string = e.currentTarget.result; + viewer.load(uploadedFileUrl, null); + viewer.fileName = filename; + (currentPageBox as HTMLInputElement).value = '1'; + document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; + document.getElementById('bookmarkview').innerHTML = ''; + isBookmarkOpen = false; + }; + } + } +} + +function openDocument(e: ClickEventArgs): void { + document.getElementById('fileUpload').click(); +} + +function updatePageNavigation(): void { + if (viewer.currentPageNumber === 1) { + toolbarObj.enableItems(document.getElementById('previousPage'), false); + toolbarObj.enableItems(document.getElementById('nextPage'), true); + } else if (viewer.currentPageNumber === viewer.pageCount) { + toolbarObj.enableItems(document.getElementById('previousPage'), true); + toolbarObj.enableItems(document.getElementById('nextPage'), false); + } else { + toolbarObj.enableItems(document.getElementById('previousPage'), true); + toolbarObj.enableItems(document.getElementById('nextPage'), true); + } +} + +function updateZoomButtons(): void { + if (viewer.zoomPercentage <= 50) { + toolbarObj.enableItems(document.getElementById('zoomIn'), true); + toolbarObj.enableItems(document.getElementById('zoomOut'), false); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } else if (viewer.zoomPercentage >= 400) { + toolbarObj.enableItems(document.getElementById('zoomIn'), false); + toolbarObj.enableItems(document.getElementById('zoomOut'), true); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } else { + toolbarObj.enableItems(document.getElementById('zoomIn'), true); + toolbarObj.enableItems(document.getElementById('zoomOut'), true); + toolbarObj.enableItems(document.getElementById('fitPage'), true); + } +} + +function nodeClick(args: NodeSelectEventArgs): boolean { + let bookmarksDetails: any = viewer.bookmark.getBookmarks(); + let bookmarksDestination: any = bookmarksDetails.bookmarksDestination; + let bookid: number = Number(args.nodeData.id); + let pageIndex: number = bookmarksDestination.bookMarkDestination[bookid].PageIndex; + let Y: number = bookmarksDestination.bookMarkDestination[bookid].Y; + viewer.bookmark.goToBookmark(pageIndex, Y); + return false; +} + +function searchInputKeypressed(event: KeyboardEvent): void { + enablePrevButton(true); + enableNextButton(true); + if (event.which === 13) { + initiateTextSearch(); + updateSearchInputIcon(false); + } +} + +function searchClickHandler(): void { + if (searchButton.classList.contains('e-pv-search-icon')) { + viewer.textSearch.cancelTextSearch(); + initiateTextSearch(); + } else if (searchButton.classList.contains('e-pv-search-close')) { + (searchInput as HTMLInputElement).value = ''; + searchInput.focus(); + viewer.textSearch.cancelTextSearch(); + } +} + +function initiateTextSearch(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + viewer.textSearch.searchText(searchString, matchCase); +} + +function previousSearchClicked(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + if (searchString) { + viewer.textSearch.searchPrevious(); + } +} + +function nextSearchClicked(): void { + let searchString: string = (searchInput as HTMLInputElement).value; + if (searchString) { + viewer.textSearch.searchNext(); + } +} + +function checkBoxChanged(args: ChangeEventArgs): void { + if (args.checked) { + matchCase = true; + } else { + matchCase = false; + } + initiateTextSearch(); +} + +function enablePrevButton(isEnable: boolean): void { + let previousSearchButton: HTMLElement = document.getElementById('previousSearch'); + if (isEnable) { + previousSearchButton.removeAttribute('disabled'); + } else { + (previousSearchButton as HTMLButtonElement).disabled = true; + } +} + +function enableNextButton(isEnable: boolean): void { + let nextSearchButton: HTMLElement = document.getElementById('nextSearch'); + if (isEnable) { + nextSearchButton.removeAttribute('disabled'); + } else { + (nextSearchButton as HTMLButtonElement).disabled = true; + } +} + +function updateSearchInputIcon(isEnable: boolean): void { + if (isEnable) { + searchButton.classList.remove('e-pv-search-close'); + searchButton.classList.add('e-pv-search-icon'); + } else { + searchButton.classList.remove('e-pv-search-icon'); + searchButton.classList.add('e-pv-search-close'); + } +} + + + toolbarObj = new Tool({ + items: [ + { prefixIcon: 'e-pv-open-document', tooltipText: 'Open', id: 'openButton', click: openDocument.bind(this) }, + { prefixIcon: 'e-pv-bookmark-icon', tooltipText: 'Bookmark', id: 'bookmarkButton', click: bookmarkClicked }, + // tslint:disable-next-line:max-line-length + { prefixIcon: 'e-pv-previous-page-navigation-icon', id: 'previousPage', tooltipText: 'Previous Page', align: 'Center', click: previousClicked.bind(this) }, + // tslint:disable-next-line:max-line-length + { prefixIcon: 'e-pv-next-page-navigation-icon', id: 'nextPage', tooltipText: 'Next Page', align: 'Center', click: nextClicked.bind(this) }, + { template: inputTemplate, tooltipText: 'Page Number', align: 'Center' }, + { template: ele, tooltipText: 'Page Number', align: 'Center' }, + { prefixIcon: 'e-pv-search-icon', tooltipText: 'Text Search', align: 'Right', click: searchClicked.bind(this) }, + { prefixIcon: 'e-pv-print-document-icon', tooltipText: 'Print', align: 'Right', click: printClicked.bind(this) }, + { prefixIcon: 'e-pv-download-document-icon', tooltipText: 'Download', align: 'Right', click: downloadClicked.bind(this) } + ] + }); + toolbarObj.appendTo('#topToolbar'); + let magnificationToolbar: Tool = new Tool({ + items: [ + { prefixIcon: 'e-pv-fit-page-icon', id: 'fitPage', tooltipText: 'Fit to page', click: pageFitClicked.bind(this) }, + { prefixIcon: 'e-pv-zoom-in-icon', id: 'zoomIn', tooltipText: 'Zoom in', click: zoomInClicked.bind(this) }, + { prefixIcon: 'e-pv-zoom-out-icon', id: 'zoomOut', tooltipText: 'Zoom out', click: zoomOutClicked.bind(this) }, + ] + }); + magnificationToolbar.appendTo('#magnificationToolbar'); + viewer = new PdfViewer({ + enableToolbar: false, + enableThumbnail: false, + documentPath: 'https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf', + serviceUrl: 'https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/' + }); + viewer.appendTo('#pdfViewer'); + document.getElementById('fileUpload').addEventListener('change', readFile, false); + currentPageBox = document.getElementById('currentPage'); + (currentPageBox as HTMLInputElement).value = '1'; + searchInput = document.getElementById('searchInput'); + bookmarkPopup = new Dialog({ + showCloseIcon: true, header: 'Bookmarks', closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), + content: '
', + buttons: [{ + buttonModel: {}, + }], position: { X: 'left', Y: 'top' }, cssClass: 'e-bookmark-popup', beforeClose: (): void => { + isBookmarkOpen = false; + } + }); + bookmarkPopup.appendTo('#popup'); + + textSearchPopup = new Dialog({ + showCloseIcon: false, closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), + buttons: [{ + buttonModel: {}, + }], position: { X: 'right', Y: 'top' }, cssClass: 'e-text-search-popup', + }); + textSearchPopup.appendTo('#textSearchBox'); + + let previousSearch: Button = new Button({ iconCss: 'e-pv-previous-search' }); + previousSearch.appendTo('#previousSearch'); + + let nextSearch: Button = new Button({ iconCss: 'e-pv-next-search-btn' }); + nextSearch.appendTo('#nextSearch'); + + let matchCaseCheck: CheckBox = new CheckBox({ label: 'Match case', change: checkBoxChanged }); + matchCaseCheck.appendTo('#matchCase'); + + viewer.pageChange = (args: IPageChangeEventArgs): void => { + (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); + updatePageNavigation(); + }; + + viewer.documentLoad = (args: ILoadEventArgs): void => { + document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; + updatePageNavigation(); + }; + searchButton = document.getElementById('searchBtn'); + searchInput.addEventListener('focus', () => { searchInput.parentElement.classList.add('e-input-focus'); }); + searchInput.addEventListener('blur', () => { searchInput.parentElement.classList.remove('e-input-focus'); }); + searchInput.addEventListener('keypress', searchInputKeypressed); + document.getElementById('previousSearch').addEventListener('click', previousSearchClicked); + document.getElementById('nextSearch').addEventListener('click', nextSearchClicked); + currentPageBox.addEventListener('keypress', onCurrentPageBoxKeypress); + currentPageBox.addEventListener('click', onCurrentPageBoxClicked); + searchButton.addEventListener('click', searchClickHandler); + bookmarkPopup.hide(); + textSearchPopup.hide(); + enableNextButton(false); + enablePrevButton(false); + +``` +{% endhighlight %} +{% endtabs %} + +Sample: +[https://document.syncfusion.com/demos/pdf-viewer/react/#/tailwind3/pdfviewer/custom-toolbar.html](https://document.syncfusion.com/demos/pdf-viewer/react/#/tailwind3/pdfviewer/custom-toolbar.html) + + diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md new file mode 100644 index 000000000..2cce2c51f --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md @@ -0,0 +1,170 @@ +--- +layout: post +title: Form Designer Toolbar Customization in React PDF Viewer Component | Syncfusion +description: Learn here all about form designer toolbar customization in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Form Designer Toolbar Customization + +The form designer toolbar can be customized by showing or hiding default items and by controlling the order in which the items appear. + +## Show or hide the form designer toolbar + +Show or hide the form designer toolbar programmatically during initialization or at runtime. + +Use the [EnableFormDesigner](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/pdfViewerModel/#enableformdesigner) property or the [showFormDesignerToolbar](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbar/#showformdesignertoolbar) method to toggle visibility. + +The following code snippet explains how to show or hide the toolbar using the `EnableFormDesigner` property. + +{% tabs %} +{% highlight ts tabtitle="index.ts" %} +import React, { useRef } from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, + ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +const App = () => { + const pdfviewer = useRef(null); + + return ( + + + + ); +}; + +export default App; + +{% endhighlight %} +{% highlight html tabtitle="index.html" %} + + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + + +{% endhighlight %} +{% endtabs %} + +## How to customize the form designer toolbar + +Choose which tools appear and control their order in the form designer toolbar. + +Use [`PdfViewerToolbarSettings`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbarSettings/) with the [`FormDesignerToolbarItems`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbarSettings/#formdesignertoolbaritems) property to choose which form design tools are available. The property accepts a list of [`FormDesignerToolbarItem`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/formDesignerToolbarItem/) values. The items you include are both displayed and rendered in the order listed; any items you omit are hidden. This provides a streamlined, user-friendly form design experience across devices. + +The following example demonstrates how to customize the form designer toolbar by configuring specific tools using `FormDesignerToolbarItem`. + +{% tabs %} +{% highlight ts tabtitle="index.ts" %} +import React, { useRef } from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, + ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +const App = () => { + const pdfviewer = useRef(null); + + return ( + + + + ); +}; + +export default App; + +{% endhighlight %} +{% highlight html tabtitle="index.html" %} + + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md new file mode 100644 index 000000000..4096df9b9 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md @@ -0,0 +1,185 @@ +--- +layout: post +title: Mobile Toolbar Interface in React Pdfviewer control | Syncfusion +description: Learn All About the Mobile Toolbar Interface in Syncfusion React Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- +# Mobile Toolbar Interface in React Pdfviewer control + +The Mobile PDF Viewer offers a variety of features for viewing, searching, annotating, and managing PDF documents on mobile devices. It includes essential tools like search, download, bookmarking, annotation, and page organization. Users also have the option to enable desktop toolbar features in mobile mode, providing a more extensive set of actions. + +## Mobile Mode Toolbar Configuration +In mobile mode, the toolbar is optimized for ease of use on small screens, presenting users with the most common actions for interacting with a PDF document. Below are the key features available in mobile mode: + +![Mobile toolbar with primary PDF interaction options](../images/mobileToolbar.png) + +### Main Toolbar Options: + +**OpenOption:** Tap to load a PDF document. + +**SearchOption:** Access the search bar to find text within the document. + +![Search bar displayed for finding text within a PDF](../images/searchOption.png) + +**UndoRedoTool:** Quickly undo or redo any annotations made. + +**OrganizePagesTool:** Enable or disable page organization features to modify document pages. + +![Page organization interface for modifying PDF pages](../images/organizePages.png) + +**AnnotationEditTool:** Activate or deactivate annotation editing to add or modify annotations. + +![Annotation editing toolbar allowing users to add, edit, or delete annotations on a PDF](../images/editAnnotation.png) + + +N> In mobile mode, the annotation toolbar is conveniently displayed at the bottom of the viewer. + +### More Options Menu: +When you open the "more options" menu, you will see additional actions such as: + +**DownloadOption:** Tap to download the currently opened PDF document. + +**BookmarkOption:** Allows you to view bookmarks within the document. + +![More options menu showing additional actions like download and bookmark](../images/more-options.png) + +## Enabling Desktop Mode in Mobile + +The desktop version of the toolbar can be enabled on mobile devices by using the `enableDesktopMode` API. This API allows you to bring desktop-like features to the mobile PDF viewer, providing access to additional toolbar actions that are typically available on desktop platforms. + +### Steps to Enable Desktop Mode: + +**Step 1:** Set `enableDesktopMode` to true in the API configuration. + +**Step 2:** This will replace the mobile toolbar with the desktop toolbar layout, allowing access to more actions and controls. + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + let pdfviewer: PdfViewerComponent | null; + return ( +
+ { pdfviewer = scope; }} + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + enableDesktopMode={true} + height="640px" + > + + +
+ ); +} + +export default App; + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + let pdfviewer: PdfViewerComponent | null; + return ( +
+ { pdfviewer = scope; }} + serviceUrl='https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/' + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + enableDesktopMode={true} + height="640px" + > + + +
+ ); +} + +export default App; + +{% endhighlight %} +{% endtabs %} + +## Enable Scrolling in Desktop Mode with Touch Gestures + +To ensure smooth scrolling of PDF documents on a mobile device in desktop mode, it is important to enable touch gesture scrolling. You can achieve this by setting the `enableTextSelection` option to **false**. + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + let pdfviewer: PdfViewerComponent | null; + return ( +
+ { pdfviewer = scope; }} + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + enableDesktopMode={true} + enableTextSelection={false} + height="640px" + > + + +
+ ); +} + +export default App; + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + let pdfviewer: PdfViewerComponent | null; + return ( +
+ { pdfviewer = scope; }} + serviceUrl='https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/' + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + enableDesktopMode={true} + enableTextSelection={false} + height="640px" + > + + +
+ ); +} + +export default App; + +{% endhighlight %} +{% endtabs %} + +## Print Option Not Available + +The Print option is not available in mobile mode by default. However, if you need to use the print functionality on mobile devices, we recommend enabling the desktop toolbar on mobile using the `enableDesktopMode` API. + +### How to Use Print on Mobile: + +**Enable Desktop Mode:** Set `enableDesktopMode` to true to load the desktop version of the toolbar on your mobile device. + +**Print Option:** Once desktop mode is enabled, the print option will be available, allowing you to print the document directly from your mobile device. + +N> In mobile mode, the print functionality will not be available unless desktop mode is enabled. \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/primary-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/primary-toolbar-customization.md new file mode 100644 index 000000000..3c65c11bb --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/primary-toolbar-customization.md @@ -0,0 +1,154 @@ +--- +layout: post +title: Primary Toolbar Customization in React PDF Viewer Component | Syncfusion +description: Learn here all about primary toolbar customization in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Primary Toolbar Customization in PDF Viewer Component + +The primary toolbar of the PDF Viewer can be customized by rearranging existing items, disabling default items, and adding custom items. New items can be placed at specific index positions among the existing items. + +## Show or hide the primary toolbar + +Toggle the built-in primary toolbar to create custom toolbar experiences or simplify the UI. In scenarios where a custom toolbar is required, the built-in toolbar can be hidden. Use the [enableToolbar](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/pdfViewerModel/#enabletoolbar) property or the [showToolbar](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbar/#showtoolbar) method to show or hide the primary toolbar. + +Show or hide the toolbar using the `enableToolbar` property: + +{% tabs %} +{% highlight ts tabtitle="index.tsx" %} +import React, { useRef } from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = useRef(null); + + return ( + + + + ); +} + +export default App; +{% endhighlight %} +{% highlight html tabtitle="index.html" %} + + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+
+
+
+ + + +{% endhighlight %} +{% endtabs %} + +The following code snippet explains how to show or hide the toolbar using the `showToolbar` method. + +{% tabs %} +{% highlight ts tabtitle="index.tsx" %} +import React, { useEffect, useRef } from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = useRef(null); + + useEffect(() => { + const btn = document.getElementById('set'); + const handler = () => { + pdfviewer.current?.toolbar.showToolbar(false); + }; + btn?.addEventListener('click', handler); + return () => btn?.removeEventListener('click', handler); + }, []); + + return ( + + + + ); +} + +export default App; +{% endhighlight %} +{% highlight html tabtitle="index.html" %} + + + + + + EJ2 PDF Viewer + + + + + + + + + + + + + + + + + + + + + +
Loading....
+ +
+
+
+ + + +{% endhighlight %} +{% endtabs %} From e3e178f89c35eec3aaf10850c8f1818fd1430302 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 22 Oct 2025 09:58:53 +0530 Subject: [PATCH 15/47] 984044: organize module --- .../organize-pdf/organize-page-mobile-view.md | 37 ++++ .../react/organize-pdf/organize-pdf-events.md | 166 ++++++++++++++ .../programmatic-support-for-organize-page.md | 198 +++++++++++++++++ .../organize-pdf/toolbar-organize-page.md | 202 ++++++++++++++++++ .../ui-interactions-organize-page.md | 97 +++++++++ 5 files changed, 700 insertions(+) create mode 100644 Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-page-mobile-view.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/organize-pdf/programmatic-support-for-organize-page.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/organize-pdf/ui-interactions-organize-page.md diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-page-mobile-view.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-page-mobile-view.md new file mode 100644 index 000000000..c7b19756e --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-page-mobile-view.md @@ -0,0 +1,37 @@ +--- +layout: post +title: Organize Pages in Mobile PDF Viewer | Syncfusion +description: Learn how to organize pages in the mobile PDF viewer, including rotating, rearranging, inserting, deleting, and copying pages on mobile devices. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Organize Pages in Mobile PDF Viewer + +The PDF Viewer offers a mobile-responsive layout for the `Organize Pages` feature, ensuring a seamless experience on smaller devices. When viewed on a mobile device, the toolbar and navigation elements adapt to the screen size, providing easy access to all page management tools. + +## Mobile-Friendly Toolbar + +In the mobile view, the `Organize Pages` toolbar is displayed at the bottom of the screen for easy one-handed access. The toolbar includes the same set of tools as the desktop version, such as insert, delete, and rotate, but with a mobile-optimized layout. + +## Context Menu for Page Operations + +To perform actions on a page thumbnail, tap and hold on the thumbnail to open a context menu. This menu contains all the available page operations: + +* **Rotate Clockwise**: Rotate the selected page 90 degrees clockwise. +* **Rotate Counter-Clockwise**: Rotate the selected page 90 degrees counter-clockwise. +* **Insert Page**: Insert a new page. +* **Copy Page**: Duplicate the selected page. +* **Delete Page**: Remove the selected page. +* **Select All**: Select all pages in the document. + + +![Alt text](../images/Context-Menu-Page-Operations1.png) + +## Rearranging Pages on Mobile + +To rearrange pages, tap and hold a page thumbnail to select it, then drag it to the desired position. A blue line will indicate the drop location. + +By providing a mobile-friendly interface, the PDF Viewer ensures that users can efficiently manage their PDF documents from any device, anywhere. \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md new file mode 100644 index 000000000..cf49226ad --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md @@ -0,0 +1,166 @@ +--- +layout: post +title: Organize Pages Events in PDF Viewer | Syncfusion +description: Learn how to organize pages Events in the PDF viewer, including rotating, rearranging, inserting, deleting, and copying pages on mobile devices. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Organize Pages Events in PDF Viewer + +The PDF Viewer provides events to track and respond to actions within the page organizer, allowing for the customization of page manipulation features. + +## pageOrganizerSaveAs + +The `pageOrganizerSaveAs` event is triggered when a save action is performed in the page organizer. + +- Occurs when the **Save as** button in the page organizer toolbar is clicked after modifying the document structure. + +The event arguments provide the necessary information about the save event: + +- `fileName`: The name of the currently loaded PDF document. +- `downloadDocument`: A base64 string of the modified PDF document data. +- `cancel`: A boolean that, when set to `true`, prevents the default save action from proceeding. + +```typescript +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Annotation, + FormDesigner, + FormFields, + PageOrganizer, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +export class App extends React.Component { + constructor(props) { + super(props); + this.pdfviewer = React.createRef(); + } + + render() { + return ( +
+ { + console.log('File Name is' + args.fileName); + console.log('Document data' + args.downloadDocument); + }} + style={{ height: '640px' }} + > + + +
+ ); + } +} + +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); +``` + +## pageOrganizerZoomChanged + +The `pageOrganizerZoomChanged` event is triggered when the zoom level of the page organizer is changed. + +- This event is fired when the user interacts with the zoom slider in the page organizer. The `showImageZoomingSlider` property in `pageOrganizerSettings` must be set to `true` for the slider to be visible. + + +Event arguments: + +- `previousZoomValue`: The previous zoom value. +- `currentZoomValue`: The current zoom value. + +```typescript +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { + PdfViewerComponent, + Toolbar, + Magnification, + Navigation, + LinkAnnotation, + ThumbnailView, + BookmarkView, + TextSelection, + Annotation, + FormDesigner, + FormFields, + PageOrganizer, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +export class App extends React.Component { + constructor(props) { + super(props); + this.pdfviewer = React.createRef(); + } + + render() { + return ( +
+ { + console.log('Previous Zoom Value is' + args.previousZoom); + console.log('Current Zoom Value is' + args.currentZoom); + }} + pageOrganizerSettings={{ showImageZoomingSlider: true }} + style={{ height: '640px' }} + > + + +
+ ); + } +} + +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); +``` + +## Related event documentation + +- Overall Viewer events: [Event](../event.md) +- Annotation events: [Annotation events](../annotations/annotation-event.md) +- Form designer events: [Form field events](../form-designer/form-field-events.md) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/programmatic-support-for-organize-page.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/programmatic-support-for-organize-page.md new file mode 100644 index 000000000..af1bc1078 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/programmatic-support-for-organize-page.md @@ -0,0 +1,198 @@ +--- +layout: post +title: Programmatic Support for Organize Pages in React PDF Viewer control | Syncfusion +description: Learn here all about Programmatic Support for Organize Pages in Syncfusion React PDF Viewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Programmatic Support for Organize Pages in React PDF Viewer control + +The PDF Viewer provides comprehensive programmatic support for organizing pages, allowing you to integrate and manage PDF functionalities directly within your application. This section details the available APIs to enable, control, and interact with the page organization features. + +## Enable or disable the page organizer + +The page organizer feature can be enabled or disabled using the `enablePageOrganizer` property. By default, this feature is enabled. + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +export default function App() { + return ( + + + + ); +} + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +export default function App() { + return ( + + + + ); +} + +{% endhighlight %} +{% endtabs %} + +## Open the page organizer on document load + +You can control whether the page organizer dialog opens automatically when a document is loaded using the `isPageOrganizerOpen` property. The default value is `false`. + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +export default function App() { + return ( + + + + ); +} + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +export default function App() { + return ( + + + + ); +} + +{% endhighlight %} +{% endtabs %} + +## Customize page organizer settings + +The `pageOrganizerSettings` API allows you to customize the page management functionalities. You can enable or disable actions such as deleting, inserting, rotating, copying, importing, and rearranging pages, as well as configure thumbnail zoom settings. By default, all actions are enabled, and standard zoom settings are applied. + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +export default function App() { + const pageOrganizerSettings = { canDelete: true, canInsert: true, canRotate: true, canCopy: true, canRearrange: true, canImport: true, imageZoom: 1, showImageZoomingSlider: true, imageZoomMin: 1, imageZoomMax: 5 }; + return ( + + + + ); +} + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +export default function App() { + const pageOrganizerSettings = { canDelete: true, canInsert: true, canRotate: true, canCopy: true, canRearrange: true, canImport: true, imageZoom: 1, showImageZoomingSlider: true, imageZoomMin: 1, imageZoomMax: 5 }; + return ( + + + + ); +} + +{% endhighlight %} +{% endtabs %} + +## Open the page organizer dialog + +The `openPageOrganizer` method programmatically opens the page organizer dialog, providing access to page management tools. + +```ts +import React from 'react'; +import { PdfViewerComponent, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; + +let viewer: PdfViewerComponent | null; + +export default function App() { + return ( +
+ + { viewer = scope; }}> + {/* other props and Inject as shown above */} + +
+ ); +} +``` + +## Close the page organizer dialog + +The `closePageOrganizer` method programmatically closes the page organizer dialog. + +```ts +import React from 'react'; +import { PdfViewerComponent } from '@syncfusion/ej2-react-pdfviewer'; + +let viewer: PdfViewerComponent | null; + +export default function App() { + return ( +
+ + { viewer = scope; }}> + {/* other props and Inject as shown above */} + +
+ ); +} +``` diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md new file mode 100644 index 000000000..1bac834ee --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md @@ -0,0 +1,202 @@ +--- +layout: post +title: Organize Page Toolbar Customization in React PDF Viewer control | Syncfusion +description: Learn here all about Organize Page Toolbar Customization in Syncfusion React PDF Viewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Organize Page Toolbar Customization in React PDF Viewer control + +The PDF Viewer allows you to customize the toolbar for the organize pages feature, enabling you to show or hide specific tools based on your application's requirements. The `pageOrganizerSettings` API provides properties to control the visibility of each tool in the organize pages dialog. + +## Show or hide the insert option + +The `canInsert` property controls the visibility of the insert tool. When set to `false`, the insert tool will be hidden from the toolbar. + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% endtabs %} + +## Show or hide the delete option + +The `canDelete` property controls the visibility of the delete tool. When set to `false`, the delete tool will be hidden. + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% endtabs %} + +## Show or hide the rotate option + +The `canRotate` property controls the visibility of the rotate tool. When set to `false`, the rotate tool will be hidden. + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + const pdfviewer = React.useRef(null); + return ( + + + + ); +} + +const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); +root.render(); + +{% endhighlight %} +{% endtabs %} + +## Show or hide the copy option + +The `canCopy` property controls the visibility of the copy tool. When set to `false`, the copy tool will be hidden. + +## Show or hide the import option + +The `canImport` property controls the visibility of the import tool. When set to `false`, the import tool will be hidden. + +## Show or hide the rearrange option + +The `canRearrange` property controls the ability to rearrange pages. When set to `false`, pages cannot be rearranged. \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/ui-interactions-organize-page.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/ui-interactions-organize-page.md new file mode 100644 index 000000000..4be6494b7 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/ui-interactions-organize-page.md @@ -0,0 +1,97 @@ +--- +layout: post +title: UI Interactions for Organizing Pages in React PDF Viewer | Syncfusion +description: Learn about the UI interactions for organizing pages in the Syncfusion React PDF Viewer control, including rotating, rearranging, inserting, deleting, and copying pages. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# UI Interactions for Organizing Pages in React PDF Viewer + +The PDF Viewer provides an intuitive user interface for managing and organizing pages within a PDF document. This section covers the various UI interactions available in the `Organize Pages` dialog. + + + +## Rotating PDF pages + +You can adjust the orientation of pages to ensure proper alignment. The rotate icon in the Organize Pages dialog provides the following options: + +* **Rotate clockwise**: Rotate the selected pages 90 degrees clockwise. +* **Rotate counter-clockwise**: Rotate the selected pages 90 degrees counter-clockwise. + +![Alt text](../images/rotate-rearrange.gif) + +## Rearranging PDF pages + +Easily change the sequence of pages using the drag-and-drop method: + +* **Drag and drop**: Click and drag a page thumbnail to the desired position within the document, then release it to reorder the pages. + +![Alt text](../images/rotate-rearrange.gif) + +## Inserting new pages + +Effortlessly add blank pages to your document with the following options: + +* **Insert blank page left**: Insert a blank page to the left of the selected page. +* **Insert blank page right**: Insert a blank page to the right of the selected page. + +![Alt text](../images/insert-delete-copy.gif) + +## Deleting PDF pages + +Remove unwanted pages from your document with these steps: + +1. **Select pages to delete**: Click on the thumbnails of the pages you wish to remove. You can select multiple pages at once. +2. **Delete selected pages**: Use the delete option in the Organize Pages pane to remove the selected pages from the document. + +![Alt text](../images/insert-delete-copy.gif) + +## Copying PDF pages + +Duplicate pages within your PDF document effortlessly: + +* **Select pages to copy**: Click on the page thumbnails you wish to duplicate. +* **Copy selected pages**: Use the copy option to create duplicates. The copied pages will be added to the right of the selected pages. + +![Alt text](../images/insert-delete-copy.gif) + +## Importing a PDF document + +Seamlessly import another PDF document into your current document: + +* **Import PDF document**: Click the **Import Document** button to select and import a PDF. The imported document will be inserted as a thumbnail. If a page is selected, the thumbnail will be added to its right. If no pages are selected, it will be added as the first page. The imported PDF will be merged with the current document upon saving. + +![Alt text](../images/import.gif) + +## Selecting all pages + +Select all pages simultaneously to perform bulk operations, such as rotating or deleting all pages at once. + +![Alt text](../images/selectall.png) + +## Zooming page thumbnails + +Adjust the size of page thumbnails for better visibility and precision: + +* Use the zoom slider to increase or decrease the thumbnail size. +* Zoom in to see more detail on each page. +* Zoom out to view more pages at once. + +![Alt text](../images/zoomOrganize.png) + +## Real-time updates and saving + +All changes are reflected instantly in the Organize Pages dialog. Click the **Save** button to apply the modifications to the document. Use the **Save As** feature to download a new version of the PDF with your changes. + +## Keyboard shortcuts + +The following keyboard shortcuts are available in the Organize Pages dialog: + +* **Ctrl+Z**: Undo the last action. +* **Ctrl+Y**: Redo the last undone action. +* **Ctrl+Scroll**: Zoom in and out on page thumbnails for better visibility. + +![Alt text](../images/undo-redo.png) \ No newline at end of file From a5c8c1944b73a6ac92d85e1b7e9ddd2b392bdb55 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 22 Oct 2025 10:01:25 +0530 Subject: [PATCH 16/47] 984044: save folder --- .../PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md | 2 +- .../react/save-pdf-file/to-dropbox-cloud-file-storage.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md index 66b2f94f7..cc55fc681 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md @@ -159,7 +159,7 @@ public PdfViewerController(IWebHostEnvironment hostingEnvironment, IMemoryCache } ``` -5. Modify the [Download()](https://ej2.syncfusion.com/documentation/api/pdfviewer/#download) method to save the downloaded PDF file to the AWS S3 bucket. +5. Modify the [Download()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#download) method to save the downloaded PDF file to the AWS S3 bucket. ```csharp diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md index 6a2de8b6a..baab0f783 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md @@ -149,7 +149,7 @@ public PdfViewerController(IWebHostEnvironment hostingEnvironment, IMemoryCache } ``` -5. Modify the [Download()](https://ej2.syncfusion.com/documentation/api/pdfviewer/#download) method to save the downloaded PDF file to the Dropbox folder. +5. Modify the [Download()](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#download) method to save the downloaded PDF file to the Dropbox folder. ```csharp From f8504dcd26952dc02997417860a9de4351df23de Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 22 Oct 2025 10:07:19 +0530 Subject: [PATCH 17/47] 984044: recorrect --- .../react/annotation/annotation-event.md | 80 +++++++++++++++---- .../PDF-Viewer/react/annotation/comments.md | 3 +- .../annotation/line-angle-constraints.md | 2 +- 3 files changed, 67 insertions(+), 18 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md index c98a8019a..4e8f959a3 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md @@ -230,7 +230,10 @@ The following example illustrates how to handle the `annotationMouseLeave` event ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -302,7 +305,10 @@ The following example illustrates how to handle the `annotationMouseover` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -374,7 +380,10 @@ The following example illustrates how to handle the `annotationMove` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -446,7 +455,10 @@ The following example illustrates how to handle the `annotationMoving` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -518,7 +530,10 @@ The following example illustrates how to handle the `annotationPropertiesChange` ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -591,7 +606,10 @@ The following example illustrates how to handle the `annotationRemove` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -663,7 +681,10 @@ The following example illustrates how to handle the `annotationResize` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -735,7 +756,10 @@ The following example illustrates how to handle the `annotationSelect` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -807,7 +831,10 @@ The following example illustrates how to handle the `annotationUnselect` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -879,7 +906,10 @@ The following example illustrates how to handle the `beforeAddFreeText` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -955,7 +985,10 @@ The following example illustrates how to handle the `addSignature` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -1027,7 +1060,10 @@ The following example illustrates how to handle the `removeSignature` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -1099,7 +1135,10 @@ The following example illustrates how to handle the `resizeSignature` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -1171,7 +1210,10 @@ The following example illustrates how to handle the `signaturePropertiesChange` ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -1243,7 +1285,10 @@ The following example illustrates how to handle the `signatureSelect` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; @@ -1315,7 +1360,10 @@ The following example illustrates how to handle the `signatureUnselect` event. ``` -```jsx +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +{% raw %} + import * as React from 'react'; import { PdfViewerComponent, Inject, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, Annotation, FormDesigner, FormFields, PageOrganizer } from '@syncfusion/ej2-react-pdfviewer'; diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/comments.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/comments.md index 73b574ba6..034ebeadc 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/comments.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/comments.md @@ -24,7 +24,8 @@ The PDF Viewer control provides options to add, edit, and delete comments for th ## Adding a comment to the annotation -Annotation comments replies, and status can be managed to the PDF document using the comment panel. + +Annotation comments, replies, and status can be managed to the PDF document using the comment panel. ### Comment panel diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md index da61f44f7..67eb9737c 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md @@ -114,4 +114,4 @@ When modifying existing line annotations using selectors: [View a sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to) -N> Refer to the React PDF Viewer [feature tour](https://www.syncfusion.com/pdf-viewer-sdk/javascript-pdf-viewer) for feature highlights. Explore the [React PDF Viewer examples](https://github.com/SyncfusionExamples/react-pdf-viewer-examples) to learn how to render and configure the PDF Viewer. +N> Refer to the React PDF Viewer [feature tour](https://www.syncfusion.com/pdf-viewer-sdk/react-pdf-viewer) for feature highlights. Explore the [React PDF Viewer examples](https://github.com/SyncfusionExamples/react-pdf-viewer-examples) to learn how to render and configure the PDF Viewer. From a3d29de900d140f0a069abc5e0a9c1f2f64f260d Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 22 Oct 2025 11:41:59 +0530 Subject: [PATCH 18/47] 984044: How to New commit --- .../react/how-to/add-header-value.md | 32 ++++++++++ .../react/how-to/annotation-selectors.md | 32 ++++++++++ ...e-author-name-using-annotation-settings.md | 58 +++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 Document-Processing/PDF/PDF-Viewer/react/how-to/add-header-value.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md create mode 100644 Document-Processing/PDF/PDF-Viewer/react/how-to/change-author-name-using-annotation-settings.md diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-header-value.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-header-value.md new file mode 100644 index 000000000..a271af197 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-header-value.md @@ -0,0 +1,32 @@ +--- +layout: post +title: Add header values to AJAX requests in React PDF Viewer | Syncfusion +description: Learn how to include custom headers in PDF Viewer AJAX requests using ajaxRequestSettings and ajaxHeaders in the React PDF Viewer component. +platform: document-processing +control: PDF Viewer +documentation: ug +--- + +# Add header values in the React PDF Viewer + +Use the ajaxHeaders property in the PDF Viewer’s [ajaxRequestSettings](https://ej2.syncfusion.com/documentation/api/pdfviewer/#ajaxrequestsettings) to include custom headers with each AJAX request. + +Example: Add a custom Authorization header using ajaxRequestSettings + +```ts + +viewer.ajaxRequestSettings = { + ajaxHeaders: [ + { + headerName: "Authorization", + + headerValue: "Bearer 64565dfgfdsjweiuvbiuyhiueygf" + } + ], + + withCredentials: false +}; + +``` + +Find the sample [how to add custom headers in AjaxRequestSettings](https://stackblitz.com/edit/react-dnkbqh66-tnifjnlb?file=package.json,index.js) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md new file mode 100644 index 000000000..3d1b5ccca --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md @@ -0,0 +1,32 @@ +--- +layout: post +title: Customize annotation selectors in React PDF Viewer +description: Learn how to customize annotation selectors in the React PDF Viewer component using annotationSelectorSettings with examples. +platform: document-processing +control: PDF Viewer +documentation: ug +--- + +# Customize annotation selectors in TypeScript PDF Viewer + +Customize the annotation selector using the [annotationSelectorSettings](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/#annotationselectorsettings) property of the PDF Viewer. + +Example: Customize the selector of a shape annotation + +``` + + + +``` + +```ts + +document.getElementById('annotationSelector').addEventListener('click', () => { + viewer.rectangleSettings.annotationSelectorSettings.resizerShape = 'Circle'; + viewer.annotationModule.editAnnotation(viewer.annotationCollection[0]); +}); + +``` + +Sample: How to customize the annotation selector +https://stackblitz.com/edit/react-dnkbqh66-tsqcqdcx?file=index.js,index.html \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/change-author-name-using-annotation-settings.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/change-author-name-using-annotation-settings.md new file mode 100644 index 000000000..e0bd095e9 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/change-author-name-using-annotation-settings.md @@ -0,0 +1,58 @@ +--- +layout: post +title: Change author name using annotation settings in React PDF Viewer | Syncfusion +description: Learn how to change the author name and related annotation settings using the annotationSettings API in the React PDF Viewer. +platform: document-processing +control: PDF Viewer +documentation: ug +domainurl: ##DomainURL## +--- + +# Change author name using annotation settings in React PDF Viewer + +The PDF Viewer allows customizing individual annotation settings using the annotationSettings API, which exposes properties common to all annotations. + +API name: annotationSettings + +| Property Name | Data type & Default Value | Description | +|---|---|---| +| author | String ("Guest") | Specifies the author of the annotation. | +| minWidth | Number (0) | Specifies the minimum width of the annotation. | +| maxWidth | Number (0) | Specifies the maximum width of the annotation. | +| minHeight | Number (0) | Specifies the minimum height of the annotation. | +| maxHeight | Number (0) | Specifies the maximum height of the annotation. | +| isLock | Boolean (false) | Specifies whether the annotation is locked. If true, the annotation cannot be selected. | +| isPrint | Boolean (true) | Specifies whether the annotation is included in print actions. | +| isDownload | Boolean (true) | Specifies whether the annotation is included in download actions. | +| Free Text Settings | +| allowOnlyTextInput | Boolean (false) | Specifies text-only mode for free text annotations. If true, moving or resizing is disabled. | + +Change the author name and other properties using the annotationSettings API as shown below. + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} +```ts +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, Print, Annotation, FormFields } from "../src/index"; + +PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, Print, Annotation, FormFields); +let viewer: PdfViewer = new PdfViewer(); +viewer.load('https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', null); +viewer.annotationSettings = { author: 'syncfusion', minHeight: 30, maxHeight: 500, minWidth: 30, maxWidth: 500, isLock: false, isPrint: true, isDownload: true }; +viewer.freeTextSettings = { allowTextOnly : true }; +viewer.appendTo("#pdfViewer"); +``` +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} +```ts +import { PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, Print, Annotation, FormFields } from "../src/index"; + +PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, Print, Annotation, FormFields); +let viewer: PdfViewer = new PdfViewer(); +viewer.serviceUrl = "https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/"; +viewer.load('https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', null); +viewer.annotationSettings = { author: 'syncfusion', minHeight: 30, maxHeight: 500, minWidth: 30, maxWidth: 500, isLock: false, isPrint: true, isDownload: true }; +viewer.freeTextSettings = { allowTextOnly : true }; +viewer.appendTo("#pdfViewer"); +``` +{% endhighlight %} +{% endtabs %} \ No newline at end of file From 8a7b3054259ea3f82a4ea9dc121965399bafbf1f Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 22 Oct 2025 11:46:14 +0530 Subject: [PATCH 19/47] 984044: unwanted change --- Document-Processing/PDF/PDF-Viewer/angular/accessibility.md | 1 - 1 file changed, 1 deletion(-) diff --git a/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md b/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md index f08628db7..685ded52b 100644 --- a/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md +++ b/Document-Processing/PDF/PDF-Viewer/angular/accessibility.md @@ -10,7 +10,6 @@ domainurl: ##DomainURL## # Accessibility in Syncfusion® Angular PDF Viewer components - The PDF Viewer component followed the accessibility guidelines and standards, including [ADA](https://www.ada.gov/), [Section 508](https://www.section508.gov/), [WCAG 2.2](https://www.w3.org/TR/WCAG22/) standards, and [WCAG roles](https://www.w3.org/TR/wai-aria/#roles) that are commonly used to evaluate accessibility. The accessibility compliance for the PDF Viewer component is outlined below. From d6853ebd92a019c3975e40912c95afe58c49b00f Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 22 Oct 2025 11:51:31 +0530 Subject: [PATCH 20/47] 984044: remove designer file --- .../programmatically-work-with-form-field.md | 112 ------------------ .../user-interaction-with-form-fields.md | 111 ----------------- 2 files changed, 223 deletions(-) delete mode 100644 Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md delete mode 100644 Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md diff --git a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md b/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md deleted file mode 100644 index dd6c5e100..000000000 --- a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -layout: post -title: Programmatically work with form field in Angular Pdfviewer component | Syncfusion -description: Learn here all about Programmatically work with form field in Syncfusion Angular Pdfviewer component of Syncfusion Essential JS 2 and more. -platform: document-processing -control: Programmatically work with form field -documentation: ug -domainurl: ##DomainURL## ---- - -# Programmatically work with form field - -The PDF Viewer control provides the option to add, edit and delete the Form Fields. The Form Fields type supported by the PDF Viewer Control are: - - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField - -## Add a form field to PDF document programmatically - -Using addFormField method, the form fields can be added to the PDF document programmatically. We need to pass two parameters in this method. They are Form Field Type and Properties of Form Field Type. To add form field programmatically, Use the following code. - -{% tabs %} -{% highlight ts tabtitle="app.component.ts" %} -{% include code-snippet/pdfviewer/angular/addformfield-cs2/src/app.component.ts %} -{% endhighlight %} - -{% highlight ts tabtitle="main.ts" %} -{% include code-snippet/pdfviewer/angular/addformfield-cs2/src/main.ts %} -{% endhighlight %} -{% endtabs %} - -{% previewsample "Document-Processing/samples/pdfviewer/angular/addformfield-cs2/index.html" %} - -## Edit/Update form field programmatically - -Using updateFormField method, Form Field can be updated programmatically. We should get the Form Field object/Id from FormFieldCollections property that you would like to edit and pass it as a parameter to updateFormField method. The second parameter should be the properties that you would like to update for Form Field programmatically. We have updated the value and background Color properties of Textbox Form Field. - -{% tabs %} -{% highlight ts tabtitle="app.component.ts" %} -{% include code-snippet/pdfviewer/angular/updateformfield-cs2/src/app.component.ts %} -{% endhighlight %} - -{% highlight ts tabtitle="main.ts" %} -{% include code-snippet/pdfviewer/angular/updateformfield-cs2/src/main.ts %} -{% endhighlight %} -{% endtabs %} - -{% previewsample "Document-Processing/samples/pdfviewer/angular/updateformfield-cs2/index.html" %} - -## Delete form field programmatically - -Using deleteFormField method, the form field can be deleted programmatically. We should retrieve the Form Field object/Id from FormFieldCollections property that you would like to delete and pass it as a parameter to deleteFormField method. To delete a Form Field programmatically, use the following code. - -{% tabs %} -{% highlight ts tabtitle="app.component.ts" %} -{% include code-snippet/pdfviewer/angular/deleteformfield-cs2/src/app.component.ts %} -{% endhighlight %} - -{% highlight ts tabtitle="main.ts" %} -{% include code-snippet/pdfviewer/angular/deleteformfield-cs2/src/main.ts %} -{% endhighlight %} -{% endtabs %} - -{% previewsample "Document-Processing/samples/pdfviewer/angular/deleteformfield-cs2/index.html" %} - -## Saving the form fields - -When the download icon is selected on the toolbar, the Form Fields will be saved in the PDF document and this action will not affect the original document. Refer the below GIF for further reference. - -![Alt text](../images/saveformfield.gif) - -You can invoke download action using following code snippet. - -```html - - -``` - -## Printing the form fields - -When the print icon is selected on the toolbar, the PDF document will be printed along with the Form Fields added to the pages and this action will not affect the original document. Refer the below GIF for further reference. - -![Alt text](../images/printformfield.gif) - -You can invoke print action using the following code snippet., - -```html - - -``` - -## Open the existing PDF document - -We can open the already saved PDF document contains Form Fields in it by clicking the open icon in the toolbar. Refer the below GIF for further reference. - -![Alt text](../images/openexistingpdf.gif) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md deleted file mode 100644 index e3a7a5300..000000000 --- a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -layout: post -title: User interaction in Angular Pdfviewer component | Syncfusion -description: Learn here all about User interaction with form fields in Syncfusion Angular Pdfviewer component of Syncfusion Essential JS 2 and more. -platform: document-processing -control: User interaction with form fields -documentation: ug -domainurl: ##DomainURL## ---- - -# User interaction with form fields - -The PDF viewer control provides the option for interaction with Form Fields such as Drag and resize. you can draw a Form Field dynamically by clicking the Form Field icon on the toolbar and draw it in the PDF document. The Form Fields type supported by the PDF Viewer Control are: - - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField - -## Enable or Disable form designer toolbar - -We should inject FormDesigner module and set enableFormDesignerToolbar as true to enable the Form designer icon on the toolbar. By default, enableFormDesignerToolbar is set as true. Use the following code to inject FormDesigner module and to enable the enableFormDesignerToolbar property. - -```html -import { ViewChild } from '@angular/core'; -import { Component, OnInit } from '@angular/core'; -import { PdfViewerComponent, LinkAnnotationService, BookmarkViewService, - MagnificationService, ThumbnailViewService, ToolbarService, - NavigationService, TextSearchService, TextSelectionService, - PrintService, AnnotationService, FormDesignerService, - FormFieldsService - } from '@syncfusion/ej2-angular-pdfviewer'; - -@Component({ - selector: 'app-root', - // Specifies the template string for the PDF Viewer component. - template: `
- - -
`, - providers: [ LinkAnnotationService, BookmarkViewService, MagnificationService, - ThumbnailViewService, ToolbarService, NavigationService, - TextSearchService, TextSelectionService, PrintService, - AnnotationService, FormDesignerService, FormFieldsService] -}) -export class AppComponent implements OnInit { - @ViewChild('pdfviewer') - public pdfviewerControl: PdfViewerComponent; - public service: string = 'https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer'; - public document: string = 'FormDesigner.pdf'; - ngOnInit(): void { - } -} -``` - -## Add the form field dynamically - -Click the Form Field icon on the toolbar and then click on to the PDF document to draw a Form Field. Refer the below GIF for further reference. - -![Alt text](../images/addformfield.gif) - -## Drag the form field - -We provide options to drag the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. - -![Alt text](../images/dragformfield.gif) - -## Resize the form field - -We provide options to resize the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. - -![Alt text](../images/resizeformfield.gif) - -## Edit or Update the form field dynamically - -The properties of the Form Fields can be edited using the Form Field Properties window. It can be opened by selecting the Properties option in the context menu that appears on the right by clicking the Form Field object. Refer the below image for the properties available to customize the appearance of the Form Field. - -![Alt text](../images/generalproperties.png) - -![Alt text](../images/appearanceproperties.png) - -![Alt text](../images/dropdownproperties.png) - -## Clipboard operation with form field - -The PDF Viewer control supports the clipboard operations such as cut, copy and paste for Form Fields. You can right click on the Form Field object to view the context menu and select to the clipboard options that you would like to perform. Refer the below image for the options in the context menu. - -![Alt text](../images/clipboardformfield.png) - -## Undo and Redo - -We provided support to undo/redo the Form Field actions that are performed at runtime. Use the following code example to perform undo/redo actions. - -```html - - -``` \ No newline at end of file From dced1358929a895c4b5735af711a37cd8b653fc6 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Wed, 22 Oct 2025 16:22:36 +0530 Subject: [PATCH 21/47] 984044: unwanted angular change --- .../programmatically-work-with-form-field.md | 112 ++++++++++++++++++ .../user-interaction-with-form-fields.md | 112 ++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md create mode 100644 Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md diff --git a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md b/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md new file mode 100644 index 000000000..dd6c5e100 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md @@ -0,0 +1,112 @@ +--- +layout: post +title: Programmatically work with form field in Angular Pdfviewer component | Syncfusion +description: Learn here all about Programmatically work with form field in Syncfusion Angular Pdfviewer component of Syncfusion Essential JS 2 and more. +platform: document-processing +control: Programmatically work with form field +documentation: ug +domainurl: ##DomainURL## +--- + +# Programmatically work with form field + +The PDF Viewer control provides the option to add, edit and delete the Form Fields. The Form Fields type supported by the PDF Viewer Control are: + + * Textbox + * Password + * CheckBox + * RadioButton + * ListBox + * DropDown + * SignatureField + * InitialField + +## Add a form field to PDF document programmatically + +Using addFormField method, the form fields can be added to the PDF document programmatically. We need to pass two parameters in this method. They are Form Field Type and Properties of Form Field Type. To add form field programmatically, Use the following code. + +{% tabs %} +{% highlight ts tabtitle="app.component.ts" %} +{% include code-snippet/pdfviewer/angular/addformfield-cs2/src/app.component.ts %} +{% endhighlight %} + +{% highlight ts tabtitle="main.ts" %} +{% include code-snippet/pdfviewer/angular/addformfield-cs2/src/main.ts %} +{% endhighlight %} +{% endtabs %} + +{% previewsample "Document-Processing/samples/pdfviewer/angular/addformfield-cs2/index.html" %} + +## Edit/Update form field programmatically + +Using updateFormField method, Form Field can be updated programmatically. We should get the Form Field object/Id from FormFieldCollections property that you would like to edit and pass it as a parameter to updateFormField method. The second parameter should be the properties that you would like to update for Form Field programmatically. We have updated the value and background Color properties of Textbox Form Field. + +{% tabs %} +{% highlight ts tabtitle="app.component.ts" %} +{% include code-snippet/pdfviewer/angular/updateformfield-cs2/src/app.component.ts %} +{% endhighlight %} + +{% highlight ts tabtitle="main.ts" %} +{% include code-snippet/pdfviewer/angular/updateformfield-cs2/src/main.ts %} +{% endhighlight %} +{% endtabs %} + +{% previewsample "Document-Processing/samples/pdfviewer/angular/updateformfield-cs2/index.html" %} + +## Delete form field programmatically + +Using deleteFormField method, the form field can be deleted programmatically. We should retrieve the Form Field object/Id from FormFieldCollections property that you would like to delete and pass it as a parameter to deleteFormField method. To delete a Form Field programmatically, use the following code. + +{% tabs %} +{% highlight ts tabtitle="app.component.ts" %} +{% include code-snippet/pdfviewer/angular/deleteformfield-cs2/src/app.component.ts %} +{% endhighlight %} + +{% highlight ts tabtitle="main.ts" %} +{% include code-snippet/pdfviewer/angular/deleteformfield-cs2/src/main.ts %} +{% endhighlight %} +{% endtabs %} + +{% previewsample "Document-Processing/samples/pdfviewer/angular/deleteformfield-cs2/index.html" %} + +## Saving the form fields + +When the download icon is selected on the toolbar, the Form Fields will be saved in the PDF document and this action will not affect the original document. Refer the below GIF for further reference. + +![Alt text](../images/saveformfield.gif) + +You can invoke download action using following code snippet. + +```html + + +``` + +## Printing the form fields + +When the print icon is selected on the toolbar, the PDF document will be printed along with the Form Fields added to the pages and this action will not affect the original document. Refer the below GIF for further reference. + +![Alt text](../images/printformfield.gif) + +You can invoke print action using the following code snippet., + +```html + + +``` + +## Open the existing PDF document + +We can open the already saved PDF document contains Form Fields in it by clicking the open icon in the toolbar. Refer the below GIF for further reference. + +![Alt text](../images/openexistingpdf.gif) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md new file mode 100644 index 000000000..845fd37d2 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md @@ -0,0 +1,112 @@ + +--- +layout: post +title: User interaction in Angular Pdfviewer component | Syncfusion +description: Learn here all about User interaction with form fields in Syncfusion Angular Pdfviewer component of Syncfusion Essential JS 2 and more. +platform: document-processing +control: User interaction with form fields +documentation: ug +domainurl: ##DomainURL## +--- + +# User interaction with form fields + +The PDF viewer control provides the option for interaction with Form Fields such as Drag and resize. you can draw a Form Field dynamically by clicking the Form Field icon on the toolbar and draw it in the PDF document. The Form Fields type supported by the PDF Viewer Control are: + + * Textbox + * Password + * CheckBox + * RadioButton + * ListBox + * DropDown + * SignatureField + * InitialField + +## Enable or Disable form designer toolbar + +We should inject FormDesigner module and set enableFormDesignerToolbar as true to enable the Form designer icon on the toolbar. By default, enableFormDesignerToolbar is set as true. Use the following code to inject FormDesigner module and to enable the enableFormDesignerToolbar property. + +```html +import { ViewChild } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { PdfViewerComponent, LinkAnnotationService, BookmarkViewService, + MagnificationService, ThumbnailViewService, ToolbarService, + NavigationService, TextSearchService, TextSelectionService, + PrintService, AnnotationService, FormDesignerService, + FormFieldsService + } from '@syncfusion/ej2-angular-pdfviewer'; + +@Component({ + selector: 'app-root', + // Specifies the template string for the PDF Viewer component. + template: `
+ + +
`, + providers: [ LinkAnnotationService, BookmarkViewService, MagnificationService, + ThumbnailViewService, ToolbarService, NavigationService, + TextSearchService, TextSelectionService, PrintService, + AnnotationService, FormDesignerService, FormFieldsService] +}) +export class AppComponent implements OnInit { + @ViewChild('pdfviewer') + public pdfviewerControl: PdfViewerComponent; + public service: string = 'https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer'; + public document: string = 'FormDesigner.pdf'; + ngOnInit(): void { + } +} +``` + +## Add the form field dynamically + +Click the Form Field icon on the toolbar and then click on to the PDF document to draw a Form Field. Refer the below GIF for further reference. + +![Alt text](../images/addformfield.gif) + +## Drag the form field + +We provide options to drag the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. + +![Alt text](../images/dragformfield.gif) + +## Resize the form field + +We provide options to resize the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. + +![Alt text](../images/resizeformfield.gif) + +## Edit or Update the form field dynamically + +The properties of the Form Fields can be edited using the Form Field Properties window. It can be opened by selecting the Properties option in the context menu that appears on the right by clicking the Form Field object. Refer the below image for the properties available to customize the appearance of the Form Field. + +![Alt text](../images/generalproperties.png) + +![Alt text](../images/appearanceproperties.png) + +![Alt text](../images/dropdownproperties.png) + +## Clipboard operation with form field + +The PDF Viewer control supports the clipboard operations such as cut, copy and paste for Form Fields. You can right click on the Form Field object to view the context menu and select to the clipboard options that you would like to perform. Refer the below image for the options in the context menu. + +![Alt text](../images/clipboardformfield.png) + +## Undo and Redo + +We provided support to undo/redo the Form Field actions that are performed at runtime. Use the following code example to perform undo/redo actions. + +```html + + +``` From 582151246dd8691271dbc681552a4b080594ba6e Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Thu, 23 Oct 2025 14:51:16 +0530 Subject: [PATCH 22/47] 984044: recheck navigation --- .../bookmark-navigation.md | 21 +++++----- .../page-navigation.md | 40 ++++++++++--------- .../page-thumbnail-navigation.md | 9 +++-- .../table-of-content-navigation.md | 19 +++++---- 4 files changed, 48 insertions(+), 41 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md index 87aa64d45..f0e308c40 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md @@ -32,13 +32,14 @@ import { } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const pdfviewer = React.useRef(null); + let pdfviewer; return ( { pdfviewer = scope; }} enableBookmark={true} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > { pdfviewer = scope; }} enableBookmark={true} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/" @@ -122,18 +123,18 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom/client'; import { PdfViewerComponent, BookmarkView, Inject } from '@syncfusion/ej2-react-pdfviewer'; -const viewer = React.createRef(); +let pdfviewer; function App() { const onGoToBookmark = () => { // x - pageIndex, y - Y coordinate - viewer.current && viewer.current.bookmark.goToBookmark(x, y); + pdfviewer && pdfviewer.bookmark.goToBookmark(x, y); }; return (
- + { pdfviewer = scope; }} style={{ height: '500px', width: '100%' }}>
@@ -161,18 +162,18 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom/client'; import { PdfViewerComponent, BookmarkView, Inject } from '@syncfusion/ej2-react-pdfviewer'; -const viewer = React.createRef(); +let pdfviewer; function App() { const onGetBookmarks = () => { - var getBookmarks = viewer.current && viewer.current.bookmark.getBookmarks(); + var getBookmarks = pdfviewer && pdfviewer.bookmark.getBookmarks(); console.log(getBookmarks); }; return (
- + { pdfviewer = scope; }} style={{ height: '500px', width: '100%' }}>
diff --git a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-navigation.md b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-navigation.md index 90f1e5ead..5bfe8d1bd 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-navigation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-navigation.md @@ -71,13 +71,14 @@ import { } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const pdfviewer = React.useRef(null); + let pdfviewer; return ( { pdfviewer = scope; }} enableNavigation={true} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > { pdfviewer = scope; }} enableNavigation={true} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/" @@ -202,18 +203,18 @@ import { Inject } from '@syncfusion/ej2-react-pdfviewer'; -const viewer = React.createRef(); +let pdfviewer; function App() { - const onGoToFirstPage = () => viewer.current && viewer.current.navigation.goToFirstPage(); - const onGoToLastPage = () => viewer.current && viewer.current.navigation.goToLastPage(); - const onGoToNextPage = () => viewer.current && viewer.current.navigation.goToNextPage(); - const onGoToPage = () => viewer.current && viewer.current.navigation.goToPage(4); - const onGoToPreviousPage = () => viewer.current && viewer.current.navigation.goToPreviousPage(); + const onGoToFirstPage = () => pdfviewer && pdfviewer.navigation.goToFirstPage(); + const onGoToLastPage = () => pdfviewer && pdfviewer.navigation.goToLastPage(); + const onGoToNextPage = () => pdfviewer && pdfviewer.navigation.goToNextPage(); + const onGoToPage = () => pdfviewer && pdfviewer.navigation.goToPage(4); + const onGoToPreviousPage = () => pdfviewer && pdfviewer.navigation.goToPreviousPage(); React.useEffect(() => { // Load document after mount if needed - // viewer.current && viewer.current.load('https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', null); + // pdfviewer && pdfviewer.load('https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf', null); }, []); return ( @@ -225,8 +226,9 @@ function App() { { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > viewer.current && viewer.current.navigation.goToFirstPage(); - const onGoToLastPage = () => viewer.current && viewer.current.navigation.goToLastPage(); - const onGoToNextPage = () => viewer.current && viewer.current.navigation.goToNextPage(); - const onGoToPage = () => viewer.current && viewer.current.navigation.goToPage(4); - const onGoToPreviousPage = () => viewer.current && viewer.current.navigation.goToPreviousPage(); + const onGoToFirstPage = () => pdfviewer && pdfviewer.navigation.goToFirstPage(); + const onGoToLastPage = () => pdfviewer && pdfviewer.navigation.goToLastPage(); + const onGoToNextPage = () => pdfviewer && pdfviewer.navigation.goToNextPage(); + const onGoToPage = () => pdfviewer && pdfviewer.navigation.goToPage(4); + const onGoToPreviousPage = () => pdfviewer && pdfviewer.navigation.goToPreviousPage(); return (
@@ -289,7 +291,7 @@ function App() { { pdfviewer = scope; }} serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" style={{ height: '500px', width: '100%' }} diff --git a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-thumbnail-navigation.md b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-thumbnail-navigation.md index e311cb4d7..9a6187cbf 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-thumbnail-navigation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/page-thumbnail-navigation.md @@ -32,13 +32,14 @@ import { } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const pdfviewer = React.useRef(null); + let pdfviewer; return ( { pdfviewer = scope; }} enableThumbnail={true} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > { pdfviewer = scope; }} enableThumbnail={true} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/" diff --git a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/table-of-content-navigation.md b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/table-of-content-navigation.md index c7837872c..175511569 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/table-of-content-navigation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/table-of-content-navigation.md @@ -52,14 +52,15 @@ import { Inject } from '@syncfusion/ej2-react-pdfviewer'; -const viewer = React.createRef(); +let pdfviewer; function App() { return ( { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" enableHyperlink={false} style={{ height: '500px', width: '100%' }} > @@ -96,13 +97,13 @@ import { Inject } from '@syncfusion/ej2-react-pdfviewer'; -const viewer = React.createRef(); +let pdfviewer; function App() { return ( { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/" enableHyperlink={false} @@ -157,14 +158,15 @@ import { Inject } from '@syncfusion/ej2-react-pdfviewer'; -const viewer = React.createRef(); +let pdfviewer; function App() { return ( { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" hyperlinkOpenState="NewTab" style={{ height: '500px', width: '100%' }} > @@ -201,13 +203,13 @@ import { Inject } from '@syncfusion/ej2-react-pdfviewer'; -const viewer = React.createRef(); +let pdfviewer; function App() { return ( { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/" hyperlinkOpenState="NewTab" @@ -274,6 +276,7 @@ function App() { Date: Thu, 23 Oct 2025 17:09:31 +0530 Subject: [PATCH 23/47] 984044: organize recheck --- .../react/organize-pdf/organize-pdf-events.md | 38 +++++++------------ .../organize-pdf/toolbar-organize-page.md | 24 ++++++------ 2 files changed, 26 insertions(+), 36 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md index cf49226ad..5cb636d64 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md @@ -43,19 +43,15 @@ import { Inject } from '@syncfusion/ej2-react-pdfviewer'; -export class App extends React.Component { - constructor(props) { - super(props); - this.pdfviewer = React.createRef(); - } - - render() { - return ( -
+function App() { + let pdfviewer; + return ( +
{ pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" pageOrganizerSaveAs={(args) => { console.log('File Name is' + args.fileName); console.log('Document data' + args.downloadDocument); @@ -77,8 +73,7 @@ export class App extends React.Component { ]} />
- ); - } + ); } const root = ReactDOM.createRoot(document.getElementById('sample')); @@ -116,19 +111,15 @@ import { Inject } from '@syncfusion/ej2-react-pdfviewer'; -export class App extends React.Component { - constructor(props) { - super(props); - this.pdfviewer = React.createRef(); - } - - render() { - return ( -
+function App() { + let pdfviewer; + return ( +
{ pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" pageOrganizerZoomChanged={(args) => { console.log('Previous Zoom Value is' + args.previousZoom); console.log('Current Zoom Value is' + args.currentZoom); @@ -151,8 +142,7 @@ export class App extends React.Component { ]} />
- ); - } + ); } const root = ReactDOM.createRoot(document.getElementById('sample')); diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md index 1bac834ee..470297b72 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md @@ -24,11 +24,11 @@ import * as ReactDOM from 'react-dom/client'; import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const pdfviewer = React.useRef(null); + let pdfviewer; return ( { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" pageOrganizerSettings={{ canInsert: false }} @@ -50,11 +50,11 @@ import * as ReactDOM from 'react-dom/client'; import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const pdfviewer = React.useRef(null); + lwt pdfviewer; return ( { pdfviewer = scope; }} serviceUrl='https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/' documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" pageOrganizerSettings={{ canInsert: false }} @@ -83,11 +83,11 @@ import * as ReactDOM from 'react-dom/client'; import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const pdfviewer = React.useRef(null); + let pdfviewer; return ( { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" pageOrganizerSettings={{ canDelete: false }} @@ -109,11 +109,11 @@ import * as ReactDOM from 'react-dom/client'; import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const pdfviewer = React.useRef(null); + let pdfviewer; return ( { pdfviewer = scope; }} serviceUrl='https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/' documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" pageOrganizerSettings={{ canDelete: false }} @@ -142,11 +142,11 @@ import * as ReactDOM from 'react-dom/client'; import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const pdfviewer = React.useRef(null); + let pdfviewer; return ( { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" pageOrganizerSettings={{ canRotate: false }} @@ -168,11 +168,11 @@ import * as ReactDOM from 'react-dom/client'; import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const pdfviewer = React.useRef(null); + let pdfviewer; return ( { pdfviewer = scope; }} serviceUrl='https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/' documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" pageOrganizerSettings={{ canRotate: false }} From 66a83b9946556b0e6b70f89096ceaec07b718ead Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Thu, 23 Oct 2025 18:12:24 +0530 Subject: [PATCH 24/47] 984044: recheck form textselection --- .../PDF/PDF-Viewer/react/form-filling.md | 34 +++++++++++++----- .../images/form-filling-signature-del.png | Bin 0 -> 73116 bytes .../images/form-filling-signature-dialog.png | Bin 0 -> 81767 bytes .../images/form-filling-signature-signed.png | Bin 0 -> 69868 bytes .../react/images/form-filling-signature.png | Bin 0 -> 65093 bytes .../PDF-Viewer/react/images/form-filling.png | Bin 0 -> 69993 bytes .../PDF/PDF-Viewer/react/text-selection.md | 21 ++++++----- 7 files changed, 37 insertions(+), 18 deletions(-) create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature-del.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature-dialog.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature-signed.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/form-filling.png diff --git a/Document-Processing/PDF/PDF-Viewer/react/form-filling.md b/Document-Processing/PDF/PDF-Viewer/react/form-filling.md index b4159c303..4a97534ff 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/form-filling.md +++ b/Document-Processing/PDF/PDF-Viewer/react/form-filling.md @@ -32,15 +32,31 @@ The PDF Viewer provides an option to disable interaction with form fields. Use t {% tabs %} {% highlight ts tabtitle="index.ts" %} -import { PdfViewer, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner} from '@syncfusion/ej2-pdfviewer'; - -PdfViewer.Inject(Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner); - -let pdfviewer: PdfViewer = new PdfViewer(); -pdfviewer.documentPath = "https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf"; -pdfviewer.resourceUrl = "https://cdn.syncfusion.com/ej2/31.1.17/dist/ej2-pdfviewer-lib"; -pdfviewer.enableFormDesigner = false; -pdfviewer.appendTo('#PdfViewer'); +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, Annotation, TextSearch, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +let pdfviewer; + +function App() { + return (
+ { pdfviewer = scope; }} + id="container" + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + enableFormDesigner={false} + style={{ 'height': '640px' }}> + + +
+ ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); {% endhighlight %} {% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature-del.png b/Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature-del.png new file mode 100644 index 0000000000000000000000000000000000000000..0a320823df62e381a8f56ad16c70ddff9524fc62 GIT binary patch literal 73116 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
IRPWh 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

BrG6Sp$|PRI#Z&S^d#bkqLGZ? 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 DD`AaB literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature-dialog.png b/Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..e6e87df83062cf38929cd51cdaea2756ca41c343 GIT binary patch literal 81767 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature-signed.png b/Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature-signed.png new file mode 100644 index 0000000000000000000000000000000000000000..93470a0f5f624342aa9a058176092bdc4c5b4437 GIT binary patch literal 69868 zcmd42XIN8Rw>7MCD=JMudItfO5)cp~O}c`J^bP_dO={>65Ru+NdJ~Y|l@=hNbZHSO zp(8brP!mER5O~9VKj(SQIoJ37djGupx=6BDvKFh%wbz_;j1l$fr5eR;=G#}UT%maW zOj+m3mA~w+T)7r;^9Hd*P>J^!@$D)|M@{ic%_!>@@#Zf(1x9wsUVirJG#olUH_Apq3ODO%+>2q*|pFca+u=zj+(eG_4qu@ms$4x`cMOp13wG!~C7&e9+sC zN4Q5mS2w!CP6^0SpAO6jIef@=HwOgEx%J$*@#~$BcNA}O{r&Pq@l~!^uCyn~?XX+a z)@9_qO8(W~bAX_Y;Y=~R(SLuKKQi+gZP+U*?laMQn5tf^Q~s~F36C*H>+;m~5C5%< z_?1bGBQtQ7vWUN*jo6S66|udAZenXV5xdcO*}sc0gIU?Cqc=sT+|kxQ%zl{ZZnTP| zYitbD4NKV8kbxj?M*nA_MEewwN7}VVQS&7ah3x;jz!2Y2pwfT3b=idwWOt6(e@5D4 zX`d^`)>>X5j?Ur-HmH^p$4b$tef?h}_4|wfs!>I&S6i&#SYJb_Jl2^k2A}^k3x0kZ zK(!u3$>9xEmp^uvwKd1{cNfc=PM7-IY1UPE>|Qu&|2-eopRz!Q?`^?;4tj5thW!7Y zC=%@x$a9Lj>p5b7&zON|>e6?;FM}8VR1id>5ZRr2=UT;CyHjf~dp|&KfXHk|&43%j zLZAG4*Hpe;7{*o?S-TZKV?r1ob*cM<@M+JmfRXMmU@Ujw4U(Y*5pHon)`qwuY$Rm&r_w`e6 z7cI_^z7@7y{raxx0MCmQR@X0k zUE@%ftZN6adVyM*!a@$^~-4b9%JpKTTS9>&QRmCX3hM=yPxbYvf=zFL=Lbkwoo zfS2l&|EN5dvRK=B-ft)`tmcR`c#}`#^&xWe@v~=}aTf4Cp4Qf;yxLPt#0DWXgw9e( zH5A3!>=N@?*K85iLo`}}ATsus5sc#`Z@>FE=>em!^{JfXxudTZ7>;k1o7{73HPv13J>YtNlgpwG>zkAk z&s#g%Rfq)+hO4M@DF*gEN5@A~4ajKUj8i<@iF($~%dTBuVo;NjZ)49`XwqBcG=%4t ziXCp;8W^V5`dXOJbHGF#N4%+nwA>EGV85D5bjl0)#PsZ_VnA$Hp}ftVP{B8BlgOf4 zj+ieY2fr>32gzX%&Ju)b-Ge9}bza;a5^Gqkbyeo7!8LA9K2gUNhwf1;o~f{VfIND2 zUI{4%=1qIO!Mzw;$RZ!a`}y9~;DA!6tkWefsM^eI2NxDZV292inc49tuopkjg4n^- z$hwS0Mp?f*D?EqM=s$Y&zk^1UYh0?Mo^Gp{-_g}=rh7K~;fF7ezGU*p2vOJ93=7jS z;{!}Hp>~IBOs-5@jUP&7sAf<)^*b%Vgr}HeVS9a8`p!@q3rBMCLLTv9^dqHmHB4#) zG6Y_@m>K5v^*-c&vk}Hs0`F$@w!CICNeP-gAI`hmE_>=c>3h>j_R2UvP62~d@iPwU z&^qDJ5OthTd=p*ruC_qy^)Fu0n?8h-(r<~6E_mCMa;`V*Mle`x#u)TH{i{D3A4DNh zk(nN_J9G*k1KO0Jt;U|0mqpB$TYz$!vBf zGXOTZd2a@?%x5?m|G_KhI7XCFMqcTYx;pEPk^GN~wo>wqt0%eyS2^~Az*NQfN7l~cK*+yJL{7m6Ul3EGu*NlOX2R8eg?)x3V(qj zw}4`91$viJSy&Lng)w!(K#vkZSTHQ2Tl6e@gV9av8uRAKvgKl5SANl$-Em{2KFW4w z=u7cH$Ga=Lkd}@Pg4Gvcvq)J(eyfcg(c<$H-cg+3kA15c&QTfJJE1|f_m-zN=;x$w z`$O|Flh1u#_f?1}tEg~F@{{_d$M=wS(*`bf+=CFGf$F_o`-|utK%dQKkFhVW1O3~P z2?>YWdCUNd!@#|{bfBT{zzEiM7=s@DGn^^Y3{euee}Sr18W@pXe(YlpTrYi@+wlSdKQwNOFWurC){b1eO$E_$J>lS3p3#m;G!|edvGAvTp5ST7CKhkD zBqvxReM2)Z&H>lU6WFgv&e3=`;045N$>YL%Eg;Q$B84o8X`Iw%$(Ko~wVzW^ZwM35 z+INsLi!Y-NWlw02oq-W;DmP|-Vq7DMw;7H@cwYpKYVFL$CX_71 z(atuyhI$_?xL;IOy7he8JAQq?ruEgEN1bSk_GJH_dP36V_^)O=pTm|GX?DC@Tb0K< z#H)Idz|ZT%{!duL8yGPCZf-cP`XH&JAOf@Myg%FlUiB@D@Wb~BZO$oMil=69w+e;owE;SR(aO!A)grCmu z=b`7#PI8^7V$IIv6TjlT|LPzs2&( zXUD~UsvbxS)-r(Xu3rpi&L!Civ4^SI-Q#IiaV5_@W8NSj^k4Y517_DsR^qf1tPPOv z33Jj7pCCq#6^OUNp1pc!81&*X0xL-`d+zWMb)E+od*zEXZ1-HE^#v(#<467q7xurd z` zDq5OCfpd$vdCz9P`uoK$3t3kiHY2_ytVQJeKFggV9cxSbQ;cioLOi4N@Q62Z+$~=@ z6{vqGh}0-3)yn@-pM3@e!KVl_{k!?9f|6AB&ua+;I(j&`D@EfxVRdunwZ<7E=^A<0F3>_zB1WyEusud7F9GQCKEdv3ezz zZH$B(31oMlNbjua7J$yKbX9WnNH3Kx|G5PZB(?CfClBhxJAZMRkM@#}RVunzh_K=q zdigrZH9v}LHK>0Qb3tYL*!6p~cHF@(A?oR`jPYNn0%J#^X7#pX_qzd0RFwUZwVB?{8;etc$qQ zf!je&BVy-^*t*x1UZR_k>sf0L5FS)kPDpx|C36!xtIYGT;?|1)QTH_D`6is3^g-6w3Y}DfVP} zFa~)O;c}t!@B#p3&Op-53>am8`1C3DnQc)m? zkG9*|Bq{ELJG#WP(&r)lq6Y~GjJnD=Bgt&6(f4})^AE2f5;O1NcSfC8zear1%zk{6g2HQ%F3m&^vYm0_JmhLW(Ly~c ze-U^PAsp0QVrEr-KGeIcDw95CKT$^AWc#jr5gO3=-9fhAZKkH(<3##X=TO%NMQod_ zmkx*8)?2U>T}<>Sd_);WCS8EA+5402MXDmE+dq&yg+ZC@|O|+>sDhU(i-*Pqv)jCJ(*Z8S?&fzS+I@cXiTL%dZWc^O1;XondaNBeU0Jm z*uYgC!O_-hO6(nXk_y7g#`c-XnI@PkJI$}p#I@SaL`;L$yBVh>bXwfRkpz)lc~^-J z3!!ng>Go=1mLy%TqmHCagzq>T!TXv8Fo1#v8SP(+;JNI&0H>r|Itu%8smI7Zl*OfY zDJkAZUOKXcMRmD4zoTF6xsto)GThhec&FtIAF+@8S}o;>9f26?t2i&OnK%9g;ZG?Hs$I1Zko0k>i{?=B$QD?~pajzb+@2!UR(>4q{ zNGoa1i8cTF^K)F@GP)|#g7L)YgEy-rqCj->)ZS7V!Dq8|8x)`o!&C_udc z>uQtED*4Wdxwefbs=|N~Z8ou$&iLFXh29^hW*=bBokwDxyk%CCRGe#arZzFp9vjai zqzh3|RL3{%%vQWC+L>!AM>w{hZchgrV`dwjifj<^E8mSG<5(V-Ej1ztKR*bo_ZAjn zO28s}*%Ze+r-lcBv17?P=Zo`Uc*h4W*WA8DUY5G^?(edJ#4|1BUDb(i#lK8=d<(4hwur)Q5HVA z5;0xJfWPqQqEG0^gcpCy!Eq$V+GcBk-2*As`07qEb|UvI#f0|8hNd}daR`{ zAw!DRcXvzRmC}-OludxG#{QYtfnm+6L%<9W0Nv(n*2{#SOV^x9*Wre04sYjS1fvxfYBt^r$sDV{3xmaI3Ra+UAn`&z*1d z3E$ax(#n7=4TN$1tj08^!9qnz`+U;1Tf*=dzi=;{jmyU>1m88Jrv7ZWTDP%W>a5@?t+#kEV z8C*II&n1YitiO4)&H_1d&F=J#_uuVihzYL6pXk=xXKpQFx;);Tr-q;K9CjA8sl7hG z;rv8<2XSeCaRf1{Z5dMIww}FuU4|Z1{%LPhLYzv@uWgdqmW1S;rRMnqARqlp3xZvh z4{LB0{+2x7MI=Y(xaVZN*+*8(P^J=UF%M5<8~_?&7ck|%n9xR$4tjqX;qL?C?rYKP zzFqFNL(i6Dl?Ac-u@Y<+dBz(z6 zX)JTB_R2KpgB=(ERI^%F14&_s(b-4?jeeRIh(=Nf36d)*S5o37oK@i8=}u~pPbA~M zUYzN;?jh;2;7{H@j`q0v#C!WbGo~@R)-q&K#=1l^yXhtcU8fEe%J3sqHGOoG^W0~v zB2^@0cL_jMbF|Z0)!|(|TQOe!-Qlmeq{>2*PeczLr)g4TKJK=_GTjm!jOS5v!+)4_ zQ<`)87%@~*4+`4Hyb%Kem6beT+4i__9`|1W+Fx-n=^}tWPK((7eLo_VpX}m_{^q4|Q zu-vF8)t24vq!o@)#orjA`HZ=XbArOvKj9*YEF~(BYW&$PJe! zqQZ*1LpbH0$=yl4$JYhJaO&B4N%L@llCzz86 z2JhTD+{uiDeI1!I-8MAT|E+&+>21kc-FhEBm44k>dn(_sX(tQ@>qGx65(&<=_gt&$ z4W>D@IeszLLLQ^Gbjq%@va0l}){flc!j+3J64!kUI9#UQJwm7j;}0KHnWu!a%{3PV z>4Cj!K<T9>#9XTgLN=v`h@BZ9`*~2wETyp7xBY8JQp)b2=e=~sk*%|Eg_)qZo zuhLnMVPAgpYS(kWTM02|sX;574-mMMD^a&ph3Uf|Mz@24SeGbWeWAy;H7pWN20G|K`7Ps-M1U|Uty9V z#QMqzu)}HUg=?DmgyK{{HPpqFb}t-oX{lfD!Gohw>y{D}hl@UM z94L;&RRUp2-IXuq1a#G1hjPT2>9KOXY$^JlkXY3$rLo)3zc_!i_3BnaA{AaEGhY@r`b}NNZZrN9Yl7+*OD;_ zU%z$rs+Zy59WzPJMZx))~wf;dFq(1k|rhpGgTMbCMb zi>U2GtzOoCcei-A8bmPd1hAmXqtkoq)&OwcX0}1)6EoL(mZ`(zwD=Ad0^$vKlkMF# zN)I9UH_L91pdVG#D_Fm$?Judw`*JL8`LqSDc8*S#*e9KI>(+7iGnUslThe2#MwvJ! zzQeKRlmGPsEq|#H5_F9lIf+_#ZbKW8Si-5qCHB3*@=lS<*O5MZwuJZk#6ny)d+%3j zxXsGBobMjIdK!)5Hp86Kwk+2dCyp#_kaT`en*qNkQ(ev;F|B|1S*|nEL0)3iDPhWM z@=hxE{J9Lrzy9T9K=;DY`S0H=tynFDhau0`F>GSf~3PNdL8L;1JuE=N7>1dvNRVN4kz#Z)GXg+bFg?+ z>Zf9ieew9W?(d}H-G^^qaX|Afu3WG&Moddvc1y!>ih6Sj$9n-$n}xX}#~s1Jl?p-Z zXmr=F^+n~wI0pXo8kBy5YAt_?$X7L~M+_YwRf0FMyGKq%gVaAVJMAjsGb!1ga6WqU z_1OOdpJp~EAD`-oN|783Fa4=N67z9uhxBAr^n)O#6qJ(r)EX)XS{_o1I{mE8K%w~i zV)4hJmFyj;AFzZRmGEOcC21$4XjqZr6NB2_@g)T#lu-}slXqEH^!~WWhco+{!t{CD z=&g>cXL)se?oT4hX1%S{FQck;haLk4N;z|W8;d9 z5gzz{_A@5&L20Te0$83QA;tu$#usYwSI;g44VJLWEqzJ#_vTOQd_)I$kr(|_x8(H{ z8p)I2Aq>CW$=#v`5?Tz@*Y=^Q*yO zlczLw-?me(>=HNn79Ft+-MF#q0fH86nDslm)JRU`pjt*ou;KoLSQTYuXHVqBEv`w$ zI;(Eg9GPyAKxS>Rsaa?V$_VP%`%qd!soXZ(rPk1&Xl&!Y zjC1|N^-44O*@A>i3QFRZY zIS(L(P4cN^es`lB8F$`Zv_`9Kfp&l!ta4TQo@{IAv%d1VD~~(zVk-ejPXAq(>RB+0(;Tiu2Aq6ng^)nzW+<1!Ey377FjO#Yh^Cx zn+mXhIB&s3V7APAt(CcB`pCtD)WySfPTC_EQ*7@f>#Uc9$3Xe(dw zImWoR+jRH4CUIe!{jefEX49lp?fcA&nc0z#w?HB&6f15HacTn zZ!@UlI7htJ^<6DeX4_IG7Q5aTo^H!4w}CW(m0)1*l0!+Vw|uAF^CXp};FwPL7R^qH zhGs&#gygGp*g7)V!uc@1t^cnt6S4h%Uu_n?cb})uW=d{_jp;^wc6#$zC#~wK1%~ls z*vA4tjF?gVz3Vec<|1#9MrLz5rqG^KpA;gr&A8;d^^iUsmnHDAb!Y_J>p|iJG0H$y zdxS;Io9$`TC}Sj?rhZA=e-?I6j`MBI%d3p@k_hx$Pv+AsoaEK~I&L$Rwv?D3Je9

%%IyzCLv2#Qkpdh#u;7HsBYiCx*o8YAFqsK2nWHem{kK!VW(C;H}ZO6`IvI z0+eX~@9@HcecFv&xCDr~OnYDkhKIqG;|(o7jfJw1-yVBw55-retW1lYAi00dy5i>O zC0=O3#)$m*Q>!e*{-RTI;H&5!2j-?$#e}m9Cvc312w{oIQmzjVcWP-*R-2%aMxua% z=K9v%-1doBscKQi=Q?w)N7q&4e7H>jXJyDh%RI4A@s?O_KE}uI=IZ2i63=bC;3x(_ zuwP5&*ogOHV3t8)ZL3YEF|K$v3<7ISs!J=3kmFIDo+Y2cS`C$kh21rv*N2?n48CNK zCrhh@){cVDufU>iyereA+?hC8jnu>hK=Ik7HO(6M91&|U+xiSIf>G7j#uLWv{v|e* z`=fU@V0^`3V=-XYMBE54ob; z3mzHoPM0KFbpBigjDWmYigX0W6^&XC7ze9Kx~7~UtUh*l72nWOzsqgo=^4MqWTCLJ ze^0%UwL0_F%NRK$xqm&EU_8wwu^(^gHYR38`A2%h_|vtLuX+MCp=LQmW~hrRDjwF_ zYdx&Warr{-0BdA|zm&naN~@2+sk9TsHA?XJp=sjbK7R7kr#sl+a|Z2-D|fi(%2|E$ z@kh=tj86>5$h&n(%^p~PCtq`{`@Vv)_*Wc)8Qe<9J$O$`@?T2&mmrj4_u$L7k1Dh$ zvKlXT`bOuvgG-s}!7NI2tcqy_O7Tgtd~T&Ek-em?!b zfMpBzr%cgjI2j}UOtu=2)!CSO)R$m>TwR}$RS^f+8WxmiSvJB)sRGHw_sJv3_wfSj zk&oWykzMmpX~6>5cfIKTosFddR5SO>NuLT`Hui)Yj+hwZKy94r?jubL3km1IO_P4D zZ^kb65@$A)x~nz*!r$l9&qql9Z9$&_-c2449$h~C#^d@1T1YsOcl7(-`E!8Y5VsRo zv)7Yim0t4pflHF%>o{RCOc>yV>zDnAPpW{iXe3{D7{qSNgmYje(hpuM)-?HW0bB(F z1F=STm<`jof#B(Gg|&W^@6XYb_t>R7PMViq8;(GhMSo;_03H#_xYGcy!z9xm8g>W)=6?or-5O~)HZxz;{DABkx> z*6kj+#lyI}VTX%s61Fp38}roIu2~%^p{?Zo?TLN=+cqo%I?GiKdT9Zv`LoC46ll|HJFuRy8)mTi8$mS50U*aEn6->(|4`!#ISfz>j z#Wymx1AAWRSJ!9WlyAx|GkW@s@qL93Ro3tSC?ogVP0%amB8%;M`pYl?H_oZ1*v5cU zLs}4NdYLyHqT3P^G=ko|InDr<91hV!&?4}xWVNVRjKj+;!?GH&7p4@9>q1Q-roLa) z&SE*spu{FIDs=TaCB9s|elnDo&~rrjeGiQXIy!=Bq`2d23_f<%YQ!ZOc4f#@gs5lq zGOk%JrUV)=F@5>5WiX)V4cOu;IPk$f?wAOqIgdOzR~0^|pB=Vk5j&6;__!gQPX$;W zB`Y>XE?*#PiYuYV8#4hULsetZih^d*=`iTz@UaC{DvGYHfwXVWr2@F7#0*9}B3c7} zjA?bx_eBME>V~18X~?r8`!2%_{anG06wQdQ;IW0FVV&p6Pg(F26_Tz5_5+1ht?OuR zHQeX4pkPU0JoD2*Uj3yR0n!jORb6~8bLh5g2Nr9`+~4%zk)ZQ)8RBH3OUFCAlFAzm zouJk_t0lLZXAJ%JXCArb;hskG-Lfav%Gcn~`Qc*)ecnTAQD;MO zD4$xmF>Qr1NLkeG-{nOm_E>(2(C;k`mb*WKWKRUzecrihT4X|Xo44QxKe#Q262)D9 zjZnDI?uzNlovGcldAyC8CvU{u$CL)2G`MMK1c7(2Q73t+WxFfCx{&A5Bvq7r1YL7# zuFl7E=(N7ETPSUisGc-Q8hcHhjgWRM&tFnc@EpEBM7PJqj-c0kR$ecOkFX8xo=ADP zc_u~=yy~)=|Dn4C6+3XQCEJICforoI5qs&>^2mVW7_du?pzW5tYFOfUjscspk^4hF z8)H&F*EWkrnOTv{ZMss51K35|#V!F1xK(TyUjPSxA*A_Yt~_>2LuHF_a8KD1U)^+9 zrh~%eICfA;g|c^~M3@>zsA8~by16;D`;`3R*Wc*UP6M@Syo+TBfY&+*H^VQVAt<^2O%b)GmEF`#QS~18YorzI?9VQ`u(om>FpV z61NpLQ;|D_S0H6fjm+tgX9pzPv!JdptAN>r!VAgT`5#!N>xZc`{GxU}kxEaV6s%na zCyoH*d4dgDsu9J4rJCkm_JJ-vWF7}}{=&fE8x$zsQjft7XV|wD+$Haz5=}L$EjbeAF5U&aAGX$+0hcV^2^OQ=; z+td5`d$%Sy?y7(;@{vI@Op$)&G#4{h0Ve=7v9Af`D1xfUFf5KGS2{&8a9wOVpJwz? z{n(MxhyK!Vp=J#Jg+HafvmtzjWDxhL|HcbJVyw6m(%S)U)qkm7jZox#(c<%~ zFQksPRj@Cvv=tPc|Bn8R54zSWxjtLC-{XEbfPpm68mRz)2fg_8d=m?ZekBkLgZW-X zT{eQ%*37~Pr)52c4Qhc&8bGt(2{scK_)R7ewukUdk!M5Iaw>J`bB~5y8uauBLjB( zlpEoMJHAJphjcJqKNq>{?KdUKQY{{G-4?d`B^%v|j$ru`c}VHZ+LWE{Bv>Uy)Hw$7 z?J|GIuMg^Qzca@~*~`r3dAt`k#%0L~F7N^DK?a45%ecPRUhaL6HCl2I*_7>&Sg3C^ z)pl`|7-bgODm`-|ipX;m;Nn`EQe+EuVwe81`u-@^1gVB{glo?^Hh6r z=1@qHYD7lKu`h2RGj0QxY~+PP41q4*6nQSf6gFpx>1-3ZS?-4CBXV5K3w9W&^6gC1 zRn{!L9gDTTv#KGB9b-HUIkPntbgRRL*67imtjYtr=S#x6H00kC&ZjrV-wmw z;;KfeNY&s&52l;=1(iS(HPTFBvnM}cpHK(-3Li12*z{MHG2AnQs^b>3WjUrM)>f4% zNY9*II zV2Kb3QHSn9r z)O~P!ninyEoz@=#mt1x&1a;LV`ZhXkB4`6A1Aq?5ocUIm-Oq3H4P+F(N`+~k{cO}5 zHeemDhuseS*M_9rEwBMo%kAuFh0s~WjwGA?u;&^ukyJ>)Bq`gjbk<{cY<{A099zu3 zirvi&u-b&msxu(tCpb@3-{o*|vX8@`O>mp(tM-cy-OX^$p=Ny!F0ZMVNR+G!yd9tx$=R>VLv`Wd^iuK1-cLfgG*k0J)w2n{1tO$QJv{VJxJ}Bs@0y9rqZ%g z*4$HY(f)0567Wj&for5f@=Enuaj8=GoTnmad_y>7D8|)t3#Z5vdzE7=U!bpQaM+dm zwcr%|`scEdZEigdrHvr1IH|Ejb(C|Gg<(IN(Nu#Zu(x38daudGOZ(oq^~W1j-U|)j zzHkNZ{BiHHkEeZK`)opDl++CD-NR+P<4AruS=QFb%PP2it2*$ov3S3_Wf|Xzac@j& z@ED0L!BSHopC%WlFeW7C_LM++R^{5v7AB^75wI`4G2Y!7u17jO(Hs*tKhlZ~(f!p2 zeSn;K1-UxuuM~`YpM1X9w)CSXs*lc00$upEImVE({isCD@ikv}*+14>y3R6QbTB!pu?YW*#71b@>)*`9CapQUeyg4yQS`#Gd$AzMC@ryI1F00%5`$g0Rt0#}cplzV9?I3ST;fk~E z%(^2q(l6>FOo zC~86~bA^~N*A|k|+~XvTLO{0|K-Hz~RJTE^voFn$a=hY3;}WV;i2`4 zvral8SaX^JfLG}$B8OOrAr_JuWpbM4Bl%4WQ2-m5bX~eo&Fqz$1#)Y1f3-wb5wl>V zd$Q-ZY1pjfvZlVnKxq_jkX$YOED`_NsKm^B80yk}I<;5Yc?zWkP!D6=2HojLz5VxQ z(s}Xy6qYmD;rthz+TY}Cmm2kR+*W!2l9`RmP{OGC>}OeZ(9Ax=CGB1SNjil-S?u^n zCgko_SotJL4Ravh(=t|6&5-amkx($;xO{d`avVBnbzvv$<`bkwd)^)1iqZhFE!{Z= z=1xu7kXvAKoxEZWtgzTSd__EtL`%|aCU0>ZOJ9m?_VRlzB*(#5I_wjSep%nj#x_86 zbaTCf_SLRyO|Ta^O*yipz6+h$PI0$OrV3U>^Y}aj8&!wcHl3-SB#z_wN+fyTP>F$% zRy*3WD1E=fi!4mK=e~CIy(RqTxwiX@v|B~iuZu2>2%y!~g;)gYyhjej&ZW+d=p?IJ zN-jlJ7kE~;%No?eW&4pcg}ObC?PYfQu+*d*UP=v}D&a}xF-`+HCK3Y6R7vNW`!T}K zVX|szM#0?60Y_-VQ+>i-{3p=j2EB!8JbU`lA!~L0>|I;?%0Rc+(-DL1P=v%Ui7u2gmhs2A%0n z)k57nuq{?($m@yCEc-edvwv`gm%^=BA08u49F9L7*_A6VLNi$Si$(J#n z5bCbAWw?MqZ1xgK0_#pw*w^epjXl3$Fl)qf&{S9=pX4T$6Z3D-jV?sHWgkRe^mK%VqOM9xb%%8+2ew1wr z^@mfgIpykV*&j?N^db*!r4${^W&rdIU@<^)+~VRfPDl2{)|(XX1L+mG#OOHp@vTD- zZi)wWp>H$&Io;)S6u>8WR6*L|awrjS)(BOKOib^10D^nA*45{#>?2j zDKI}UCi+#cesa7@qYpSW0Yt-c*mJ~zH1JX-+~VCtlnO4vqkzK&K%|JjF)1S|jKV$O z1m@4I*Mr8*1}a2n_NiN6=6SVc;Ul(cuKT6GTcL@`m#%c9x?w5l{#$NcjS<45aZZGx zXh4%PuX3lLn~?fu-V8{n%=o^IyiMm@X9;RYTdw}x=cLlg*-p#UbF+uGd<;ZhSRCxo zYB1j|cgh{#C4?TLEq|`C1T~jh4lv_{4Up~EB$=6x1|2f#GTM>LWlsuTQe4wy0meyi zM(;>Q&C_m&{H>r*ofV>+&Tx3z84{a6=**2*`-yxL2Mi8I?{j7-*zqlm)n??iZvu~q zSCO%M!zY*3=ll&eh&5_(IfpvmY&BjGL|5^NVP)=Ome<*R0G9)t6Scng-c?>ZogCgY z$4cs2wL}Y65c?ITyK;Htghk5V(Z&;lE$UxM6I|IGhR@DOyN5LaY>LaMWCzcdk5R)J z#!fLg99B-b6e35j+SWoEj)UoegpmhHqy0-Id^k=d9kdsZSmGQtup!}~S^9PYbhT8P zX#$}v;dOpvoH{zkK?3nIl?T==cIvBr%XHVmJdM;;jqzZTwc!JR9u2cXYR zo`^CAMmYxX2Mxf8jN8f*xhPb1%Stm&(5ZU4{J_D3PlEsWn(2J!HK*I;9hcr*IC{tl z`a%wcF8Y#=LW_++kl)?zm$qfH5^q=M4q_gXZ0#nrcd$@3c42*Ok_g1);RD- zdu8vdO?&zTkev8IN$)uXj{`$`k^$Bf1qL!&_wNL9L&Qy?eN`h_>>^2sYPj%pW-fsm zc=21KKeZoyPR#z65D#Mhp|Kse{5u(J1e<9dM{IekX*Uxm$ti|ZuL37CUlK}O3weKh)MYLgg)+@>|D?#) z;Ho8iQry%v(3?oUS2ms@Fi}9?oCLyVds&kv7MAauWlBRYE`l!HC3yOcOb>|#wY8Hm zRqF&>-NqP^%gkvP|Dz%K=Mt>VJjx^qQ2iEGMKJwMCu*WXb-*zqA@nF>VM~-%OI(vb zhGz71*Aa`g9v}K3bb*|A2M|EFvWr^<$cC?1t1Jm^yj5X9=RVLBXzDYnI524QIW4rv zx=WSY=gTH?4~^vDT++HQ(KJ!Ji8g^29|^;r^LUx799&Qa2W3+!3Z1DA5`W8TU)D%R zX;O%$^cL7hLh)Qxdx-+GL6v>X;BD?Tx{(v}oV;z);Qbb+MQCd=3%5@dfWNM$XvN%> zt2;i`pIuR8JJfI5zC>vfYI;iKuo&6A+hT;#fLOi#3-dd@okRZ4&tBm=Jo?h+bKdKC zZ^{%P75_2t>eQJt6|%WV=Y?*&TvY%YCSj6kGfF3A2l1?fOU$HYaH&NVUIpHkVw<`;b&8D4VPs z)v8l$DB5Q?LL(q0d7?=uS-Z&9ku7Y0&LOnTV3C+-xmCO5pVd2QuApV+Kkj!Se5)Ji zxK(_4X@2wC%iv*z7Tp7+j7Zqrez|>MM0(*rnp*!Bu3x6IJpT|ZX=sX=QUvr>Hwlix zHWl$9lYILaV^~*&OIsPP9vEDl0jJwUfn}-!%B+&W=+mIJ+HBK7I0tu-vk7ZXSWF<~ z_n0mhq$dVTYl=DapV%yj=kGE0h=E4zlbrRe4nHE==poos=)f08GOC6r$heK5m(2mY z3*VDn$nxsNBo$w0QtgPAx$o3ZMd&Zn0i{gH(<;DJi8uK`LnO^N~Dqf*olZLkFGQWUATLv_Of}xN~*ld9HQJh13JKNWZT;TMCyc8vd36kv2Yxv~9Az+%l=@nY*f z9r}D!_)MR0TQ=0LJL4oH?Sz#T;Xhvvl3AAMGoSMzOsIhY4F^xJN)6(g!IsbTd**ot z_c;X1j{9Te3Zv8xirL&1@8xn^)L39_X`yvo{Q9hwH$A3@hlc-vnW(xdVXUS~7F!E! z#+1_a3R5_poAVd&i9upKnaCo?j($2}$uA9Mq@r>UcAxyg;E3wNUYvs-kug z2*i-SmEDq^eScBa*XPvGV*U^QNV7P?qpFeQ{mvMmRh*hhkLMD z)$FR5J1VA$N;Lwku%Q~6Nvt|7E z*TS_T5wRqcq`BA1<&vbh%_Hsu4h#KiLe4uKz>7Z7&|dTIdn@(*=g|+UULJFnNCT0@ zNOR}rmC*LGnbtdwd`lcR4EeS04ksy^>~}j}2B`H@x~Zx|cw!>yVsSb-z3lqW+AmcdIR&jbNS(Q@hrGL@~ z;bS`Fq=e&xF9ymMf`B8~o@^vOP#FW*Tm{}!I#ZP$n#%>phm3D=oL_d$G}H1TRQl7R zy{01ItDp;3tdY1*_hQc**08NDvRTKsaJMW+);MA=xEoGU@i8Kq`ne@kTv4yHGVH0= zRr!$^5vyyjW9$Y`cnWENbnV@;ft#Mw=}M10w8~>4iqi;4to7be?|i^c}Ht_w|G)}eC{*B+HQ0I4`KfD?Rzso>bZWx!|=OocPH^E{*Bx(5~^;J3N@ zM?ZI>nccO%!TO5Cps-Rx_7eG&jweR>f;hfvYRLDdjEhq=<1^1HwnF0Ph+!!p7x|60 z^Uq8X#@$~l$#Cd@vaV$KFN8q;DT|AkWYs|C&ARs92-sjy}aB@J$b z$>2uOU8uxD)Bn&%DRbJg1+@Bq;|tZx>gX7ATG1^E81HUF+fyuX0Q)TmfBtYq&L&Ff_}D1-Nu-Df?ggFZu}V3|6|hA&yjeUqtLv8E8ZeCl;PCLgMc5^bL)1UWkS}! z5h6gJfUk6&AhvOfNS05TH=pt{MnNUwJAD*df>ZBo0PMew9sYcT`|jk_JEA* zZ)CsV61#(}7sL3aF;Cwl`+wLAzURT)Oju3BFV4hw)zj3R%l`|C*#EE5THBFi*ke-j zo%ul?H2>cyVJ;&(&gg|v5OTcDj3N9u^wc@g{ox)f`VZF8|9x&4b-mRyv*XEzFe}II zU43{IV?A9G`#u$Q0Rt+W`!7}L2#D8~T}_y$j6Cr{Z&Pi}yK5$%_U!*7yKdI(c@_^* zQDQ6j%pT7`p^Epz?p@;lJ^ScdiE6Q}-}(aIpmQ-6NzCAS!~P%mTk9IFjm9|m!FBo{ zgJGBo5}fCVB9qK}>-EgcYx6JG6@%IRca~Pw!5bN80|lpf07ZjAA0+#F zs;W3U|6)-ymVsA*l+o0pcG4^|_^xAj;cFM)r=#1z<(CL#6Y(g(aQaD*n`KagqW>#a zC%Bt`k~;pJsXr*4|7C>n_Ex4#%UMQ54G9X=A){NAbJI8NQm=`7e=^C-%DUcdtJFJ~!+>za&t~1Z z8}mEQ=kMc969_p%vg}6K-vwJX--3oOM0NR8k`g^U447>uCyuID!XN`8HbpC2;jH?g6mPU ze~%1I^_KmB9}$UYq|V6*+UW-sI!$ML()n9r4>eZPp^2S2dL6CDs`xZwPXK*rbmc;$ z0N`;Sgfyg_q?I^*#vZ@*M+MF8ZZJGJ}hf$H+uq@*;ona_0 z;XL&YLoJG+;ms`j3M^d!Y|u0oEHBt&;+X)XlKkF(G98V}xM;UGXceqS)t+Nk8*J1p zMxgx8uRohNR-kz^1b<946&X;DI9Xsr8NauSsV}u9I?5F4>E9H4d?%Y=XvHj4-AbK& z-AZE(m1RuyxwSXltUBjxEa}NE>WJ&YrzrEce@-(;OMB*2F8A9ByNuW0!}>9r+wsn| z>;)J(>a~s(jhST45g^6AH3aXU+{9#<AVIRpd~xhKPS%*GGA*efi3>((R&HCt4pF zo(I5 zvi$5b(lbT6xBBF~_=1rSH#60%C&v~8+S!i^_$RHCDWqwsJ^4eh+)(Yco*b?Z+OG^c zYK7r7H>ihYMX>1IPoGAtiuh36$UW8clfWN8#E%EQqMQH?O9vtk)rd2C7PSHFqs_ZX zwH!|Mo$0z0;B7>5%X(c)R0^z7wW3 zJ`8$)IN6?v(@u^OojR!wK@n5u_Z|mo_{d=#if=}mhtENp^DJ??d%FO6A~9Gl41)5x z87peXhoCQ_k^vIG0F=H>3ln|Sm8oh`f(5tVKLRrb3Hltcx|G?WiY6fF9*;H;+AeUg zLoIW*dJRtHgb~`*1mAvn)Gp%1#3T>U*mc78KeMt!@E!xjac2$Y^`>6hz6Jx~%isH7CW&okgmDZ}cM#dnTqskiYQWNe0&sX( zcp_xIu+3p7)oSdi-sFiW7r>`(Bp4Kqi&v8aS4q`t5$3_NN*=v;{O0!>m3k3vq0{N9 z<0)~DVE|I7XAvJfs?3uB)n#T1G5P*d|0xv!wSP?t*bdII>M@;u>A=i=|CPgMdwhmgdg;RQn56^&*ck#H|h5%3KF;Zekh$YKTPQC(-8B zA8-2~nC9!Odv*rv{-ZDQ*!~2AL`eO3_?De)ji5T8c*YyF4bnJ?Emu@jyb~!a0%?88 z(6IwZ4e0tzy}v2KU<4crVG0=WXA7-b!c07e^t?#3=Xy+G+41*kwwE+4fpa_RdFb^{!*muc*@Fiv%SzL_q=$Fvi^T%nVWVcJKY%d;crX%x9kGJm;L>@?DOphxo#)(RnY1 z2u_*>k5#mDzBnc~kByEqD367iWN!s<6a*Rt$6Nv59RTvw{W$DUN0)U#F#fTI z?`r!4&EznUUE4Rty!13|O9vw0gXR+=;6hjAs;B+AKm$BdRy3qzuUNxIWiHH2^cAsz z8dN4y2SS74b5aXr6gLzW77mOc@;jPUTSI|@@iv-g1wVt5o9mFqFQ%;-xj7c`?2SXC zO8Hp00utN2RVwZBw+&wIl1LmB3=EyDnc!scQoII51`*|v05*i8sFL>ck!5!yDhfIQDg7;uVt3mWVxfq3cJZgZt_Us&Tx0Vmv0HP$R$*+885!-9v zD{hUBV`QXHZ7VUx1s~j#f<1Cj>)U+HV6FLCfLNq?Gd(@pi71HPg`%8rz%f|Xw(XrR z=p7$PA4nAu`KCPeDxftG&zVVl=TCLFBx;b;gVxO_^*v3>=9?#@DWx86+v=4f@;(+>8tU`h@Hk7w1B z{QAXX5wDgDDejH(AcbEz-fIy;Yw>atQi8u~en`LB%4&gOb|pt*i&;j<1FJ=J7ZKMHxHUE=7#>mD@d9ow2yO34P() z72A{YZ|?_8$hn+y+odq1M|QoDf|8PHR^+|UtDbF({8I;av%5ynGRRFty_mupmIiH^ z=WkToJqAfoxQGX8?qU~X9obl5jOp2*6Txi#;`H7xxQI0*KSJ@MG#~||yvX{dS@5Jc zip%coQf-w{LKvYy->Fn7P)q8*lppFrQe(Zz=up*jh$?3sF#=%iW^X@ug?T-%21R*U zP{~T^2Hgt4n~O8)lw(6J^?;8ds^!%XO#q0z;xf8CBla{XQ&4@b;%_ZGXzryPEHKIo=4Yi#hsQ3c#Qn=M=&R%`oI zO;Ju*=&G_(X|d(#rYHCQtaWIF2+t1a_C`~59K7O@bK&-RM5oS3Ys;emUf8g*C=gW< zp;FedWM#+gIZT_Thbi$<9<89or+a&x;-d&DsLzIP8;?j0SK58PHd)pwd-R2tgr58{ zPY8f}Z?~|R6jM?4{z`dgw1-}QmP;zmumr}SNT>JI2H%Fap<8z?(zih$`WUF@I&jup zUS(M<0Szw&qSHRfL(2rqQ7PJDa)DaISId>ey!x=N1GJu$vLR+l#=SIk*PhZnq#ln? zp9otQ?GFGMM@!T#Xqz1GGWpZJ!B(2l5HGwp%9H$@w!Qy(VpIsTq9+V?JDpFd7YW54PICL9$&t;-Un2fXs|QwKBz`qMK}$M6-81HdkmCFJ1BJnTZXWN12Z>v!v6}Ms$`qyh?45QyR}Rn1xRa~#gJcfB3;SAO5_%f_)T!e%`~6MwxW)GYT75sut8>4zsTG zUbL;t!2xRRy{b|fKL~Jf9yLXjL@|1;a|7)A!{)8`26?n?Wo`BQJ1~Jb_g$r*KJU5# zIU(>V1%ngS%JKmB+AhSg*9+t72NQvN$N1QYbLV4s17KTC zB!R31_-Y!Ft)GTtMLF8;8;w`Q{uTBB3G%y3a?lz$@CHR+Z|1%a&> zc$WFCWi77PfL>?{hoRpGiphgS_$}}ak{lf4xjNQ14TS-cwhRGCUoou&S`n^F*YIG* zqdGLuYd+pCyO_&(+;q8UJwpdCmdyxoh>Cl0hGbZNYV?Y(ic`Zz{$`)(W+l>JH~51G z<*@s)Zj{$G(Km9QbiaJa^jKgbWE(4N2f(?p{BV+D!fG3??5H#NsWJldX zn;NJe(56)9xJx${@`iv^NxOWmu5KaCxl#~z`5md@tXuQAryVujgpM(A_!=jy0rzXR z){{qKfi+DZDGxlBHA}>fFZtQLI?bW=Bx|5n3Cz_ioAca*QfNz&hJHi=73y|d1n`jOINa6zwEHuXf3nWRa1Pu13x z>@%G?5Gmj^%!x{?t4=iLr$s2F7=r31b;#(P#54W-Qi=$CFc;-PlZI))Ywf1}JW)qw01b>?I4f6IEKqoJ2 zQ+0C*EiDcd@eNwmIghonu7$lI$JVu;303X*0z(9-Bs zf*lH{sLolRi3AJT4c(G#k#$??T5Nzi_LK`8+#8KnhnjB-x@b55GyoyEHz| zZ!+pqefH*HR6(}>J*-sMO=%KF1*u{3B4aZ{tnt(nVHO!C3)0OHV%YHLatM_isV-7kFG5%qKeAt07=_@-vKhe>Ni zc=nT4ekLELTNce4s$>v@EXS%~22}Dr`Qkt2bAs#~v-REj!m?8Mcgn@6nM66xf0db- z({@`pFMNPXYw+xD2M4R3uMGJJuc-A~r*@x(90{e~KtX4{H#W13HPkO#iKAh&Y2%9qzE)Qji{}n6NbH|CY}%dl+?QWW zZjs2PLp#ut&HQ>!mRhdlRh>4*-N2zGt=S9TC2Hm=^laSP&)j<6&NLei#skqyxP%{@ zX^r7;`Q5PP$6g*=mJ<%BuMs;g#x&1ANl$55tF=-uLOMcKP(RD9FOQI9*O=h%@W!4W z33DLFwa6~z2{L-#6Ci8N6{RtX3+EcAyt zhu)C{TD4qxgA5OIdz4b8rpZCgZv~(WSrFBE%cUTFe3OOmLylJdHM{vffKe;JCcpkG zpiJF#SF-P?NKZvFTjqOr-|d@1Ae3*jt=cH;MeVX`ukCvLP!8L*VPr6xwGMA@K1izQ z>&r+q3jYV#8U_ygYthns7C>9%EWLe5d1Sse05n)`{UM=OkG4`IFt${q;h`-AeWz9( z$ELRz7V-oIlE+Aa04thM!%p$y3u=5IZz%_QPgb{3%FGqA<{6>qYhDlxYh(-A3k5z-%zS9H@*ZVIh z3-Y=Gnl4i{J3Vj!q2mCfl?4j`IX<}2tL5A|z(%uv>Vg+rfZ@5nkaz9=OvmOtAr{|` z&pe>+as|Ly5QdvQ{;b*Px4d?=)rJl_k;MtelgvtP3BuNZ9{t$1t?*)XtijEUr& zgNiXuZ0IQpSXu<#?3d)PWOH29_LU`EtCOG8ROn+NNlzO1+KT0WhoK2Re$^iE+<&9z zJYDcU&9=p&?rN~K{Iq_5B6M$)FhG#KFyi1KkpFN;d%A*}17peKRJbz$Eadsi7F2TA z2iIds<@$7wrFeB$4pdt|n0+B&DuP`hUOEkA0M9r{8JIx_4KA}C7XD_Mf{(Ff-ut@M z3zoCJ3<6yt!-dcpB+2vx#wQw;>5UvL#fxxq%^D#4)$LhH9x-Rb+>S)}*@fyH6r?E& za;~V{Wd)gXtnWWB;udOQ#CR|TkD3Z+iFm%X5E}-a_@Avj`Jh{bj9Q>evuqIH6O&^B zZvMZe+V?tfNdLU(g_94VTlzE0hTb9tCcPC2GX25wDNJPM5GX`+`Po7PS>2h09KHy| z8uNLJghi@pu~mc zU;2cJp6LJo1&q)oZfS$Ye`nKbS&MbQjZ3mAM(>0=IV6p@=HtaHHgA^W zQ}UTT$pZF2{1!E}eR=aaKbLX}z@SqX(qt52M=G{YAmq{Y9fJeko4mw^lLn7BEWY~# z6@Z5@0rAgZK?D-Lq>}>d3AgdstTs3Fq`0^Hk83J!fyGhr$r>4czm!Y@ zVi7TtO?T_KtG6R%$*z(h^_Fij8?zJF3IOP3>Y^cJHPv8PXuh1O zg~-iP5`2cqqO8sd@<4)d)q>p*N7}hzYDS*e)tiG^j&dNMo#HDt+Xl!E&{G|BK&CX4 z1B?hXWz*ixgviW7GUC`QLG%)ttFc1G-G-lG&jOTZJ(50sIPyN83Q+(w~YGn9yZE7qD! z#KwhLFA>1^d`blxl?;j;wwssB%rj7H>pGvW(7P-!Nt(xp?wR+!16K_^4CK~1MD$z) zJJ75JN@62`wDUh^U_?>h=??6;Km1oN`niptTt_I(DO8CmoBKZJM9 z`OZoT1qNDQ<{;xsT-|T8M>9mPGW4Xf)3IA@3sl}^b`QIJ*>%pew7V(my1|j25Bd3= zU0oK}qsIvZQ@}?3!0x)6@%y+AZmP^3>3kZB+`aW<$gLksn3>)gv@CY!+1OeIf!BLx zilf+O1U~MPcPa5-Hx--ito2*Yc&(REbQ@MSmq2L|CSuO!1kXOdK~)#giC@C4>Oj2I z-xYrv(_=El#q~$7A2g>zl1}@Q+lo_Wt;Q!yfdA#5ir5ndm(AnQX3gm}2<*UmtB!_@A|eI34AjE>J#lewcd+?0f5R)qDfy6JWZ18i zf}Z9}^5vmYcAx%t>O&}iY>ecz2Y=>X{4&yWA`6$=yk(90m6Q6F(_7R-=Jy-2HWh-*akFynscsISBg?K-eEytlf3yN?Z0ZD_Z{4UNYzu7QZ-VlPh5k z)Xx?Kz=z6{Spn>L>1krR!a6?~z7_?B;vL+Vh(1yJIInnRgzC4ZNU%+Y#NS9py%*$P zjDW_bfIxP)ylB)Lo0>j@w{LAXT7J%&RBf!oi@qyz`SUg6 zT4gp1Y-%f+a46f^gX?UV&aZ=i_0;u`zUg+3%txuz31>L)o6|cY#_@=Ep8(WSo^e17 zHUYjtPGh-p1VRj z_AljbYO}|^|2VIkNFApf9P+P`u?NROp_u?YNRRHiLs=Hj`A-mV`w@U{4$S=b=kT0A hj`{uOzwGypi>=FXh<)_wjR*8qecgk5lXsuK{!dJ3KcN5s literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature.png b/Document-Processing/PDF/PDF-Viewer/react/images/form-filling-signature.png new file mode 100644 index 0000000000000000000000000000000000000000..9be25488e2ee422ae4f8e4a67930abaf59119eb6 GIT binary patch literal 65093 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

S@$k}jxshF$AYMUihv4;bZLnl>7xjU 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�isWncFkJjQ17hl!!X{iVex74Cl1? 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

0fU@KKk*}KDrl- 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 MS>ts2sb6mY5BI+D&;S4c literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/text-selection.md b/Document-Processing/PDF/PDF-Viewer/react/text-selection.md index b6a8a0bd6..18456aa23 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/text-selection.md +++ b/Document-Processing/PDF/PDF-Viewer/react/text-selection.md @@ -62,21 +62,22 @@ import { } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const viewerRef = React.useRef(null); + let pdfviewer; React.useEffect(() => { // Disable text selection later if required - if (viewerRef.current) { + if (pdfviewer) { // Example toggle; set to false to disable after mount - viewerRef.current.enableTextSelection = false; + pdfviewer.enableTextSelection = false; } }, []); return ( { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" enableTextSelection={true} style={{ height: '500px', width: '100%' }} > @@ -114,19 +115,19 @@ import { } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const viewerRef = React.useRef(null); + let pdfviewer; React.useEffect(() => { // Toggle on demand - if (viewerRef.current) { - viewerRef.current.enableTextSelection = false; + if (pdfviewer) { + pdfviewer.enableTextSelection = false; } }, []); return ( { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/" enableTextSelection={true} @@ -176,6 +177,7 @@ function App() { @@ -209,10 +211,11 @@ function App() { - + ); } From bb57c13f68566c02a91dcbf8d8a94c0a1ac36262 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Thu, 23 Oct 2025 19:14:37 +0530 Subject: [PATCH 25/47] 984044: recheck toolbar --- .../annotation-toolbar-customization.md | 19 +++++++++++-------- .../form-designer-toolbar-customization.md | 12 ++++++------ .../toolbar-customization/mobile-toolbar.md | 8 ++++---- .../primary-toolbar-customization.md | 10 +++++----- 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md index fd8ce4c42..8e2425ca0 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md @@ -32,13 +32,13 @@ PdfViewerComponent.Inject(Toolbar, Magnification, Navigation, Annotation, LinkAn BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner); const App = () => { - const pdfviewer = React.useRef(null); + let pdfviewer; React.useEffect(() => { - const buttonElement = document.getElementById('set'); + const buttonElement = document.getElementById('showAnnotationToolbar'); const handleClick = () => { - if (pdfviewer.current) { - pdfviewer.current.toolbar.showAnnotationToolbar(false); + if (pdfviewer) { + pdfviewer.toolbar.showAnnotationToolbar(false); } }; buttonElement?.addEventListener('click', handleClick); @@ -46,14 +46,17 @@ const App = () => { }, []); return ( +

); }; @@ -119,8 +122,8 @@ PdfViewerComponent.Inject(Toolbar, Magnification, Navigation, Annotation, LinkAn BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner); const App = () => { - const pdfviewer = React.useRef(null); - const annotationToolbarItems: AnnotationToolbarItem[] = [ + let pdfviewer; + const annotationToolbarItems = [ "HighlightTool", "UnderlineTool", "StrikethroughTool", @@ -146,7 +149,7 @@ const App = () => { return ( { pdfviewer = scope; }} documentPath='https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf' resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" height="500px" diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md index 2cce2c51f..0115a7f6e 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md @@ -27,14 +27,14 @@ import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, Lin ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, Inject } from '@syncfusion/ej2-react-pdfviewer'; const App = () => { - const pdfviewer = useRef(null); + let pdfviewer; return ( { pdfviewer = scope; }} id="PdfViewer" enableFormDesigner={false} - documentPath="https://cdn.syncfusion.com/content/pdf/formdesigner.pdf" + documentPath="https://cdn.syncfusion.com/content/pdf/form-designer.pdf" resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > @@ -100,13 +100,13 @@ import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, Lin ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, Inject } from '@syncfusion/ej2-react-pdfviewer'; const App = () => { - const pdfviewer = useRef(null); + let pdfviewer; return ( { pdfviewer = scope; }} id="PdfViewer" - documentPath="https://cdn.syncfusion.com/content/pdf/formdesigner.pdf" + documentPath="https://cdn.syncfusion.com/content/pdf/form-designer.pdf" resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" toolbarSettings={{ formDesignerToolbarItems: [ diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md index 4096df9b9..0a7b16ae6 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md @@ -63,7 +63,7 @@ import React from 'react'; import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; function App() { - let pdfviewer: PdfViewerComponent | null; + let pdfviewer; return (
(null); + let pdfviewer; return ( { pdfviewer = scope; }} enableToolbar={false} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" @@ -88,12 +88,12 @@ import React, { useEffect, useRef } from 'react'; import { PdfViewerComponent, Toolbar, Magnification, Navigation, Annotation, LinkAnnotation, ThumbnailView, BookmarkView, TextSelection, TextSearch, FormFields, FormDesigner, Inject } from '@syncfusion/ej2-react-pdfviewer'; function App() { - const pdfviewer = useRef(null); + let pdfviewer; useEffect(() => { const btn = document.getElementById('set'); const handler = () => { - pdfviewer.current?.toolbar.showToolbar(false); + pdfviewer?.toolbar.showToolbar(false); }; btn?.addEventListener('click', handler); return () => btn?.removeEventListener('click', handler); @@ -102,7 +102,7 @@ function App() { return ( { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} From baab5c33490e9718025f523587b3e49cd27676ca Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Fri, 24 Oct 2025 14:24:16 +0530 Subject: [PATCH 26/47] 984044: custom toolbar --- .../annotation-toolbar-customization.md | 3 +- .../toolbar-customization/custom-toolbar.md | 2198 ++++------------- 2 files changed, 419 insertions(+), 1782 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md index 8e2425ca0..ba2018c13 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md @@ -3,8 +3,7 @@ layout: post title: Annotation Toolbar Customization in React Pdfviewer control | Syncfusion description: Learn here all about annotation toolbar customization in Syncfusion React Pdfviewer control of Syncfusion Essential JS 2 and more. platform: document-processing -control: Annotation Toolbar Customization -publishingplatform: PDF Viewer +control: PDF Viewer documentation: ug domainurl: ##DomainURL## --- diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md index ea5558f5d..72e3dc764 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md @@ -2,8 +2,8 @@ layout: post title: Custom Toolbar in React PDF Viewer Component | Syncfusion description: Learn here all about custom toolbar in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. -platform: document-processing control: PDF Viewer +platform: document-processing documentation: ug domainurl: ##DomainURL## --- @@ -16,131 +16,207 @@ Follow these steps to create a custom toolbar for the PDF Viewer: **Step 1: Create a simple PDF Viewer sample.** -Follow the steps provided in the [getting started](https://ej2.syncfusion.com/react/documentation/pdfviewer/getting-started/) guide to create a basic PDF Viewer sample. +Follow the steps provided in the [getting started](https://ej2.syncfusion.com/javascript/documentation/pdfviewer/getting-started/) guide to create a basic PDF Viewer sample. **Step 2: Add HTML elements for the custom toolbar.** -Add HTML `div` elements to act as containers for the custom toolbar actions: - -```html - - - - - Essential JS 2 - - - - - - - - - - - - - - - -
-
-
- - -
-
- - - - - - +{% tabs %} +{% highlight js tabtitle="Standalone" %} +{% raw %} + + render() { + function template() { + return ( +
of 0
+ ); + } + function inputTemplate() { + return ( +
+ ); + } + return (
+
+
+
+ { this.toolbar = scope; }} clicked={this.clickHandler.bind(this)}> + + + + + + + + + + +
+ {/* Render the PDF Viewer */} + { this.viewer = scope; }} + enableToolbar={false} + documentLoad={this.documentLoaded} + pageChange={this.onPageChange} + documentPath="https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + style={{ 'display': 'block', 'height': '640px' }}> + + + + +
+ + + + + + + +
+ +
-
- +
+ ); + } + +{% endraw %} +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} +{% raw %} + + render() { + function template() { + return ( +
of 0
+ ); + } + function inputTemplate() { + return ( +
+ ); + } + return (
+
+
+
+ { this.toolbar = scope; }} clicked={this.clickHandler.bind(this)}> + + + + + + + + + + +
+ {/* Render the PDF Viewer */} + { this.viewer = scope; }} + enableToolbar={false} + documentLoad={this.documentLoaded} + pageChange={this.onPageChange} + documentPath="https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf" + serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer" + style={{ 'display': 'block', 'height': '640px' }}> + + + + +
+ + + + + + + +
+ +
- - -``` + ); + } + +{% endraw %} +{% endhighlight %} +{% endtabs %} **Step 3: Import and inject the necessary modules.** Import and inject the modules required for the custom toolbar functionality: -```ts -import { - PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, - IPageChangeEventArgs, ILoadEventArgs, TextSearch, TextSelection -} from '@syncfusion/ej2-pdfviewer'; -import { Toolbar as Tool, TreeView, NodeSelectEventArgs } from '@syncfusion/ej2-navigations'; -import { ClickEventArgs, Button, CheckBox, ChangeEventArgs } from '@syncfusion/ej2-buttons'; -import { Dialog } from '@syncfusion/ej2-popups'; -PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection); + ```ts -``` + import * as ReactDOM from 'react-dom'; + import * as React from 'react'; + import { + PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Inject + } from '@syncfusion/ej2-react-pdfviewer'; + import { ToolbarComponent, ItemsDirective, ItemDirective, ClickEventArgs } from '@syncfusion/ej2-react-navigations'; + import { RouteComponentProps } from 'react-router'; + + ``` **Step 4: Hide the default toolbar of the PDF Viewer.** Hide the default toolbar using `enableToolbar` and `enableThumbnail` properties: {% tabs %} -{% highlight ts tabtitle="Standalone" %} - -```ts -import * as React from 'react'; -import * as ReactDOM from 'react-dom/client'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - const viewer = React.useRef(null); - return ( - - - - ); -} - -const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); -root.render(); -``` +{% highlight js tabtitle="Standalone" %} +{% raw %} + + { this.viewer = scope; }} +enableToolbar={false} +documentLoad={this.documentLoaded} +pageChange={this.onPageChange} +documentPath="https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf" +resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" +style={{ 'display': 'block', 'height': '640px' }}> + + + + +{% endraw %} {% endhighlight %} -{% highlight ts tabtitle="Server-Backed" %} +{% highlight js tabtitle="Server-Backed" %} +{% raw %} -```ts -import * as React from 'react'; -import * as ReactDOM from 'react-dom/client'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - const viewer = React.useRef(null); - return ( - + id="container" + ref={(scope) => { this.viewer = scope; }} + enableToolbar={false} + documentLoad={this.documentLoaded} + pageChange={this.onPageChange} + documentPath="https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf" + serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer" + style={{ 'display': 'block', 'height': '640px' }}> + + - ); -} -const root = ReactDOM.createRoot(document.getElementById('PdfViewer')); -root.render(); -``` +{% endraw %} {% endhighlight %} {% endtabs %} @@ -148,23 +224,26 @@ root.render(); Add Syncfusion EJ2 Toolbar components to perform primary actions like Open, Previous page, Next page, Go to page, Print, and Download: -```ts - let toolbarObj: Tool = new Tool({ - items: [ - { prefixIcon: 'e-pv-open-document', tooltipText: 'Open', id: 'openButton', click: openDocument.bind(this) }, - { prefixIcon: 'e-pv-bookmark-icon', tooltipText: 'Bookmark', id: 'bookmarkButton', click: bookmarkClicked }, - // tslint:disable-next-line:max-line-length - { prefixIcon: 'e-pv-previous-page-navigation-icon', id: 'previousPage', tooltipText: 'Previous Page', align: 'Center', click: previousClicked.bind(this) }, - // tslint:disable-next-line:max-line-length - { prefixIcon: 'e-pv-next-page-navigation-icon', id: 'nextPage', tooltipText: 'Next Page', align: 'Center', click: nextClicked.bind(this) }, - { template: inputTemplate, tooltipText: 'Page Number', align: 'Center' }, - { template: ele, tooltipText: 'Page Number', align: 'Center' }, - { prefixIcon: 'e-pv-search-icon', tooltipText: 'Text Search', align: 'Right', click: searchClicked.bind(this) }, - { prefixIcon: 'e-pv-print-document-icon', tooltipText: 'Print', align: 'Right', click: printClicked.bind(this) }, - { prefixIcon: 'e-pv-download-document-icon', tooltipText: 'Download', align: 'Right', click: downloadClicked.bind(this) } - ] - }); - toolbarObj.appendTo('#topToolbar'); + ```ts + { toolbar = scope; }} clicked={clickHandler.bind(this)}> + + + + + + + + + + + + + + + + + + ``` @@ -173,1702 +252,261 @@ Add Syncfusion EJ2 Toolbar components to perform primary actions like Open, Prev Add Syncfusion EJ2 Toolbar components to perform magnification actions in the PDF Viewer: ```ts - - let magnificationToolbar: Tool = new Tool({ - items: [ - { prefixIcon: 'e-pv-fit-page-icon', id: 'fitPage', tooltipText: 'Fit to page', click: pageFitClicked.bind(this) }, - { prefixIcon: 'e-pv-zoom-in-icon', id: 'zoomIn', tooltipText: 'Zoom in', click: zoomInClicked.bind(this) }, - { prefixIcon: 'e-pv-zoom-out-icon', id: 'zoomOut', tooltipText: 'Zoom out', click: zoomOutClicked.bind(this) }, - ] - }); - magnificationToolbar.appendTo('#magnificationToolbar'); +
+ + + + + + + +
``` **Step 7: Add custom toolbar styling.** -Add the following CSS styles to achieve the desired custom toolbar styling: - -```css - -``` - -> The icons are embedded in the font file used in the above code snippet. + The icons are embedded in the font file used in the above code snippet. **Step 8: Add scripts for PDF Viewer user interaction.** -Add the following scripts for handling user interactions with the custom toolbar: - -{% tabs %} -{% highlight ts tabtitle="Standalone" %} -```ts - -import { - PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, - IPageChangeEventArgs, ILoadEventArgs, TextSearch, TextSelection -} from '@syncfusion/ej2-pdfviewer'; -import { Toolbar as Tool, TreeView, NodeSelectEventArgs } from '@syncfusion/ej2-navigations'; -import { ClickEventArgs, Button, CheckBox, ChangeEventArgs } from '@syncfusion/ej2-buttons'; -import { Dialog } from '@syncfusion/ej2-popups'; - -PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection); - -/** - * Default PdfViewer sample - */ - -let inputTemplate: string = '
'; -let ele: string = '
of 0
'; -let isBookmarkOpen: boolean = false; -let isBookmarkClick: boolean = false; -let isTextSearchBoxOpen: boolean = false; -let bookmarkPopup: Dialog; -let textSearchPopup: Dialog; -let toolbarObj: Tool; -let viewer: PdfViewer; -let currentPageBox: HTMLElement; -let searchInput: HTMLElement; -let searchButton: HTMLElement; -let matchCase: boolean = false; - -function previousClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.navigation.goToPreviousPage(); -} - -function hidePopups(): void { - isBookmarkOpen = false; - isTextSearchBoxOpen = false; - bookmarkPopup.hide(); - textSearchPopup.hide(); -} - -function bookmarkClicked(): void { - textSearchPopup.hide(); - if (!isBookmarkOpen) { - let bookmarkDetails: any = viewer.bookmark.getBookmarks(); - if (bookmarkDetails.bookmarks) { - let bookmarks: any = bookmarkDetails.bookmarks.bookMark; - let treeObj: TreeView = new TreeView({ - fields: - { - dataSource: bookmarks, - id: 'Id', - parentID: 'Pid', - text: 'Title', - hasChildren: 'HasChild', - }, nodeSelected: nodeClick - }); - treeObj.appendTo('#bookmarkview'); - bookmarkPopup.show(); - isBookmarkOpen = true; - isBookmarkClick = true; - } else { - toolbarObj.enableItems(document.getElementById('bookmarkButton'), false); - isBookmarkOpen = false; - } - } else { - if (!isBookmarkClick) { - bookmarkPopup.show(); - isBookmarkClick = true; - } else { - bookmarkPopup.hide(); - isBookmarkClick = false; - } - } -} - -function nextClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.navigation.goToNextPage(); -} - -function searchClicked(args: ClickEventArgs): void { - bookmarkPopup.hide(); - if (!isTextSearchBoxOpen) { - textSearchPopup.show(); - } else { - viewer.textSearch.cancelTextSearch(); - textSearchPopup.hide(); - } - isTextSearchBoxOpen = !isTextSearchBoxOpen; -} - -function printClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.print.print(); -} - -function downloadClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.download(); -} - -function pageFitClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.fitToPage(); - updateZoomButtons(); - toolbarObj.enableItems(document.getElementById('fitPage'), false); -} - -function zoomInClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.zoomIn(); - updateZoomButtons(); -} - -function zoomOutClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.zoomOut(); - updateZoomButtons(); -} - -function onCurrentPageBoxKeypress(event: KeyboardEvent): boolean { - if ((event.which < 48 || event.which > 57) && event.which !== 8 && event.which !== 13) { - event.preventDefault(); - return false; - } else { - // tslint:disable-next-line:radix - let currentPageNumber: number = parseInt((currentPageBox as HTMLInputElement).value); - if (event.which === 13) { - if (currentPageNumber > 0 && currentPageNumber <= viewer.pageCount) { - viewer.navigation.goToPage(currentPageNumber); - } else { - (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); - } - } - return true; - } -} - -function onCurrentPageBoxClicked(): void { - (currentPageBox as HTMLInputElement).select(); - (currentPageBox).focus(); -} - -function readFile(args: any): void { - // tslint:disable-next-line - let upoadedFiles: any = args.target.files; - if (args.target.files[0] !== null) { - let uploadedFile: File = upoadedFiles[0]; - if (uploadedFile) { - let reader: FileReader = new FileReader(); - let filename: string = upoadedFiles[0].name; - reader.readAsDataURL(uploadedFile); - // tslint:disable-next-line - reader.onload = (e: any): void => { - let uploadedFileUrl: string = e.currentTarget.result; - viewer.load(uploadedFileUrl, null); - viewer.fileName = filename; - (currentPageBox as HTMLInputElement).value = '1'; - document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; - document.getElementById('bookmarkview').innerHTML = ''; - isBookmarkOpen = false; - }; - } - } -} - -function openDocument(e: ClickEventArgs): void { - document.getElementById('fileUpload').click(); -} - -function updatePageNavigation(): void { - if (viewer.currentPageNumber === 1) { - toolbarObj.enableItems(document.getElementById('previousPage'), false); - toolbarObj.enableItems(document.getElementById('nextPage'), true); - } else if (viewer.currentPageNumber === viewer.pageCount) { - toolbarObj.enableItems(document.getElementById('previousPage'), true); - toolbarObj.enableItems(document.getElementById('nextPage'), false); - } else { - toolbarObj.enableItems(document.getElementById('previousPage'), true); - toolbarObj.enableItems(document.getElementById('nextPage'), true); - } -} - -function updateZoomButtons(): void { - if (viewer.zoomPercentage <= 50) { - toolbarObj.enableItems(document.getElementById('zoomIn'), true); - toolbarObj.enableItems(document.getElementById('zoomOut'), false); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } else if (viewer.zoomPercentage >= 400) { - toolbarObj.enableItems(document.getElementById('zoomIn'), false); - toolbarObj.enableItems(document.getElementById('zoomOut'), true); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } else { - toolbarObj.enableItems(document.getElementById('zoomIn'), true); - toolbarObj.enableItems(document.getElementById('zoomOut'), true); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } -} - -function nodeClick(args: NodeSelectEventArgs): boolean { - let bookmarksDetails: any = viewer.bookmark.getBookmarks(); - let bookmarksDestination: any = bookmarksDetails.bookmarksDestination; - let bookid: number = Number(args.nodeData.id); - let pageIndex: number = bookmarksDestination.bookMarkDestination[bookid].PageIndex; - let Y: number = bookmarksDestination.bookMarkDestination[bookid].Y; - viewer.bookmark.goToBookmark(pageIndex, Y); - return false; -} - -function searchInputKeypressed(event: KeyboardEvent): void { - enablePrevButton(true); - enableNextButton(true); - if (event.which === 13) { - initiateTextSearch(); - updateSearchInputIcon(false); - } -} - -function searchClickHandler(): void { - if (searchButton.classList.contains('e-pv-search-icon')) { - viewer.textSearch.cancelTextSearch(); - initiateTextSearch(); - } else if (searchButton.classList.contains('e-pv-search-close')) { - (searchInput as HTMLInputElement).value = ''; - searchInput.focus(); - viewer.textSearch.cancelTextSearch(); - } -} - -function initiateTextSearch(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - viewer.textSearch.searchText(searchString, matchCase); -} - -function previousSearchClicked(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - if (searchString) { - viewer.textSearch.searchPrevious(); - } -} - -function nextSearchClicked(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - if (searchString) { - viewer.textSearch.searchNext(); - } -} - -function checkBoxChanged(args: ChangeEventArgs): void { - if (args.checked) { - matchCase = true; - } else { - matchCase = false; - } - initiateTextSearch(); -} - -function enablePrevButton(isEnable: boolean): void { - let previousSearchButton: HTMLElement = document.getElementById('previousSearch'); - if (isEnable) { - previousSearchButton.removeAttribute('disabled'); - } else { - (previousSearchButton as HTMLButtonElement).disabled = true; - } -} - -function enableNextButton(isEnable: boolean): void { - let nextSearchButton: HTMLElement = document.getElementById('nextSearch'); - if (isEnable) { - nextSearchButton.removeAttribute('disabled'); - } else { - (nextSearchButton as HTMLButtonElement).disabled = true; - } -} - -function updateSearchInputIcon(isEnable: boolean): void { - if (isEnable) { - searchButton.classList.remove('e-pv-search-close'); - searchButton.classList.add('e-pv-search-icon'); - } else { - searchButton.classList.remove('e-pv-search-icon'); - searchButton.classList.add('e-pv-search-close'); - } -} - - - toolbarObj = new Tool({ - items: [ - { prefixIcon: 'e-pv-open-document', tooltipText: 'Open', id: 'openButton', click: openDocument.bind(this) }, - { prefixIcon: 'e-pv-bookmark-icon', tooltipText: 'Bookmark', id: 'bookmarkButton', click: bookmarkClicked }, - // tslint:disable-next-line:max-line-length - { prefixIcon: 'e-pv-previous-page-navigation-icon', id: 'previousPage', tooltipText: 'Previous Page', align: 'Center', click: previousClicked.bind(this) }, - // tslint:disable-next-line:max-line-length - { prefixIcon: 'e-pv-next-page-navigation-icon', id: 'nextPage', tooltipText: 'Next Page', align: 'Center', click: nextClicked.bind(this) }, - { template: inputTemplate, tooltipText: 'Page Number', align: 'Center' }, - { template: ele, tooltipText: 'Page Number', align: 'Center' }, - { prefixIcon: 'e-pv-search-icon', tooltipText: 'Text Search', align: 'Right', click: searchClicked.bind(this) }, - { prefixIcon: 'e-pv-print-document-icon', tooltipText: 'Print', align: 'Right', click: printClicked.bind(this) }, - { prefixIcon: 'e-pv-download-document-icon', tooltipText: 'Download', align: 'Right', click: downloadClicked.bind(this) } - ] - }); - toolbarObj.appendTo('#topToolbar'); - let magnificationToolbar: Tool = new Tool({ - items: [ - { prefixIcon: 'e-pv-fit-page-icon', id: 'fitPage', tooltipText: 'Fit to page', click: pageFitClicked.bind(this) }, - { prefixIcon: 'e-pv-zoom-in-icon', id: 'zoomIn', tooltipText: 'Zoom in', click: zoomInClicked.bind(this) }, - { prefixIcon: 'e-pv-zoom-out-icon', id: 'zoomOut', tooltipText: 'Zoom out', click: zoomOutClicked.bind(this) }, - ] - }); - magnificationToolbar.appendTo('#magnificationToolbar'); - viewer = new PdfViewer({ - enableToolbar: false, - enableThumbnail: false, - documentPath: 'https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf' - }); - viewer.appendTo('#pdfViewer'); - document.getElementById('fileUpload').addEventListener('change', readFile, false); - currentPageBox = document.getElementById('currentPage'); - (currentPageBox as HTMLInputElement).value = '1'; - searchInput = document.getElementById('searchInput'); - bookmarkPopup = new Dialog({ - showCloseIcon: true, header: 'Bookmarks', closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), - content: '
', - buttons: [{ - buttonModel: {}, - }], position: { X: 'left', Y: 'top' }, cssClass: 'e-bookmark-popup', beforeClose: (): void => { - isBookmarkOpen = false; - } - }); - bookmarkPopup.appendTo('#popup'); - - textSearchPopup = new Dialog({ - showCloseIcon: false, closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), - buttons: [{ - buttonModel: {}, - }], position: { X: 'right', Y: 'top' }, cssClass: 'e-text-search-popup', - }); - textSearchPopup.appendTo('#textSearchBox'); - - let previousSearch: Button = new Button({ iconCss: 'e-pv-previous-search' }); - previousSearch.appendTo('#previousSearch'); - - let nextSearch: Button = new Button({ iconCss: 'e-pv-next-search-btn' }); - nextSearch.appendTo('#nextSearch'); - - let matchCaseCheck: CheckBox = new CheckBox({ label: 'Match case', change: checkBoxChanged }); - matchCaseCheck.appendTo('#matchCase'); - - viewer.pageChange = (args: IPageChangeEventArgs): void => { - (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); - updatePageNavigation(); - }; - - viewer.documentLoad = (args: ILoadEventArgs): void => { - document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; - updatePageNavigation(); - }; - searchButton = document.getElementById('searchBtn'); - searchInput.addEventListener('focus', () => { searchInput.parentElement.classList.add('e-input-focus'); }); - searchInput.addEventListener('blur', () => { searchInput.parentElement.classList.remove('e-input-focus'); }); - searchInput.addEventListener('keypress', searchInputKeypressed); - document.getElementById('previousSearch').addEventListener('click', previousSearchClicked); - document.getElementById('nextSearch').addEventListener('click', nextSearchClicked); - currentPageBox.addEventListener('keypress', onCurrentPageBoxKeypress); - currentPageBox.addEventListener('click', onCurrentPageBoxClicked); - searchButton.addEventListener('click', searchClickHandler); - bookmarkPopup.hide(); - textSearchPopup.hide(); - enableNextButton(false); - enablePrevButton(false); - -``` -{% endhighlight %} -{% highlight ts tabtitle="Server-Backed" %} -```ts - -import { - PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, - IPageChangeEventArgs, ILoadEventArgs, TextSearch, TextSelection -} from '@syncfusion/ej2-pdfviewer'; -import { Toolbar as Tool, TreeView, NodeSelectEventArgs } from '@syncfusion/ej2-navigations'; -import { ClickEventArgs, Button, CheckBox, ChangeEventArgs } from '@syncfusion/ej2-buttons'; -import { Dialog } from '@syncfusion/ej2-popups'; - -PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection); - -/** - * Default PdfViewer sample - */ - -let inputTemplate: string = '
'; -let ele: string = '
of 0
'; -let isBookmarkOpen: boolean = false; -let isBookmarkClick: boolean = false; -let isTextSearchBoxOpen: boolean = false; -let bookmarkPopup: Dialog; -let textSearchPopup: Dialog; -let toolbarObj: Tool; -let viewer: PdfViewer; -let currentPageBox: HTMLElement; -let searchInput: HTMLElement; -let searchButton: HTMLElement; -let matchCase: boolean = false; - -function previousClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.navigation.goToPreviousPage(); -} - -function hidePopups(): void { - isBookmarkOpen = false; - isTextSearchBoxOpen = false; - bookmarkPopup.hide(); - textSearchPopup.hide(); -} - -function bookmarkClicked(): void { - textSearchPopup.hide(); - if (!isBookmarkOpen) { - let bookmarkDetails: any = viewer.bookmark.getBookmarks(); - if (bookmarkDetails.bookmarks) { - let bookmarks: any = bookmarkDetails.bookmarks.bookMark; - let treeObj: TreeView = new TreeView({ - fields: - { - dataSource: bookmarks, - id: 'Id', - parentID: 'Pid', - text: 'Title', - hasChildren: 'HasChild', - }, nodeSelected: nodeClick - }); - treeObj.appendTo('#bookmarkview'); - bookmarkPopup.show(); - isBookmarkOpen = true; - isBookmarkClick = true; - } else { - toolbarObj.enableItems(document.getElementById('bookmarkButton'), false); - isBookmarkOpen = false; - } - } else { - if (!isBookmarkClick) { - bookmarkPopup.show(); - isBookmarkClick = true; - } else { - bookmarkPopup.hide(); - isBookmarkClick = false; - } - } -} - -function nextClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.navigation.goToNextPage(); -} - -function searchClicked(args: ClickEventArgs): void { - bookmarkPopup.hide(); - if (!isTextSearchBoxOpen) { - textSearchPopup.show(); - } else { - viewer.textSearch.cancelTextSearch(); - textSearchPopup.hide(); - } - isTextSearchBoxOpen = !isTextSearchBoxOpen; -} - -function printClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.print.print(); -} - -function downloadClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.download(); -} - -function pageFitClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.fitToPage(); - updateZoomButtons(); - toolbarObj.enableItems(document.getElementById('fitPage'), false); -} - -function zoomInClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.zoomIn(); - updateZoomButtons(); -} - -function zoomOutClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.zoomOut(); - updateZoomButtons(); -} - -function onCurrentPageBoxKeypress(event: KeyboardEvent): boolean { - if ((event.which < 48 || event.which > 57) && event.which !== 8 && event.which !== 13) { - event.preventDefault(); - return false; - } else { - // tslint:disable-next-line:radix - let currentPageNumber: number = parseInt((currentPageBox as HTMLInputElement).value); - if (event.which === 13) { - if (currentPageNumber > 0 && currentPageNumber <= viewer.pageCount) { - viewer.navigation.goToPage(currentPageNumber); - } else { - (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); - } - } - return true; - } -} - -function onCurrentPageBoxClicked(): void { - (currentPageBox as HTMLInputElement).select(); - (currentPageBox).focus(); -} - -function readFile(args: any): void { - // tslint:disable-next-line - let upoadedFiles: any = args.target.files; - if (args.target.files[0] !== null) { - let uploadedFile: File = upoadedFiles[0]; - if (uploadedFile) { - let reader: FileReader = new FileReader(); - let filename: string = upoadedFiles[0].name; - reader.readAsDataURL(uploadedFile); - // tslint:disable-next-line - reader.onload = (e: any): void => { - let uploadedFileUrl: string = e.currentTarget.result; - viewer.load(uploadedFileUrl, null); - viewer.fileName = filename; - (currentPageBox as HTMLInputElement).value = '1'; - document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; - document.getElementById('bookmarkview').innerHTML = ''; - isBookmarkOpen = false; - }; + ```ts + + import * as ReactDOM from 'react-dom'; + import * as React from 'react'; + import { + PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Inject + } from '@syncfusion/ej2-react-pdfviewer'; + import { ToolbarComponent, ItemsDirective, ItemDirective, ClickEventArgs } from '@syncfusion/ej2-react-navigations'; + import { RouteComponentProps } from 'react-router'; + + export class CustomToolbar extends SampleBase<{}, {}> { + public viewer: PdfViewerComponent; + public toolbar: ToolbarComponent; + public currentPageNumber: string = '1'; + public fileName: string = ''; + rendereComplete() { + this.wireEvent(); + } + render() { + // template code from step 2 + } + wireEvent() { + let inputElement: HTMLInputElement = document.getElementById('currentPage') as HTMLInputElement; + inputElement.addEventListener('click', this.currentPageClicked.bind(this)); + inputElement.addEventListener('keypress', this.onCurrentPageBoxKeypress.bind(this)); + inputElement.value = this.currentPageNumber; + } + onPageChange = () => { + this.currentPageNumber = this.viewer.currentPageNumber.toString(); + let inputElement: HTMLInputElement = document.getElementById('currentPage') as HTMLInputElement; + inputElement.value = this.currentPageNumber; + this.updatePageNavigation(); + } + clickHandler(args: ClickEventArgs) { + switch (args.item.id) { + case 'file_Open': + document.getElementById('fileUpload').click(); + break; + case 'previous_page': + this.viewer.navigation.goToPreviousPage(); + break; + case 'next_page': + this.viewer.navigation.goToNextPage(); + break; + case 'print': + this.viewer.print.print(); + break; + case 'download': + this.viewer.download(); + break; + case 'fit_to_page': + this.viewer.magnification.fitToPage(); + break; + case 'zoom_in': + this.viewer.magnification.zoomIn(); + break; + case 'zoom_out': + this.viewer.magnification.zoomOut(); + break; } } -} - -function openDocument(e: ClickEventArgs): void { - document.getElementById('fileUpload').click(); -} - -function updatePageNavigation(): void { - if (viewer.currentPageNumber === 1) { - toolbarObj.enableItems(document.getElementById('previousPage'), false); - toolbarObj.enableItems(document.getElementById('nextPage'), true); - } else if (viewer.currentPageNumber === viewer.pageCount) { - toolbarObj.enableItems(document.getElementById('previousPage'), true); - toolbarObj.enableItems(document.getElementById('nextPage'), false); - } else { - toolbarObj.enableItems(document.getElementById('previousPage'), true); - toolbarObj.enableItems(document.getElementById('nextPage'), true); - } -} - -function updateZoomButtons(): void { - if (viewer.zoomPercentage <= 50) { - toolbarObj.enableItems(document.getElementById('zoomIn'), true); - toolbarObj.enableItems(document.getElementById('zoomOut'), false); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } else if (viewer.zoomPercentage >= 400) { - toolbarObj.enableItems(document.getElementById('zoomIn'), false); - toolbarObj.enableItems(document.getElementById('zoomOut'), true); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } else { - toolbarObj.enableItems(document.getElementById('zoomIn'), true); - toolbarObj.enableItems(document.getElementById('zoomOut'), true); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } -} - -function nodeClick(args: NodeSelectEventArgs): boolean { - let bookmarksDetails: any = viewer.bookmark.getBookmarks(); - let bookmarksDestination: any = bookmarksDetails.bookmarksDestination; - let bookid: number = Number(args.nodeData.id); - let pageIndex: number = bookmarksDestination.bookMarkDestination[bookid].PageIndex; - let Y: number = bookmarksDestination.bookMarkDestination[bookid].Y; - viewer.bookmark.goToBookmark(pageIndex, Y); - return false; -} - -function searchInputKeypressed(event: KeyboardEvent): void { - enablePrevButton(true); - enableNextButton(true); - if (event.which === 13) { - initiateTextSearch(); - updateSearchInputIcon(false); - } -} - -function searchClickHandler(): void { - if (searchButton.classList.contains('e-pv-search-icon')) { - viewer.textSearch.cancelTextSearch(); - initiateTextSearch(); - } else if (searchButton.classList.contains('e-pv-search-close')) { - (searchInput as HTMLInputElement).value = ''; - searchInput.focus(); - viewer.textSearch.cancelTextSearch(); + documentLoaded = () => { + var pageCount = document.getElementById('totalPage'); + pageCount.textContent = 'of ' + this.viewer.pageCount; + this.updatePageNavigation(); } -} -function initiateTextSearch(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - viewer.textSearch.searchText(searchString, matchCase); -} - -function previousSearchClicked(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - if (searchString) { - viewer.textSearch.searchPrevious(); - } -} - -function nextSearchClicked(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - if (searchString) { - viewer.textSearch.searchNext(); - } -} - -function checkBoxChanged(args: ChangeEventArgs): void { - if (args.checked) { - matchCase = true; - } else { - matchCase = false; - } - initiateTextSearch(); -} - -function enablePrevButton(isEnable: boolean): void { - let previousSearchButton: HTMLElement = document.getElementById('previousSearch'); - if (isEnable) { - previousSearchButton.removeAttribute('disabled'); - } else { - (previousSearchButton as HTMLButtonElement).disabled = true; - } -} - -function enableNextButton(isEnable: boolean): void { - let nextSearchButton: HTMLElement = document.getElementById('nextSearch'); - if (isEnable) { - nextSearchButton.removeAttribute('disabled'); - } else { - (nextSearchButton as HTMLButtonElement).disabled = true; - } -} - -function updateSearchInputIcon(isEnable: boolean): void { - if (isEnable) { - searchButton.classList.remove('e-pv-search-close'); - searchButton.classList.add('e-pv-search-icon'); - } else { - searchButton.classList.remove('e-pv-search-icon'); - searchButton.classList.add('e-pv-search-close'); - } -} - - - toolbarObj = new Tool({ - items: [ - { prefixIcon: 'e-pv-open-document', tooltipText: 'Open', id: 'openButton', click: openDocument.bind(this) }, - { prefixIcon: 'e-pv-bookmark-icon', tooltipText: 'Bookmark', id: 'bookmarkButton', click: bookmarkClicked }, - // tslint:disable-next-line:max-line-length - { prefixIcon: 'e-pv-previous-page-navigation-icon', id: 'previousPage', tooltipText: 'Previous Page', align: 'Center', click: previousClicked.bind(this) }, - // tslint:disable-next-line:max-line-length - { prefixIcon: 'e-pv-next-page-navigation-icon', id: 'nextPage', tooltipText: 'Next Page', align: 'Center', click: nextClicked.bind(this) }, - { template: inputTemplate, tooltipText: 'Page Number', align: 'Center' }, - { template: ele, tooltipText: 'Page Number', align: 'Center' }, - { prefixIcon: 'e-pv-search-icon', tooltipText: 'Text Search', align: 'Right', click: searchClicked.bind(this) }, - { prefixIcon: 'e-pv-print-document-icon', tooltipText: 'Print', align: 'Right', click: printClicked.bind(this) }, - { prefixIcon: 'e-pv-download-document-icon', tooltipText: 'Download', align: 'Right', click: downloadClicked.bind(this) } - ] - }); - toolbarObj.appendTo('#topToolbar'); - let magnificationToolbar: Tool = new Tool({ - items: [ - { prefixIcon: 'e-pv-fit-page-icon', id: 'fitPage', tooltipText: 'Fit to page', click: pageFitClicked.bind(this) }, - { prefixIcon: 'e-pv-zoom-in-icon', id: 'zoomIn', tooltipText: 'Zoom in', click: zoomInClicked.bind(this) }, - { prefixIcon: 'e-pv-zoom-out-icon', id: 'zoomOut', tooltipText: 'Zoom out', click: zoomOutClicked.bind(this) }, - ] - }); - magnificationToolbar.appendTo('#magnificationToolbar'); - viewer = new PdfViewer({ - enableToolbar: false, - enableThumbnail: false, - documentPath: 'https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf' - }); - viewer.appendTo('#pdfViewer'); - document.getElementById('fileUpload').addEventListener('change', readFile, false); - currentPageBox = document.getElementById('currentPage'); - (currentPageBox as HTMLInputElement).value = '1'; - searchInput = document.getElementById('searchInput'); - bookmarkPopup = new Dialog({ - showCloseIcon: true, header: 'Bookmarks', closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), - content: '
', - buttons: [{ - buttonModel: {}, - }], position: { X: 'left', Y: 'top' }, cssClass: 'e-bookmark-popup', beforeClose: (): void => { - isBookmarkOpen = false; - } - }); - bookmarkPopup.appendTo('#popup'); - - textSearchPopup = new Dialog({ - showCloseIcon: false, closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), - buttons: [{ - buttonModel: {}, - }], position: { X: 'right', Y: 'top' }, cssClass: 'e-text-search-popup', - }); - textSearchPopup.appendTo('#textSearchBox'); - - let previousSearch: Button = new Button({ iconCss: 'e-pv-previous-search' }); - previousSearch.appendTo('#previousSearch'); - - let nextSearch: Button = new Button({ iconCss: 'e-pv-next-search-btn' }); - nextSearch.appendTo('#nextSearch'); - - let matchCaseCheck: CheckBox = new CheckBox({ label: 'Match case', change: checkBoxChanged }); - matchCaseCheck.appendTo('#matchCase'); - - viewer.pageChange = (args: IPageChangeEventArgs): void => { - (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); - updatePageNavigation(); - }; - - viewer.documentLoad = (args: ILoadEventArgs): void => { - document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; - updatePageNavigation(); - }; - searchButton = document.getElementById('searchBtn'); - searchInput.addEventListener('focus', () => { searchInput.parentElement.classList.add('e-input-focus'); }); - searchInput.addEventListener('blur', () => { searchInput.parentElement.classList.remove('e-input-focus'); }); - searchInput.addEventListener('keypress', searchInputKeypressed); - document.getElementById('previousSearch').addEventListener('click', previousSearchClicked); - document.getElementById('nextSearch').addEventListener('click', nextSearchClicked); - currentPageBox.addEventListener('keypress', onCurrentPageBoxKeypress); - currentPageBox.addEventListener('click', onCurrentPageBoxClicked); - searchButton.addEventListener('click', searchClickHandler); - bookmarkPopup.hide(); - textSearchPopup.hide(); - enableNextButton(false); - enablePrevButton(false); - -``` -{% endhighlight %} -{% highlight ts tabtitle="Server-Backed" %} -```ts - -import { - PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, - IPageChangeEventArgs, ILoadEventArgs, TextSearch, TextSelection -} from '@syncfusion/ej2-pdfviewer'; -import { Toolbar as Tool, TreeView, NodeSelectEventArgs } from '@syncfusion/ej2-navigations'; -import { ClickEventArgs, Button, CheckBox, ChangeEventArgs } from '@syncfusion/ej2-buttons'; -import { Dialog } from '@syncfusion/ej2-popups'; - -PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection); - -/** - * Default PdfViewer sample - */ - -let inputTemplate: string = '
'; -let ele: string = '
of 0
'; -let isBookmarkOpen: boolean = false; -let isBookmarkClick: boolean = false; -let isTextSearchBoxOpen: boolean = false; -let bookmarkPopup: Dialog; -let textSearchPopup: Dialog; -let toolbarObj: Tool; -let viewer: PdfViewer; -let currentPageBox: HTMLElement; -let searchInput: HTMLElement; -let searchButton: HTMLElement; -let matchCase: boolean = false; - -function previousClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.navigation.goToPreviousPage(); -} - -function hidePopups(): void { - isBookmarkOpen = false; - isTextSearchBoxOpen = false; - bookmarkPopup.hide(); - textSearchPopup.hide(); -} - -function bookmarkClicked(): void { - textSearchPopup.hide(); - if (!isBookmarkOpen) { - let bookmarkDetails: any = viewer.bookmark.getBookmarks(); - if (bookmarkDetails.bookmarks) { - let bookmarks: any = bookmarkDetails.bookmarks.bookMark; - let treeObj: TreeView = new TreeView({ - fields: - { - dataSource: bookmarks, - id: 'Id', - parentID: 'Pid', - text: 'Title', - hasChildren: 'HasChild', - }, nodeSelected: nodeClick - }); - treeObj.appendTo('#bookmarkview'); - bookmarkPopup.show(); - isBookmarkOpen = true; - isBookmarkClick = true; - } else { - toolbarObj.enableItems(document.getElementById('bookmarkButton'), false); - isBookmarkOpen = false; - } - } else { - if (!isBookmarkClick) { - bookmarkPopup.show(); - isBookmarkClick = true; + updatePageNavigation() { + if (this.viewer.currentPageNumber === 1) { + this.toolbar.enableItems(document.getElementById('previous_page').parentElement, false); + this.toolbar.enableItems(document.getElementById('next_page').parentElement, true); + } else if (this.viewer.currentPageNumber === this.viewer.pageCount) { + this.toolbar.enableItems(document.getElementById('previous_page').parentElement, true); + this.toolbar.enableItems(document.getElementById('next_page').parentElement, false); } else { - bookmarkPopup.hide(); - isBookmarkClick = false; - } - } -} - -function nextClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.navigation.goToNextPage(); -} - -function searchClicked(args: ClickEventArgs): void { - bookmarkPopup.hide(); - if (!isTextSearchBoxOpen) { - textSearchPopup.show(); - } else { - viewer.textSearch.cancelTextSearch(); - textSearchPopup.hide(); - } - isTextSearchBoxOpen = !isTextSearchBoxOpen; -} - -function printClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.print.print(); -} - -function downloadClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.download(); -} - -function pageFitClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.fitToPage(); - updateZoomButtons(); - toolbarObj.enableItems(document.getElementById('fitPage'), false); -} - -function zoomInClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.zoomIn(); - updateZoomButtons(); -} - -function zoomOutClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.zoomOut(); - updateZoomButtons(); -} - -function onCurrentPageBoxKeypress(event: KeyboardEvent): boolean { - if ((event.which < 48 || event.which > 57) && event.which !== 8 && event.which !== 13) { - event.preventDefault(); - return false; - } else { - // tslint:disable-next-line:radix - let currentPageNumber: number = parseInt((currentPageBox as HTMLInputElement).value); - if (event.which === 13) { - if (currentPageNumber > 0 && currentPageNumber <= viewer.pageCount) { - viewer.navigation.goToPage(currentPageNumber); - } else { - (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); - } - } - return true; - } -} - -function onCurrentPageBoxClicked(): void { - (currentPageBox as HTMLInputElement).select(); - (currentPageBox).focus(); -} - -function readFile(args: any): void { - // tslint:disable-next-line - let upoadedFiles: any = args.target.files; - if (args.target.files[0] !== null) { - let uploadedFile: File = upoadedFiles[0]; - if (uploadedFile) { - let reader: FileReader = new FileReader(); - let filename: string = upoadedFiles[0].name; - reader.readAsDataURL(uploadedFile); - // tslint:disable-next-line - reader.onload = (e: any): void => { - let uploadedFileUrl: string = e.currentTarget.result; - viewer.load(uploadedFileUrl, null); - viewer.fileName = filename; - (currentPageBox as HTMLInputElement).value = '1'; - document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; - document.getElementById('bookmarkview').innerHTML = ''; - isBookmarkOpen = false; - }; + this.toolbar.enableItems(document.getElementById('previous_page').parentElement, true); + this.toolbar.enableItems(document.getElementById('next_page').parentElement, true); } } -} - -function openDocument(e: ClickEventArgs): void { - document.getElementById('fileUpload').click(); -} - -function updatePageNavigation(): void { - if (viewer.currentPageNumber === 1) { - toolbarObj.enableItems(document.getElementById('previousPage'), false); - toolbarObj.enableItems(document.getElementById('nextPage'), true); - } else if (viewer.currentPageNumber === viewer.pageCount) { - toolbarObj.enableItems(document.getElementById('previousPage'), true); - toolbarObj.enableItems(document.getElementById('nextPage'), false); - } -} - -function updateZoomButtons(): void { - if (viewer.zoomPercentage <= 50) { - toolbarObj.enableItems(document.getElementById('zoomIn'), true); - toolbarObj.enableItems(document.getElementById('zoomOut'), false); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } else if (viewer.zoomPercentage >= 400) { - toolbarObj.enableItems(document.getElementById('zoomIn'), false); - toolbarObj.enableItems(document.getElementById('zoomOut'), true); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } else { - toolbarObj.enableItems(document.getElementById('zoomIn'), true); - toolbarObj.enableItems(document.getElementById('zoomOut'), true); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } -} - -function nodeClick(args: NodeSelectEventArgs): boolean { - let bookmarksDetails: any = viewer.bookmark.getBookmarks(); - let bookmarksDestination: any = bookmarksDetails.bookmarksDestination; - let bookid: number = Number(args.nodeData.id); - let pageIndex: number = bookmarksDestination.bookMarkDestination[bookid].PageIndex; - let Y: number = bookmarksDestination.bookMarkDestination[bookid].Y; - viewer.bookmark.goToBookmark(pageIndex, Y); - return false; -} - -function searchInputKeypressed(event: KeyboardEvent): void { - enablePrevButton(true); - enableNextButton(true); - if (event.which === 13) { - initiateTextSearch(); - updateSearchInputIcon(false); - } -} - -function searchClickHandler(): void { - if (searchButton.classList.contains('e-pv-search-icon')) { - viewer.textSearch.cancelTextSearch(); - initiateTextSearch(); - } else if (searchButton.classList.contains('e-pv-search-close')) { - (searchInput as HTMLInputElement).value = ''; - searchInput.focus(); - viewer.textSearch.cancelTextSearch(); - } -} - -function initiateTextSearch(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - viewer.textSearch.searchText(searchString, matchCase); -} - -function previousSearchClicked(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - if (searchString) { - viewer.textSearch.searchPrevious(); - } -} - -function nextSearchClicked(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - if (searchString) { - viewer.textSearch.searchNext(); - } -} - -function checkBoxChanged(args: ChangeEventArgs): void { - if (args.checked) { - matchCase = true; - } else { - matchCase = false; - } - initiateTextSearch(); -} - -function enablePrevButton(isEnable: boolean): void { - let previousSearchButton: HTMLElement = document.getElementById('previousSearch'); - if (isEnable) { - previousSearchButton.removeAttribute('disabled'); - } else { - (previousSearchButton as HTMLButtonElement).disabled = true; - } -} - -function enableNextButton(isEnable: boolean): void { - let nextSearchButton: HTMLElement = document.getElementById('nextSearch'); - if (isEnable) { - nextSearchButton.removeAttribute('disabled'); - } else { - (nextSearchButton as HTMLButtonElement).disabled = true; - } -} - -function updateSearchInputIcon(isEnable: boolean): void { - if (isEnable) { - searchButton.classList.remove('e-pv-search-close'); - searchButton.classList.add('e-pv-search-icon'); - } else { - searchButton.classList.remove('e-pv-search-icon'); - searchButton.classList.add('e-pv-search-close'); - } -} - - - toolbarObj = new Tool({ - items: [ - { prefixIcon: 'e-pv-open-document', tooltipText: 'Open', id: 'openButton', click: openDocument.bind(this) }, - { prefixIcon: 'e-pv-bookmark-icon', tooltipText: 'Bookmark', id: 'bookmarkButton', click: bookmarkClicked }, - // tslint:disable-next-line:max-line-length - { prefixIcon: 'e-pv-previous-page-navigation-icon', id: 'previousPage', tooltipText: 'Previous Page', align: 'Center', click: previousClicked.bind(this) }, - // tslint:disable-next-line:max-line-length - { prefixIcon: 'e-pv-next-page-navigation-icon', id: 'nextPage', tooltipText: 'Next Page', align: 'Center', click: nextClicked.bind(this) }, - { template: inputTemplate, tooltipText: 'Page Number', align: 'Center' }, - { template: ele, tooltipText: 'Page Number', align: 'Center' }, - { prefixIcon: 'e-pv-search-icon', tooltipText: 'Text Search', align: 'Right', click: searchClicked.bind(this) }, - { prefixIcon: 'e-pv-print-document-icon', tooltipText: 'Print', align: 'Right', click: printClicked.bind(this) }, - { prefixIcon: 'e-pv-download-document-icon', tooltipText: 'Download', align: 'Right', click: downloadClicked.bind(this) } - ] - }); - toolbarObj.appendTo('#topToolbar'); - let magnificationToolbar: Tool = new Tool({ - items: [ - { prefixIcon: 'e-pv-fit-page-icon', id: 'fitPage', tooltipText: 'Fit to page', click: pageFitClicked.bind(this) }, - { prefixIcon: 'e-pv-zoom-in-icon', id: 'zoomIn', tooltipText: 'Zoom in', click: zoomInClicked.bind(this) }, - { prefixIcon: 'e-pv-zoom-out-icon', id: 'zoomOut', tooltipText: 'Zoom out', click: zoomOutClicked.bind(this) }, - ] - }); - magnificationToolbar.appendTo('#magnificationToolbar'); - viewer = new PdfViewer({ - enableToolbar: false, - enableThumbnail: false, - documentPath: 'https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf' - }); - viewer.appendTo('#pdfViewer'); - document.getElementById('fileUpload').addEventListener('change', readFile, false); - currentPageBox = document.getElementById('currentPage'); - (currentPageBox as HTMLInputElement).value = '1'; - searchInput = document.getElementById('searchInput'); - bookmarkPopup = new Dialog({ - showCloseIcon: true, header: 'Bookmarks', closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), - content: '
', - buttons: [{ - buttonModel: {}, - }], position: { X: 'left', Y: 'top' }, cssClass: 'e-bookmark-popup', beforeClose: (): void => { - isBookmarkOpen = false; - } - }); - bookmarkPopup.appendTo('#popup'); - - textSearchPopup = new Dialog({ - showCloseIcon: false, closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), - buttons: [{ - buttonModel: {}, - }], position: { X: 'right', Y: 'top' }, cssClass: 'e-text-search-popup', - }); - textSearchPopup.appendTo('#textSearchBox'); - - let previousSearch: Button = new Button({ iconCss: 'e-pv-previous-search' }); - previousSearch.appendTo('#previousSearch'); - - let nextSearch: Button = new Button({ iconCss: 'e-pv-next-search-btn' }); - nextSearch.appendTo('#nextSearch'); - - let matchCaseCheck: CheckBox = new CheckBox({ label: 'Match case', change: checkBoxChanged }); - matchCaseCheck.appendTo('#matchCase'); - - viewer.pageChange = (args: IPageChangeEventArgs): void => { - (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); - updatePageNavigation(); - }; - - viewer.documentLoad = (args: ILoadEventArgs): void => { - document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; - updatePageNavigation(); - }; - searchButton = document.getElementById('searchBtn'); - searchInput.addEventListener('focus', () => { searchInput.parentElement.classList.add('e-input-focus'); }); - searchInput.addEventListener('blur', () => { searchInput.parentElement.classList.remove('e-input-focus'); }); - searchInput.addEventListener('keypress', searchInputKeypressed); - document.getElementById('previousSearch').addEventListener('click', previousSearchClicked); - document.getElementById('nextSearch').addEventListener('click', nextSearchClicked); - currentPageBox.addEventListener('keypress', onCurrentPageBoxKeypress); - currentPageBox.addEventListener('click', onCurrentPageBoxClicked); - searchButton.addEventListener('click', searchClickHandler); - bookmarkPopup.hide(); - textSearchPopup.hide(); - enableNextButton(false); - enablePrevButton(false); -``` -{% endhighlight %} -{% highlight ts tabtitle="Server-Backed" %} -```ts - -import { - PdfViewer, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, - IPageChangeEventArgs, ILoadEventArgs, TextSearch, TextSelection -} from '@syncfusion/ej2-pdfviewer'; -import { Toolbar as Tool, TreeView, NodeSelectEventArgs } from '@syncfusion/ej2-navigations'; -import { ClickEventArgs, Button, CheckBox, ChangeEventArgs } from '@syncfusion/ej2-buttons'; -import { Dialog } from '@syncfusion/ej2-popups'; - -PdfViewer.Inject(Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSearch, TextSelection); - -/** - * Default PdfViewer sample - */ - -let inputTemplate: string = '
'; -let ele: string = '
of 0
'; -let isBookmarkOpen: boolean = false; -let isBookmarkClick: boolean = false; -let isTextSearchBoxOpen: boolean = false; -let bookmarkPopup: Dialog; -let textSearchPopup: Dialog; -let toolbarObj: Tool; -let viewer: PdfViewer; -let currentPageBox: HTMLElement; -let searchInput: HTMLElement; -let searchButton: HTMLElement; -let matchCase: boolean = false; - -function previousClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.navigation.goToPreviousPage(); -} - -function hidePopups(): void { - isBookmarkOpen = false; - isTextSearchBoxOpen = false; - bookmarkPopup.hide(); - textSearchPopup.hide(); -} - -function bookmarkClicked(): void { - textSearchPopup.hide(); - if (!isBookmarkOpen) { - let bookmarkDetails: any = viewer.bookmark.getBookmarks(); - if (bookmarkDetails.bookmarks) { - let bookmarks: any = bookmarkDetails.bookmarks.bookMark; - let treeObj: TreeView = new TreeView({ - fields: - { - dataSource: bookmarks, - id: 'Id', - parentID: 'Pid', - text: 'Title', - hasChildren: 'HasChild', - }, nodeSelected: nodeClick - }); - treeObj.appendTo('#bookmarkview'); - bookmarkPopup.show(); - isBookmarkOpen = true; - isBookmarkClick = true; - } else { - toolbarObj.enableItems(document.getElementById('bookmarkButton'), false); - isBookmarkOpen = false; - } - } -} else { - if (!isBookmarkClick) { - bookmarkPopup.show(); - isBookmarkClick = true; - } else { - bookmarkPopup.hide(); - isBookmarkClick = false; + onCurrentPageBoxKeypress(event) { + let currentPageBox: HTMLInputElement = document.getElementById('currentPage') as HTMLInputElement; + if ((event.which < 48 || event.which > 57) && event.which !== 8 && event.which !== 13) { + event.preventDefault(); + return false; } - } -} - -function nextClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.navigation.goToNextPage(); -} - -function searchClicked(args: ClickEventArgs): void { - bookmarkPopup.hide(); - if (!isTextSearchBoxOpen) { - textSearchPopup.show(); - } else { - viewer.textSearch.cancelTextSearch(); - textSearchPopup.hide(); - } - isTextSearchBoxOpen = !isTextSearchBoxOpen; -} - -function printClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.print.print(); -} - -function downloadClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.download(); -} - -function pageFitClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.fitToPage(); - updateZoomButtons(); - toolbarObj.enableItems(document.getElementById('fitPage'), false); -} - -function zoomInClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.zoomIn(); - updateZoomButtons(); -} - -function zoomOutClicked(args: ClickEventArgs): void { - hidePopups(); - viewer.magnification.zoomOut(); - updateZoomButtons(); -} - -function onCurrentPageBoxKeypress(event: KeyboardEvent): boolean { - if ((event.which < 48 || event.which > 57) && event.which !== 8 && event.which !== 13) { - event.preventDefault(); - return false; - } else { - // tslint:disable-next-line:radix - let currentPageNumber: number = parseInt((currentPageBox as HTMLInputElement).value); - if (event.which === 13) { - if (currentPageNumber > 0 && currentPageNumber <= viewer.pageCount) { - viewer.navigation.goToPage(currentPageNumber); - } else { - (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); + else { + var currentPageNumber = parseInt(currentPageBox.value); + if (event.which === 13) { + if (currentPageNumber > 0 && currentPageNumber <= this.viewer.pageCount) { + this.viewer.navigation.goToPage(currentPageNumber); + } + else { + currentPageBox.value = this.viewer.currentPageNumber.toString(); + } } + return true; } - return true; } -} - -function onCurrentPageBoxClicked(): void { - (currentPageBox as HTMLInputElement).select(); - (currentPageBox).focus(); -} - -function readFile(args: any): void { - // tslint:disable-next-line - let upoadedFiles: any = args.target.files; - if (args.target.files[0] !== null) { - let uploadedFile: File = upoadedFiles[0]; - if (uploadedFile) { - let reader: FileReader = new FileReader(); - let filename: string = upoadedFiles[0].name; - reader.readAsDataURL(uploadedFile); - // tslint:disable-next-line - reader.onload = (e: any): void => { - let uploadedFileUrl: string = e.currentTarget.result; - viewer.load(uploadedFileUrl, null); - viewer.fileName = filename; - (currentPageBox as HTMLInputElement).value = '1'; - document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; - document.getElementById('bookmarkview').innerHTML = ''; - isBookmarkOpen = false; - }; + currentPageClicked() { + let currentPage: HTMLInputElement = document.getElementById('currentPage') as HTMLInputElement; + currentPage.select(); + } + + readFile(evt) { + let uploadedFiles = evt.target.files; + let uploadedFile = uploadedFiles[0]; + this.fileName = uploadedFile.name; + let reader = new FileReader(); + reader.readAsDataURL(uploadedFile); + let viewer: PdfViewerComponent = this.viewer; + let uploadedFileName: string = this.fileName; + reader.onload = function () { + let uploadedFileUrl: string = this.result as string; + viewer.load(uploadedFileUrl, null); + viewer.fileName = uploadedFileName; + var pageCount = document.getElementById('totalPage'); + pageCount.textContent = 'of ' + viewer.pageCount; } } -} - -function openDocument(e: ClickEventArgs): void { - document.getElementById('fileUpload').click(); -} - -function updatePageNavigation(): void { - if (viewer.currentPageNumber === 1) { - toolbarObj.enableItems(document.getElementById('previousPage'), false); - toolbarObj.enableItems(document.getElementById('nextPage'), true); - } else if (viewer.currentPageNumber === viewer.pageCount) { - toolbarObj.enableItems(document.getElementById('previousPage'), true); - toolbarObj.enableItems(document.getElementById('nextPage'), false); - } else { - toolbarObj.enableItems(document.getElementById('previousPage'), true); - toolbarObj.enableItems(document.getElementById('nextPage'), true); - } -} - -function updateZoomButtons(): void { - if (viewer.zoomPercentage <= 50) { - toolbarObj.enableItems(document.getElementById('zoomIn'), true); - toolbarObj.enableItems(document.getElementById('zoomOut'), false); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } else if (viewer.zoomPercentage >= 400) { - toolbarObj.enableItems(document.getElementById('zoomIn'), false); - toolbarObj.enableItems(document.getElementById('zoomOut'), true); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } else { - toolbarObj.enableItems(document.getElementById('zoomIn'), true); - toolbarObj.enableItems(document.getElementById('zoomOut'), true); - toolbarObj.enableItems(document.getElementById('fitPage'), true); - } -} - -function nodeClick(args: NodeSelectEventArgs): boolean { - let bookmarksDetails: any = viewer.bookmark.getBookmarks(); - let bookmarksDestination: any = bookmarksDetails.bookmarksDestination; - let bookid: number = Number(args.nodeData.id); - let pageIndex: number = bookmarksDestination.bookMarkDestination[bookid].PageIndex; - let Y: number = bookmarksDestination.bookMarkDestination[bookid].Y; - viewer.bookmark.goToBookmark(pageIndex, Y); - return false; -} - -function searchInputKeypressed(event: KeyboardEvent): void { - enablePrevButton(true); - enableNextButton(true); - if (event.which === 13) { - initiateTextSearch(); - updateSearchInputIcon(false); - } -} - -function searchClickHandler(): void { - if (searchButton.classList.contains('e-pv-search-icon')) { - viewer.textSearch.cancelTextSearch(); - initiateTextSearch(); - } else if (searchButton.classList.contains('e-pv-search-close')) { - (searchInput as HTMLInputElement).value = ''; - searchInput.focus(); - viewer.textSearch.cancelTextSearch(); - } -} -function initiateTextSearch(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - viewer.textSearch.searchText(searchString, matchCase); -} + } -function previousSearchClicked(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - if (searchString) { - viewer.textSearch.searchPrevious(); - } -} + ``` -function nextSearchClicked(): void { - let searchString: string = (searchInput as HTMLInputElement).value; - if (searchString) { - viewer.textSearch.searchNext(); - } -} -function checkBoxChanged(args: ChangeEventArgs): void { - if (args.checked) { - matchCase = true; - } else { - matchCase = false; - } - initiateTextSearch(); -} - -function enablePrevButton(isEnable: boolean): void { - let previousSearchButton: HTMLElement = document.getElementById('previousSearch'); - if (isEnable) { - previousSearchButton.removeAttribute('disabled'); - } else { - (previousSearchButton as HTMLButtonElement).disabled = true; - } -} - -function enableNextButton(isEnable: boolean): void { - let nextSearchButton: HTMLElement = document.getElementById('nextSearch'); - if (isEnable) { - nextSearchButton.removeAttribute('disabled'); - } else { - (nextSearchButton as HTMLButtonElement).disabled = true; - } -} - -function updateSearchInputIcon(isEnable: boolean): void { - if (isEnable) { - searchButton.classList.remove('e-pv-search-close'); - searchButton.classList.add('e-pv-search-icon'); - } else { - searchButton.classList.remove('e-pv-search-icon'); - searchButton.classList.add('e-pv-search-close'); - } -} - - - toolbarObj = new Tool({ - items: [ - { prefixIcon: 'e-pv-open-document', tooltipText: 'Open', id: 'openButton', click: openDocument.bind(this) }, - { prefixIcon: 'e-pv-bookmark-icon', tooltipText: 'Bookmark', id: 'bookmarkButton', click: bookmarkClicked }, - // tslint:disable-next-line:max-line-length - { prefixIcon: 'e-pv-previous-page-navigation-icon', id: 'previousPage', tooltipText: 'Previous Page', align: 'Center', click: previousClicked.bind(this) }, - // tslint:disable-next-line:max-line-length - { prefixIcon: 'e-pv-next-page-navigation-icon', id: 'nextPage', tooltipText: 'Next Page', align: 'Center', click: nextClicked.bind(this) }, - { template: inputTemplate, tooltipText: 'Page Number', align: 'Center' }, - { template: ele, tooltipText: 'Page Number', align: 'Center' }, - { prefixIcon: 'e-pv-search-icon', tooltipText: 'Text Search', align: 'Right', click: searchClicked.bind(this) }, - { prefixIcon: 'e-pv-print-document-icon', tooltipText: 'Print', align: 'Right', click: printClicked.bind(this) }, - { prefixIcon: 'e-pv-download-document-icon', tooltipText: 'Download', align: 'Right', click: downloadClicked.bind(this) } - ] - }); - toolbarObj.appendTo('#topToolbar'); - let magnificationToolbar: Tool = new Tool({ - items: [ - { prefixIcon: 'e-pv-fit-page-icon', id: 'fitPage', tooltipText: 'Fit to page', click: pageFitClicked.bind(this) }, - { prefixIcon: 'e-pv-zoom-in-icon', id: 'zoomIn', tooltipText: 'Zoom in', click: zoomInClicked.bind(this) }, - { prefixIcon: 'e-pv-zoom-out-icon', id: 'zoomOut', tooltipText: 'Zoom out', click: zoomOutClicked.bind(this) }, - ] - }); - magnificationToolbar.appendTo('#magnificationToolbar'); - viewer = new PdfViewer({ - enableToolbar: false, - enableThumbnail: false, - documentPath: 'https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf', - serviceUrl: 'https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer/' - }); - viewer.appendTo('#pdfViewer'); - document.getElementById('fileUpload').addEventListener('change', readFile, false); - currentPageBox = document.getElementById('currentPage'); - (currentPageBox as HTMLInputElement).value = '1'; - searchInput = document.getElementById('searchInput'); - bookmarkPopup = new Dialog({ - showCloseIcon: true, header: 'Bookmarks', closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), - content: '
', - buttons: [{ - buttonModel: {}, - }], position: { X: 'left', Y: 'top' }, cssClass: 'e-bookmark-popup', beforeClose: (): void => { - isBookmarkOpen = false; - } - }); - bookmarkPopup.appendTo('#popup'); - - textSearchPopup = new Dialog({ - showCloseIcon: false, closeOnEscape: false, isModal: false, target: document.getElementById('pdfViewer'), - buttons: [{ - buttonModel: {}, - }], position: { X: 'right', Y: 'top' }, cssClass: 'e-text-search-popup', - }); - textSearchPopup.appendTo('#textSearchBox'); - - let previousSearch: Button = new Button({ iconCss: 'e-pv-previous-search' }); - previousSearch.appendTo('#previousSearch'); - - let nextSearch: Button = new Button({ iconCss: 'e-pv-next-search-btn' }); - nextSearch.appendTo('#nextSearch'); - - let matchCaseCheck: CheckBox = new CheckBox({ label: 'Match case', change: checkBoxChanged }); - matchCaseCheck.appendTo('#matchCase'); - - viewer.pageChange = (args: IPageChangeEventArgs): void => { - (currentPageBox as HTMLInputElement).value = viewer.currentPageNumber.toString(); - updatePageNavigation(); - }; - - viewer.documentLoad = (args: ILoadEventArgs): void => { - document.getElementById('totalPage').textContent = 'of ' + viewer.pageCount; - updatePageNavigation(); - }; - searchButton = document.getElementById('searchBtn'); - searchInput.addEventListener('focus', () => { searchInput.parentElement.classList.add('e-input-focus'); }); - searchInput.addEventListener('blur', () => { searchInput.parentElement.classList.remove('e-input-focus'); }); - searchInput.addEventListener('keypress', searchInputKeypressed); - document.getElementById('previousSearch').addEventListener('click', previousSearchClicked); - document.getElementById('nextSearch').addEventListener('click', nextSearchClicked); - currentPageBox.addEventListener('keypress', onCurrentPageBoxKeypress); - currentPageBox.addEventListener('click', onCurrentPageBoxClicked); - searchButton.addEventListener('click', searchClickHandler); - bookmarkPopup.hide(); - textSearchPopup.hide(); - enableNextButton(false); - enablePrevButton(false); -``` -{% endhighlight %} -{% endtabs %} +Sample : +[https://document.syncfusion.com/demos/pdf-viewer/react/#/tailwind3/pdfviewer/custom-toolbar] -Sample: -[https://document.syncfusion.com/demos/pdf-viewer/react/#/tailwind3/pdfviewer/custom-toolbar.html](https://document.syncfusion.com/demos/pdf-viewer/react/#/tailwind3/pdfviewer/custom-toolbar.html) +## See also +* [Feature Modules](./feature-module) From bbfb91697d3dcf71401428b8ba22158e8a14fa43 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Fri, 24 Oct 2025 14:29:14 +0530 Subject: [PATCH 27/47] 984044: angular --- .../angular/formdesigner/user-interaction-with-form-fields.md | 1 - 1 file changed, 1 deletion(-) diff --git a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md index 845fd37d2..5d19a7fa9 100644 --- a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md +++ b/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md @@ -1,4 +1,3 @@ - --- layout: post title: User interaction in Angular Pdfviewer component | Syncfusion From 23c5cb4578a7660b256c29ae958deef77756542b Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Fri, 24 Oct 2025 14:44:55 +0530 Subject: [PATCH 28/47] 984044: custom toolbar recheck --- .../toolbar-customization/custom-toolbar.md | 332 +++++++++++------- 1 file changed, 214 insertions(+), 118 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md index 72e3dc764..d286893f6 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md @@ -375,138 +375,234 @@ Add Syncfusion EJ2 Toolbar components to perform magnification actions in the PD **Step 8: Add scripts for PDF Viewer user interaction.** - ```ts - - import * as ReactDOM from 'react-dom'; - import * as React from 'react'; - import { - PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, TextSearch, Inject - } from '@syncfusion/ej2-react-pdfviewer'; - import { ToolbarComponent, ItemsDirective, ItemDirective, ClickEventArgs } from '@syncfusion/ej2-react-navigations'; - import { RouteComponentProps } from 'react-router'; +```ts +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import './index.css'; + +import { + PdfViewerComponent, + Magnification, + Navigation, + LinkAnnotation, + BookmarkView, + ThumbnailView, + Print, + TextSelection, + TextSearch, + Inject +} from '@syncfusion/ej2-react-pdfviewer'; + +import { + ToolbarComponent, + ItemsDirective, + ItemDirective +} from '@syncfusion/ej2-react-navigations'; + +class CustomToolbar extends React.Component { + viewer = null; + toolbar = null; + currentPageNumber = '1'; + fileName = ''; + + componentDidMount() { + this.wireEvent(); + } - export class CustomToolbar extends SampleBase<{}, {}> { - public viewer: PdfViewerComponent; - public toolbar: ToolbarComponent; - public currentPageNumber: string = '1'; - public fileName: string = ''; - rendereComplete() { - this.wireEvent(); - } - render() { - // template code from step 2 + wireEvent() { + const input = document.getElementById('currentPage'); + if (input) { + input.addEventListener('click', this.currentPageClicked); + input.addEventListener('keypress', this.onCurrentPageBoxKeypress ); + input.value = this.currentPageNumber; } - wireEvent() { - let inputElement: HTMLInputElement = document.getElementById('currentPage') as HTMLInputElement; - inputElement.addEventListener('click', this.currentPageClicked.bind(this)); - inputElement.addEventListener('keypress', this.onCurrentPageBoxKeypress.bind(this)); - inputElement.value = this.currentPageNumber; - } - onPageChange = () => { - this.currentPageNumber = this.viewer.currentPageNumber.toString(); - let inputElement: HTMLInputElement = document.getElementById('currentPage') as HTMLInputElement; - inputElement.value = this.currentPageNumber; - this.updatePageNavigation(); - } - clickHandler(args: ClickEventArgs) { - switch (args.item.id) { - case 'file_Open': - document.getElementById('fileUpload').click(); - break; - case 'previous_page': - this.viewer.navigation.goToPreviousPage(); - break; - case 'next_page': - this.viewer.navigation.goToNextPage(); - break; - case 'print': - this.viewer.print.print(); - break; - case 'download': - this.viewer.download(); - break; - case 'fit_to_page': - this.viewer.magnification.fitToPage(); - break; - case 'zoom_in': - this.viewer.magnification.zoomIn(); - break; - case 'zoom_out': - this.viewer.magnification.zoomOut(); - break; - } + } + + documentLoaded = () => { + const pageCount = document.getElementById('totalPage'); + if (pageCount && this.viewer) { + pageCount.textContent = 'of ' + this.viewer.pageCount; + this.updatePageNavigation(); } - documentLoaded = () => { - var pageCount = document.getElementById('totalPage'); - pageCount.textContent = 'of ' + this.viewer.pageCount; - this.updatePageNavigation(); + }; + + onPageChange = () => { + this.currentPageNumber = this.viewer?.currentPageNumber.toString() || '1'; + const input = document.getElementById('currentPage'); + if (input) input.value = this.currentPageNumber; + this.updatePageNavigation(); + }; + + updatePageNavigation() { + if (!this.viewer) return; + const prev = document.getElementById('previous_page')?.parentElement ; + const next = document.getElementById('next_page')?.parentElement ; + if (!prev || !next) return; + + if (this.viewer.currentPageNumber === 1) { + (this.toolbar )?.enableItems(prev, false); + (this.toolbar )?.enableItems(next, true); + } else if (this.viewer.currentPageNumber === this.viewer.pageCount) { + (this.toolbar )?.enableItems(prev, true); + (this.toolbar )?.enableItems(next, false); + } else { + (this.toolbar )?.enableItems(prev, true); + (this.toolbar )?.enableItems(next, true); } + } - updatePageNavigation() { - if (this.viewer.currentPageNumber === 1) { - this.toolbar.enableItems(document.getElementById('previous_page').parentElement, false); - this.toolbar.enableItems(document.getElementById('next_page').parentElement, true); - } else if (this.viewer.currentPageNumber === this.viewer.pageCount) { - this.toolbar.enableItems(document.getElementById('previous_page').parentElement, true); - this.toolbar.enableItems(document.getElementById('next_page').parentElement, false); + currentPageClicked = () => { + const el = document.getElementById('currentPage') ; + el?.select(); + }; + + onCurrentPageBoxKeypress = (event) => { + const box = document.getElementById('currentPage') ; + if (!box) return; + const which = (event ).which; + if ((which < 48 || which > 57) && which !== 8 && which !== 13) { + event.preventDefault(); + return false; + } else { + const n = parseInt(box.value); + if (which === 13 && this.viewer) { + if (n > 0 && n <= this.viewer.pageCount) { + this.viewer.navigation.goToPage(n); } else { - this.toolbar.enableItems(document.getElementById('previous_page').parentElement, true); - this.toolbar.enableItems(document.getElementById('next_page').parentElement, true); - } - } - - onCurrentPageBoxKeypress(event) { - let currentPageBox: HTMLInputElement = document.getElementById('currentPage') as HTMLInputElement; - if ((event.which < 48 || event.which > 57) && event.which !== 8 && event.which !== 13) { - event.preventDefault(); - return false; - } - else { - var currentPageNumber = parseInt(currentPageBox.value); - if (event.which === 13) { - if (currentPageNumber > 0 && currentPageNumber <= this.viewer.pageCount) { - this.viewer.navigation.goToPage(currentPageNumber); - } - else { - currentPageBox.value = this.viewer.currentPageNumber.toString(); - } - } - return true; + box.value = this.viewer.currentPageNumber.toString(); } + } + return true; } - currentPageClicked() { - let currentPage: HTMLInputElement = document.getElementById('currentPage') as HTMLInputElement; - currentPage.select(); - } - - readFile(evt) { - let uploadedFiles = evt.target.files; - let uploadedFile = uploadedFiles[0]; - this.fileName = uploadedFile.name; - let reader = new FileReader(); - reader.readAsDataURL(uploadedFile); - let viewer: PdfViewerComponent = this.viewer; - let uploadedFileName: string = this.fileName; - reader.onload = function () { - let uploadedFileUrl: string = this.result as string; - viewer.load(uploadedFileUrl, null); - viewer.fileName = uploadedFileName; - var pageCount = document.getElementById('totalPage'); - pageCount.textContent = 'of ' + viewer.pageCount; - } + }; + + readFile = (evt) => { + const files = evt.target.files; + if (!files || !files.length) return; + const file = files[0]; + this.fileName = file.name; + const reader = new FileReader(); + reader.onload = () => { + const url = reader.result ; + if (this.viewer) { + this.viewer.load(url, null); + this.viewer.fileName = this.fileName; + const pageCount = document.getElementById('totalPage'); + if (pageCount) pageCount.textContent = 'of ' + this.viewer.pageCount; + } + }; + reader.readAsDataURL(file); + }; + + // Toolbar item click handler + clickHandler = (args) => { + switch (args.item.id) { + case 'file_Open': + (document.getElementById('fileUpload') )?.click(); + break; + case 'previous_page': + this.viewer?.navigation.goToPreviousPage(); + break; + case 'next_page': + this.viewer?.navigation.goToNextPage(); + break; + case 'print': + this.viewer?.print.print(); + break; + case 'download': + this.viewer?.download(); + break; + case 'fit_to_page': + this.viewer?.magnification.fitToPage(); + break; + case 'zoom_in': + this.viewer?.magnification.zoomIn(); + break; + case 'zoom_out': + this.viewer?.magnification.zoomOut(); + break; } + }; + + // Small templates for toolbar + totalTemplate = () => ( +
+ + of 0 + +
+ ); + + inputTemplate = () => ( +
+ +
+ ); + + render() { + return ( +
+
+ (this.toolbar = t)} + clicked={this.clickHandler} + > + + + + + + + + + + + + + + + +
- } - - ``` - + + + (this.viewer = v)} + enableToolbar={false} + resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + documentLoad={this.documentLoaded} + pageChange={this.onPageChange} + style={{ height: '640px', width: '100%', display: 'block' }} + > + + +
+ ); + } +} +``` Sample : [https://document.syncfusion.com/demos/pdf-viewer/react/#/tailwind3/pdfviewer/custom-toolbar] - ## See also - * [Feature Modules](./feature-module) From 8f1eeaede41b37e863b0612db3fea968cb4161b0 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Fri, 24 Oct 2025 17:25:09 +0530 Subject: [PATCH 29/47] 984044: toc updated --- Document-Processing-toc.html | 43 +++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index 3e95fe8cd..04ebedb49 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -667,9 +667,24 @@
  • To Azure Active Directory
  • -
  • Toolbar
  • -
  • Mobile Toolbar Interface
  • -
  • Navigation
  • +
  • Toolbar Customization + +
  • +
  • Interactive PDF Navigation + +
  • Magnification
  • Accessibility
  • Text Search
  • @@ -685,6 +700,8 @@
  • Line Angle Constraints
  • Comments
  • Handwritten signature
  • +
  • Annotations Events
  • +
  • Annotations in Mobile view
  • Interaction Mode
  • @@ -692,15 +709,28 @@ -
  • Organize Pages
  • +
  • Form Filling
  • +
  • Organize Pages + +
  • Print
  • Download
  • +
  • Events
  • +
  • Text Selection
  • Globalization
  • Accessibility
  • -
  • How To +
  • How to
  • Form Filling
  • From 0a5752fadb263c9d9def0914eb8163f537239501 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Fri, 24 Oct 2025 19:39:04 +0530 Subject: [PATCH 31/47] 984044: lint error --- .../form-designer/form-field-events.md | 2 +- .../react/annotation/line-angle-constraints.md | 2 +- .../PDF/PDF-Viewer/react/events.md | 2 +- .../PDF/PDF-Viewer/react/how-to-overview.md | 2 +- .../how-to/add-annotation-in-text-search.md | 4 ++-- .../PDF-Viewer/react/how-to/add-save-button.md | 4 ++-- .../react/how-to/annotation-selectors.md | 3 +-- .../PDF/PDF-Viewer/react/images/add-revised.png | Bin 0 -> 28372 bytes .../PDF/PDF-Viewer/react/images/add-shapes.png | Bin 0 -> 19221 bytes .../PDF-Viewer/react/images/add-signature.png | Bin 0 -> 22529 bytes .../react/images/add-sticky-notes.png | Bin 0 -> 20021 bytes .../PDF-Viewer/react/images/add-text-markup.png | Bin 0 -> 23517 bytes .../react/images/adding-signature.png | Bin 0 -> 19302 bytes .../after-enabling-annotation-toolbar.png | Bin 0 -> 18960 bytes .../PDF-Viewer/react/images/change-property.png | Bin 0 -> 23044 bytes .../react/images/close-comment-panel.png | Bin 0 -> 6322 bytes .../PDF-Viewer/react/images/comment-panel.png | Bin 0 -> 18581 bytes .../PDF/PDF-Viewer/react/images/delete-icon.png | Bin 0 -> 23763 bytes .../PDF-Viewer/react/images/edit-annotation.png | Bin 0 -> 16388 bytes .../PDF-Viewer/react/images/open-comment.png | Bin 0 -> 23349 bytes .../PDF-Viewer/react/images/open-fillcolor.png | Bin 0 -> 21372 bytes .../PDF/PDF-Viewer/react/images/open-ink.png | Bin 0 -> 18662 bytes .../PDF/PDF-Viewer/react/images/open-radius.png | Bin 0 -> 19925 bytes .../PDF/PDF-Viewer/react/images/open-stamp.png | Bin 0 -> 28981 bytes .../react/images/radius-annotation.png | Bin 0 -> 22784 bytes .../PDF/PDF-Viewer/react/images/select-text.png | Bin 0 -> 23051 bytes .../react/images/sticky-notes-in-page.png | Bin 0 -> 20085 bytes 27 files changed, 9 insertions(+), 10 deletions(-) create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/add-revised.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/add-shapes.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/add-signature.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/add-sticky-notes.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/add-text-markup.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/adding-signature.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/after-enabling-annotation-toolbar.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/change-property.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/close-comment-panel.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/comment-panel.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/delete-icon.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/edit-annotation.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/open-comment.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/open-fillcolor.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/open-ink.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/open-radius.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/open-stamp.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/radius-annotation.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/select-text.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/sticky-notes-in-page.png diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md b/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md index 9be77ea98..af0410090 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md @@ -7,7 +7,7 @@ control: Form Field Events documentation: ug --- -# PDF Viewer Form Field events in ASP.NET CORE +# User Interaction with Form Fields in ASP.NET Core The PDF Viewer control provides the support to different Form Field events. The Form Field events supported by the PDF Viewer Control are: diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md index 67eb9737c..30a965032 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md @@ -1,7 +1,7 @@ --- layout: post title: Line angle constraints in React PDF Viewer | Syncfusion -description: Learn to add, edit, delete, and configure highlight, underline, strikethrough, and squiggly text markup annotations programmatically. +description: Explore how to add, edit, delete, and configure text markup annotations like highlight, underline, and squiggly in JavaScript (ES6) using the PDF Viewer. platform: document-processing control: PDF Viewer documentation: ug diff --git a/Document-Processing/PDF/PDF-Viewer/react/events.md b/Document-Processing/PDF/PDF-Viewer/react/events.md index ac2882d60..7d0caf19a 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/events.md +++ b/Document-Processing/PDF/PDF-Viewer/react/events.md @@ -10,7 +10,7 @@ domainurl: ##DomainURL## # Events in React PDF Viewer -The PDF Viewer component triggers events for creation, page navigation, document lifecycle, context menu interactions, comments, bookmarks, download and export, hyperlinks, annotation import/export, custom keyboard commands, printing, signatures, text search, and text selection. Use these events to integrate custom logic into application workflows. +The PDF Viewer component triggers events for creation, page navigation, document life cycle, context menu interactions, comments, bookmarks, download and export, hyperlinks, annotation import/export, custom keyboard commands, printing, signatures, text search, and text selection. Use these events to integrate custom logic into application workflows. The following table lists commonly used events supported by the PDF Viewer component: diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md b/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md index 036f0e239..dbb78c6b1 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md @@ -8,7 +8,7 @@ documentation: ug domainurl: ##DomainURL## --- -# Frequently Asked Questions Section in PDF Viewer control +# How to Use the Frequently Asked Questions Section in the PDF Viewer The frequently asked questions in Essential® PDF Viewer are listed below. diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md index 7efb5c1bf..f9d099577 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md @@ -1,13 +1,13 @@ --- layout: post -title: Add rectangle annotation from textSearch in React PDF Viewer | Syncfusion +title: Add Rectangle Annotation via Text Search in React PDF Viewer description: Learn to add rectangle annotations using text search bounds in the React PDF Viewer component, including initialization and search controls. control: PDF Viewer platform: document-processing documentation: ug --- -# Add rectangle annotations using text search bounds in PDF Viewer +# Programmatically Add Rectangle Annotations Based on Text Search in PDF Viewer A concise guide to adding rectangle annotations at highlighted text search results in the React PDF Viewer to visually emphasize matches and improve readability. diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md index e410824c9..3b2d64de6 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md @@ -1,6 +1,6 @@ --- layout: post -title: Add Save button to the built-in toolbar in React PDF Viewer | Syncfusion +title: Add Save Button to Toolbar in React PDF Viewer description: Learn how to add, show, hide, enable, and disable a custom Save button in the built-in toolbar of the React PDF Viewer component. control: Toolbar platform: document-processing @@ -8,7 +8,7 @@ documentation: ug domainurl: ##DomainURL## --- -# Add a Save button to the built-in toolbar +# Add a Save Button to the Built-in Toolbar in React PDF Viewer PDF Viewer supports customizing toolbar items, including adding, showing, hiding, enabling, and disabling items. diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md index 3d1b5ccca..0f0a3abe9 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md @@ -28,5 +28,4 @@ document.getElementById('annotationSelector').addEventListener('click', () => { ``` -Sample: How to customize the annotation selector -https://stackblitz.com/edit/react-dnkbqh66-tsqcqdcx?file=index.js,index.html \ No newline at end of file +Sample: [How to customize the annotation selector](https://stackblitz.com/edit/react-dnkbqh66-tsqcqdcx?file=index.js,index.html) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/add-revised.png b/Document-Processing/PDF/PDF-Viewer/react/images/add-revised.png new file mode 100644 index 0000000000000000000000000000000000000000..0e0a24bae4e96bcc1d49cbc24e6a5614715fcd57 GIT binary patch literal 28372 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 z zKCJU$K$>9{F1#9KMt?G8`(@Z;sLzF6mpn^ijS+#VIl_2S^%@Bx^HGf4cX z#I`RG3D@6ld&?)%QggnMZ07htQGdKy3cU9e9?!?b)fX8jqQh<{TNw^$1$1L1dd24W zJ+cm9`b2&8%ggDf2Hj~H#Jo=_h^3zT>Z{}SLk{T&pBoguD*i=};H$AVf!Gd5@;CZK z%*WMxvVVc?YV!V?=k;;V!1Ks2rK*PcBkFie>rv&)w&bj9 zo}vr(phMrmzLI?Elj@h_kTIM528QUsSA0_!xD*D2y!>92IGPC5vwnE!-S8m;?T+av z5H*^>Ic1wWLT`UvaHhU?4e+~HU&Ltz&x)sYVCGB3uPfsbHQ})%5l1EDvz2;=Ny^{l z#nF&TP?C}u>LBQ`cHh>xv5o^C^W0@#m)62am?*ca?Q-QU<{P_d5*;tI3*Xm=uJ)}z zG*Ws48D6NLQ8V$C1@37Ly-#)eVB@8ZR929H)6y*3uUk)eL&n3g#1nC}eL!K;8&Wm@!f2G`x1MwhYP^rt zgKaK_Hspz>2R+RL`F@=zyApP@D|j{@z%j?NE;SJiae9Yc#)j|eElY=?kI2Gd0xQt~XbK7ivKoEiQ07jJL(WEqZsUs}~`(?YM(!b3qkpZsZFg-Bsh2!nG3zo`KIJ)bH(^`n6)3`$#L$|XCq@*ZrQd9!Tu z;NhbC{E5#!K0}a`SvW5f_v$&b@N$p+!gS>4e#^tW*hK z@EI=p*^*)7!x)>y=azAPfxCzFayPSj$oTnIr|j3Sp-RuLa2s{Y?MAJQzTvp;zF2<8 zxCDysfsUuBnI-(b$`5Z?Va3dtx~4PMzvV7zoZpxh4T4`te6jBC$dsl)jLky9>Fib+ zT;EY*W++0L$T3Hs#RpBW2F{uk#sa7zJo$*JCs8dAjbF~5x53eV3zOOI5zz-(bng() zI8Lys-?9BHx-fPLE{uc?S=7#+-(xgzCP^BrV~0AFv((gdAg zuCG^2Qw>6Qj=*KGhm&X9cNP@g75H$Zb!Z+-CcyipuMlltPd+sd#gVM9Zl{@{_S2OD zhWr+HCz^$dc{UVi+eNG?g>7vJgCRoE z1pEXg^{Pe3Fh3ZKXFDh@4ApB_~)33awNpce4BvpA~f;zzK1nh6Ycqvk3%lHe4_XihP{SZg!45IvU za7e(;>c57@b6wVtVLHs>d9LPey$S0uCg=QU(ry7%ry=TnK~quFm39P5!f%wftG~yW7rI&2W4Ug7}kvijwwMBz2HX4aLV`yQ~Hee5PzEZl@zj;|aTBQltAmXY+ zqpk(u0X)}Cjuu+yy%-azKZ2bpV<)pmx6HiQttRz3I3=g61Dsm+qqK?eTfgWUob{dR zJi|XdOMs12!UxGm;MaqeORQ zGf2lOJJc%2ANJ;OLcDbHj26?RWli+7r<93*xhj-309>MS@`*<)il*LCptHV)U&1EuffmDKNO@Y-j(o`dtp{d=LQD zF@Wf3F5(>5+eDvr?48Synf?YY4*8V}RdDO$={xs+Jw7%v;oG z#_5R>xzfPt_!{0Ug%343c2lQ$Vd}X3XF@s@`9o> zMXE(|>}Z4MwxwikNIH{s;6ub7Up8Zl;p&Mxi7sHBoMg7YuVR_CaFXiX{e>(Qz%OVB zm!a&7ugJg&p335G2bn)9cIsDU=W&UO#l$>@=ZIc(L2Z@taC35{!4>X>xwiYg`eBwN zu*qR0D5+iRMa1yMw4d#vU2xkpHgbafD?d#ptb}K$7CsBJp2f+}Ku|!x*;En+@!D;s zq$uen`HhDb@aufGPSBfY><8u0uSr%N9i2;`w~paG6PDKXHVotCof&xl3^rW2i*C{o zF@DiT>@(=b^m_aBIgX}?Gg)ra03dv>aFkfQq^1Cf{isj9di|pQ^!omNxvI#* zqE-PL$!2WHx=&=!CsvZ!+8&&o97|Ya7yiSwOFvUM8C{b;9~GQDg->a$=!tHXK3~6?9xldjbWf1<*G3 z(I)q6R7bO&;h=3+rdK59fY6~_f6}wnM$yt(Dvny#h$i=AD z-0hHYNNZC`N=Xxf)lk|(-)Jo$!cDzkTOzA~Bk~0~q|fWHbH?jr-HFv%gc}Tk_*w=J zl!CeXzE}GazE^h=(H}0a{em9p?R z6fxen4|BA9F$@=M0*}M+zT5{i8eh0ocv5N);_|A5%x8TbPJ?) zHe9dE`U>$~n*@2)4Cv|#r7gF6w9rUw_wn7k=mm=KW_QZ>dqm>l)=RDMjP}WqpTxL! zv^q(O?PeE>&%L$Nn(Hyuu{&>kZf;DK0XP*t+N>_Wk{hUBa&%UPw$5_3+Ld28tv`0z zQ^D7)C}aB+FI_E;tUO0siLOfczf~S66Abw{F83F({s`C+_( zC{;;1v2=1Uy_9%-x;JXSqLW4`BdDMc@UA5JX!HEZy|6cGM&rxkOwA``Qd?F1EVQ`Q z7`C=|c1xx`C*-8r>A^hyue7YhmFBv(KV{Vqjmr&*6)7ydB^l?y3h%%TIEo@CXh*}6 z>~xja+)Teq1rL-_T};)d7}Ivf@+~~`VzxP_H;{%)Q;?gkNaGte(2YuR;7ThhQiKef z1uKf>SH5`m`-U>z&_R=HN2MgOQ_>Z%FtC4Gu2#m|{e_KVX$G3F<#GP-o4_iU8=K}9 zbvPK$B<*ddC^flwv!zlgN&} zR+;A2O(=9h8+f)#vEfBBq;in`$va}XsbjY3Ncu`;5Q>kYpEB0;v>CsgGA>UdxRLOjwnM#<}Y5<-$xydEysZuL}DG0v+nLsmL z>06=$hq6=GSxU*O-_doH*s+Nr$>&8Lgw*d-tje~cntaqM{%+lL(kq|L^SCf&zGQ*&P!u&W`h zt)26#G_RqS8RQ*F=2|=3_~8DY6dk}_-(YprsDZOomx5Z+dz<_`k!RJ*wt`)<<9wCR zoi((w7vUt3%{pCuicX@0=83en6eNKH5}?bn&yC96%n_*B_0Cg`S|;rY^(ydaT|6}u z?=L+Dm!m{=Ny1=`#eVQyUiIT{sg(9^f2+P167cn!x9k^FUOTa*het3d>6y}i6Q;0g z(n=z)p#|ZGaT2WkOj-T(^br@Vk>&z?x3FWh@8C5MMe$i&o0c(oahL`@s!hR%VVeb3 zN59WKwh#j^g>j4xHXSE=PDLD~a`LysvioOFBC(lHMzr<(!lU)2f|U*;QvdK+RGPq- zWXO4LuU1D)hm~RaGc#;BxXfkM*wa8S(G0wFWie%iQ z^noSfX`8ts{w9JOzV|lvoJ|0#6tsG@JWppp zNBi6f8xf}Nf%wG&X;i`vfnq?;yWg`Gx=kkfZc0(kY3`Gm?j`B&geB3LrBS_lKXd11 zeYdpJH!2t==F+tmSdST^5-nI)9W`+gbWUgYiE!Asj=3xnx_^FTV_a+vkp}GfGq|73 z;?TV9o4bu^J(>NdfX+g3;0Iw9ZRGWT`>h-Qw|AZ7OKKlq{k4|O;h3ne>a~rmBLi2! zP~m<^@)X?ZBA_ZNyjX0AC5cDdT;0ZRWrf7+uus}!3{>E&?~|%y#ZY@{xY96kP$h=z z-i-q+!F!K=%6KX;;Xb^76a|Hz9V|_`_y`>bCg1iYB;6XpYW4jPA%~RKhaM1*xCH)m zzM_1Y;kjU+?+6g;_#;fd*pA2k*Bq7OcICWqU)cw9kxgiN`FgX zE7S_*@R=IQka-6uN`?JZ3|xDZ&obZZYOS4bpYd;>5zUvq>KZQ-8UieCPR{)Q+H6#b z>;t*D{)i~$&jyo|m+LB0YkaijHso?>fVce)x6xNbC)|5BR*<@7Ie@YMxzTICSZ}&& z8phKXcXYFhWZ6yV$L5)2;%ZzxJzm!mqC`C0gU}**>BSW}cVwMtS$TOsc%dsHF%hac zGdbheqkqi*TmDB_DuZjhg6`nY2@l+O=}V9Q2B7PIJOfVPvAt6z1XLvd zI!U!`kC$DxBNtTc{uxljKrc<7TEUopHY}v}lEB-Flw=4D5|t~khX+q)#9(57KnHDh zhimpNHbB9R2lJNpwFbb-B%>z$iF(aBYNjm{{f47Q^eRsmn6ZvW)n6rUJX~C6xn$za zFt2Uc()7WP*u;;EpvCpDdr&n1;V;bNpPKS{F?1(Ya74qFr4Kk)vVS*~N>v{+&r=^a z@3lXhoOmrgXd(`dk#c|owrJ|NaCHb%Sy&kCaQwMlS<=JKU+zBes)YW*iwmHhbcAgW(pRW7Zv771k?aTcM;XWHzLN?KY|Q`1K_uh#nUE!h~V31lU+JSo5t zs3Hck3Wb0@$xlxpB}rqH;L3HQzjp+isqp(qt=!AFE)HWS#nq_)6=G3D%1aF`&WHwr znwD*ehFvU2-B?}&pi{3_&P%t#6&#^duuLlt-0D2cCaCcU7~2)~m~B5(gi8uKKWW!T zS#8S!bHWSlsxl2FsH$BIuTc$;I%+DlDb^+@omrBsojLksSrPc4!iNNIm8|t$5F?gE z4i;ca6HPri1Olev;)WV$Ik9N4}~3bCoaIx(-aUN=>t zXH_q|ZYvmkv0%KWvEQNt-B4|3E+iGFv9GG1z=_huYZN_e2Ch0NgUD~feG zNh;jkoxIB`ajNMHxKL0}I1WU^#FU|eE0iRmvHYugHJEbQ$`R%) zC0M_@qA(9on{&oWt>Rqdzx{NYap^@)n$QXE7+rQAv^`3*+796Eiu-6kQuSr^A?f<4 z#S~Vk>Q6(!!597oyGygMHDq&#|7Hf$^}@@>M{zS**#42UM`XMDOO8k-`8zr zT#lm)c*Y;6HrMg_My;4qeD2ete|uhJ*FH-Q#u_MkcIe|tIGrFkeIe*I5+(j^H~uZN z;jO~ImfmZZ?FN>^R|8vdNQ0Iu3tV;gBlF&YWJ?lF#8@_RX4Vx8F(hFH#kfP!yX3LWAZE;(m01bIudkY@ zJ1$;F-Y&d^&MT~NTh~#sAmMix5ji*jO0>XVUb4QUeQkaC<O$)xdBgRj=5KSD41DYna=5#&D!s;+4Sb$IdqM)VXNVf8dQ zbw^X;c_SOh_{8INAtvB_Aw2u7URn&f^}xt)7mGn>9$dD)vU60}T&Oy&k%ijv4$?|% z&Vwc9KiF+4^eo0>$07}2fpXNsg<(=C?X_Fs;!naU0B;RA+UP{DrJb|kCy8@MfRpm$ zC;lG+gD8C0^Ow}qBWPenE^&VX#U*(>t|S&Luf&5-jpnu@*mH-T7_xmYlotBYsZ$v~ z{bme&z95b}bO_qDZNn`&Fn#7iy!YN1xahVXe8^7d(z)2&;}|<;HfH_295r>dTt<;g z`ck!eB#OQE?uP;WJ7M^UDOgllkGz~PPCar@N?U}-=)xOJBS*;#-V-_Y0izmm{(3 zE?b%7Zf$6r!#YALmvb+E6mNa-GrYlUQv*2?ae59;JonOtxbX%NhvjhjcV21&%l_zx;6g^Q`@-Hx5jhQHg(D^%#EmVJ<}|3vs&L zJ_<>c`|PuIS2Whv;^+DEP*^&M;!p>xaS5s`8YvJxY54o%>YE-yZf-V)zi=srY~9_Q zvv)^Mz~BCQCxTfXJpJrN*lXv0IP=n{G5qyW+`ruI2=f|a#w5>~6+@)47WdqJHcmTb zFC23G9r$w0baW_XnD*WC<{Uiv{3zUZ+nc7nLqZD)t)zFU*OR~{mmY;PPurWv634zr z{uh&`*2CkD)6;3Bw;+$!d+BQ>(WT6f;cwhd&!!$FMY&wp-Y~Xww9R21;iU29yZtE1 z3ZPBE%R$CjC=K%BqWfIH8ne(JL~$^PHo*Y$gFa*jdBS<|hJ5YO6l@EJFB`F7K5BwJ z(C9BQhTfw`8=ia$hPx7@zL}1{p79WFz4r?apQeW|aLc_PX8S3unk^# zP{Xo3jvKeLew2 zxrNw%yB;{>AN%6$Gxx+fXYIoA9ys^x1F%j1cBbrkK0gZl1t`eoxgy_=osFAreU4s$ z1D(6&;mmXQ#@XlXkKS7sGDHLJx$kv+Fme*lksI0keX?1et{qBn_<`Ht(Ea;hm+g9? zxUemjF1PUblf%)mtO#B&e^}EFp{x$|999WWOL8_{;A~XW{fEcNS}!SG4H&k^QN)_9 zw%Utm#Fy%pzyLT&6^_Ro=u*rWoHZ=Gti6!W^T{Z_NgnI=(v!}Ii(+!k|6azEk9`QQ zFBef>s7Zz^ru~e6oDLT+b|=FEy7svayz=sY(XC4nj{N&|_;yS!b{g0f!=L{@Zd>{v zxNyp8H{r9d>#)-fWq9q`|HE4!kH)zdJcB^cftOyq4BPeWVvgw17eB&HH+}}6zmcBL z*@#sIDNK(b>WJa^W46P;uR7lJ+4u!HSO-E)3G^FuHaslX73ZIXztO0L7hn1emtX%J z3Uf;E(v#<)@77}AZoKowRGf9@V-!jko_X>tgqy1I&vRbpcEY&xj`MNkLA}lTzed_O zy!h*>_u{MX7c*pWmm(U@##Y@* z@ZN~4aKuUf!}xK_am4=panC)eP^~@$9CzX!nEZ1&b{>+8m!H0psq!SO$e6TYv@X?;{5k9=&%u!P9ILsh>|8{y+nl zcS;CJy4;Rr7DX(8SZ$NssE}0j>)8>>C&$mt{+qfLlA8Q^evW3xxhV>GUqD~PDmg@h56l(I;hh1@|fErxLiN{c(7o@I5> zBe?Rq$Fcv>H{zh9uft(S-iE`Ey#-G_^Cd!&)Vgtp6LMHlOBy?Y=`)wY<;Y>#yJP4! z6b7q`MXE>d4uv>i-`yD|_^@sNd<@UMl7qSr{N?}RTII|WwltbtO3ipY*|GN zi_632;jH@VD5{pa(Xgxuk!6)wTvd;ywGF(0dEq)jh(^nCz&<^3*G+%LQ;+^1o_X{< zJp05sc=F-1@WPYlj?z1C>Y|2$Xl(VF5?NA8=16mhgg0x zNW=BeaHUltML0&GiU%nM5=co|vnnR>ial&XCQT4Ng1xWkhV z7h_JiSew$jh$U0+!t7X<1IyKbm@|y2GiES{PY#G9hCv*O+X-&lNyC#jR=E=NT)5qg zVfp+lQ%ua6=SOabq>sntqj9H&h^EVw1n$22V0=3K61@K8nRx5ji}Ci0ms14K#^CL{ z(&H(_XPKnN&a4(b4e#NbAFBcp!@+U4y%QRAiZ#;=Co259K>~ZMp8y+jFd*; zl$XeIis_)CNt?PQ>+!-B14%t#;iWy&{g&E~MmX}biFoRjFY&?~-{ZwMzx`zxJ{m8* z^$pIy_%T#g(nY2bw=XM1UeJT~ZHnQGCt33@!N*_E#P>fe!o(@%sI8+xy15^x^c9fp zb0@~YWccMLwk(;K(8PyG%!NJn+ZKiS6e=qV|GD8+y#3)6Ok=G+ZQdeGp1l~e=T&p9 z5G)@>hHEB_00=1s>)yQskGU2h3d9?4O~m*q%Q0rkLQI`gPSK%6@m%qcNf04-4`s-)ghDV6ci!~@<}VFk!7?ZA zf9z|FA3poNj35lxcRi(BiulY@NIZyJKV-)2Wk6V5xc{U_-49coeaaav> zz)fEQdHa)z1|(oj&`{(hvUHinT}>t>K4&KB2F&SXf&#&sij&OC3tisVz^iLAA5Q@{`K!?aK+Vc;_53$aCqB{uews^-@zAO%tJKR!2K`B2`BEsHGo}r+=d=X zJ?bb1=l|cMIQ{f{aOz*~!|a(-%a-!TOobJ4`Aa#)TEwVV!eUy9Mp*GM7sXLroP|?P z+J}L75{u`@amD4Ym^PH-kG~toA9p*h_}9Z+Dcdwq#ibn~E}l$kQ_}OXf8S2%(B6ko zxEjwr{|Wx`_uKH-({96q54}OJ!q2iNOh>Xs3aASW-%A%^VSh?&mLiK4JDhV8a3#6u7NANJm@AC08}haI{LuDJ39 zbnli!SAhz_?SU?JlKYijgwlgiaIuEY_H(~(>Clv_kp(A>BgP;P*AHEWbET1pzl6d-w|Mwo7Mv12j4F zrfmiW^aO(5D8n)7li;CF(WU4195IFf(v>kv(TcL{@hHzt6AnILE1Z4y(Pq0|cO7y9 zH4MSHoD}BxxsNMx#GylZUVs(lOR;R}Vt9DY4?ARAJn_iI=+rjIeMET9dH(#h6r>P^ zK^j-hCg9_55a6--yy28HXj0X4_#^aI<|>erA{~J&y5F%VJ%_X>Dz_WOYxQI`A{zG5 zfZT8}RF@T`mUhsfvIF&KYREyl3iaxLb}TZ)|r_ry!jT#6`#Bpk|S zR&FQAob>G-PS&N2X`~S`DX-9H9PjqV5NBSmH^`hm)N{Xb`(HXoNn@gTMEL=^0|3-S z;^v9bpo@YiPl!ry!}o#LC-4Sa~QFRgyntQ^gJZako&>rKZVWZ zq44l{xNq51IKoiO#q&z>$_+9!u)=V<17_V2wQpHPr72sR!aOeLwn$RkJE~Pv$bl#Y z((9GujZl`d;i8CyOuBT2icxqNR>_WRZsD~Cw1?z6K+Zut5oYZt?FZ&&VJcnXc&SmH zm8_Zka5=MS4D!MjY4hhLoRqkH35}-&36D6ian_{)NZY&Iij+PQ5|TK@!;l`ACKO0- zU497}(z6nVBzUn)!zKL?jClVWd^KSTvXBE8Yh}>57p;(P#j_|z7S28WAY5_j-V6aM zSgu@_kMXx9-b1!A9vLjtz)0g03wF>DV-x`g{Q=n?ZB5E3@6{H!JdO}NQF&Vxjmy&n z7t1TcAy1&nw&k{J!eR)(n9HKjd1%xrIB)(1QqOM4ez?rI^Arb2^~an^8hAxhU@j~D@KM5~TQ z&)C}G~5pRw$;{Atq!2=InjM6+m zVkT~v!sc;*)f6%sTY>^ZgNt}#@I`5;9vVMA883}4VIG&3I~x+4)6hgbC=p`xE^#H| z^cr{}iEv1|+zk;!O-lKViAfp7WoY2}2ypCzSGrm!bKs2ATakBfQfS3vaB$n+2)&WO z3L1PNg^I_?@F$j#J16zZEKQWLyf4P^M_zpAfRFnFMN;fg&X2>zya_3H>KMd;En}pz-v$;|K(YVxLbZ7igASHWl^FOW{c;-C%16v0g0z1B0*n=>$Wab z9M%DHQflNj-eJtFhJ5 zXQF&jIkL*OfF&pA7}9{}6$7L2B*T@c zpYx^64u%+30B%Q!o>CT# zmNl}Yj$0_E7I8~FRtJwq))VoPFe1V0N!|@v9b1IRlBp=@bP(JWN;mV(`S41Vb{zt5 zuM;I$fL}Uy$u^NsK@;JT+sAUgS$KL^<|9JRNZMPd=K0L$_3GuZC5$MDz$RQyH1XU9 zMMUVy#VI7NCWdKYic^8~t&n~g++Hg~yHBqJ#A_{x(OByjqF{$ZQGCo3Xw&aZEFW<{ zB6Ge&oV8b+uB$`b*hnD_A;C&CeRqHcRlZ~bqR|zmCXR?39Aiik%|Vj2vAF84cn&;t zd*zX3iOXHl7(6kG2IG0!7c0+3Zhr|DEgwxcIED~I1L+G@&7Z7^o=Ax6)r)f=#wlH* z`5Q-!2N0pb(#XT@;0Q@5K_j3jL}|zodJt0M#<@Hhr2*3m2vE5KO)FS~m!omPdzka( z&0KFe;Sq`2HXE+CS^Jc=^RE5POui?fQ!f$n=NYc=mKgO^u8DVHdfeF*AiAmvE zc2PJdw<&!Tns^M+qm-g$53U#^q29| z(bM|!ZgTH!2^MSQJL0;)V6Vk0=08T0wulBRJ1*7oQ}vY zN?^g%50Kw|4|r%`jpdUm0#o4kC(T9KFzW>r_C6Lx1)bn`wm~ei2=0KiC(u0)FEkBq zR&*|!D&|rFs!h*6Y3fhb&qAnTA>5v9*1AE~-adqV`DmY80!MBaBtvuHubTj?W&vyX z7{lqd@P+1b`^yljoQVJpFYYg5ZOpj8p&Fs;AK`L0vUV>(G&BuvZ!TqpUP{wUX+nU{ zwH!^AQxOi=@i=N|ThuHvvN#1$5&d+JDJ<+ew>WE)f0$di(;sox^I*N#~7@$Cq$ z_z|I+C2-FE5&kYa(vChy;edTG|LZ5=_cdbCsF7&XV+b$s3QYa*R+MDrVD1;sQ6Q$H z@`sUd=eK2zSc7@*U58kBGJI{@!=2TMwKD^Z=xi)_`!N*t*&6f4J_yIyrx2@2pkl%& zC>%Hhp)vPj{txf4Vx5ZEv=5Q9)o!So^&u92`#Njr87LqB7P7rTESmB%eBKfS3fp1f zS9ic_3ZnL>chEFrB*HZn2!C@IT!r*(mMw%ednr7n1t_090y#al#iFmCM&r~skqFJi z!bv}%uzd&A&;A?>zrGDtxDgAcyofxOIS}j$ccRvW9rNG05k+NP;m9t=viGk=Uda#y zybdgS=VAnMJD_~hOYrAqAv|$BD}RbtvH?wVzeTjZ21_TtiGr?sBjWeKpKzPEXjRYq z9814{jy~~tR8D^v`JK1td0&jFA721>yb<-&KSbrvKQL73j``o+kHq5d5u#h=Z6Cz+ z_iu-{b}?4Wno6(6i^85e(Ib-<3J-tJ*5^H}i8yFju?i%tV6=>orv~yCwJiF_Zq`~3 z3TC~;z{|dXbMXhr>(CK-ZMxB5-axc^Y^nvE?srzC1_2s~tEdR|Kfi+&bG|@+*PXFq z$qW>D638vcMoD2AD#pG|w|gntWjWF5py!cQG?cX(<97Zs(n#q9Yi@roJ%j@Ihn|a~ zLvKQEo(EA8q>vju`yYW0``m*DM?RXCOhe_5U!v=d$D`ezccRN~7h~z9;b^z@aj4`N z%f}+Rv;kRp%Ycf>Xn*W~(Q)64;qJ8$LQxC;_S+!YZ94?oZHK1VLc}Y^Ahc`|I`01f zN_V>*ZM*cqg0Uk^+eX`Vd!hY4SEEzMJrFJr)8Je@XC8)D*=W1%p@@uo1fKG@;9EKl zRWm3=b4J6;qO0G20OIxa@V4Cv&a&>v9ds}~Gz%r$?1%RI-iktoAMwyn$g&t-(THQt z1ggeAh>q>z^xC$ew-iV9v}aH`;SKa1auz!7b^|)?dOp3HD#U$siE2D3Y_mJcw&r$! z9EqZ;DtZc?P+C%mx=GJdlov28k$Ac_-m6$MR2)`=GggTvpA*rne8$Yulu&_M)_Q2W z8^YFBaOSo_B$bimz$zuF}@ARtvkl^B?I?H{j{&)o%$L&bl(>Ajp6V# zq1N36jctdbxc4B_SScP!s!yP_$}={npgS3dyCmL5h~kuh!z~wdjEXO6&-mNrr-;bY zl-cya+cSL$Kr!=Xw>NDQ&g{-edOQf071Etwf|_rxrWe98xH>Sb;Chz4(K-vRY)&Wg zSzI?_-fCEpT=+Tdh*Tk2;6)^lZoVf6{=y&}u?p@p3{OrmOUikd+?JI)ER6dZ|9eo6 ztnPcErY?fzU(>7D`CLRQ$6)D?FQV->C$p?!Y)8Ol1bK7UU-*GhI8f%nDgm1 zSiX2ZI&ZTxd~Ld;CY*~R8cA_+87dbszNcM>k~CNvNlbc0M&byT_GP@EkEp*3y@)=@ zE9(Y#eKp#a^+u7S4v7^@k>G_}os{=43essRMt4t&U?FVo)mwkxSI2B9&UKtYEd zs7?6bYderNc>wObws3Yi6!GjL*1mmcSWYaS`W1Ju0);!DMq??ad1NElzMpZ~rJ+nZ zLh+{py=dfj7>K5*6IsO_;mK-?h8XMYlKxz;0ItHW^c2cW*J6Lc0F?IKA9Zx)E9Q(v zR(=p|cK#b`9G#FI=mHdO$2hz@oD__l4%=bD^yg7iy#fWLgMhN0u(G=#;VnY2up{gD ze0VwzLrK?s)KC5%HS@+Jr~h8a?{^Bqa!!K9++Sx3MGWrT5(+>W%PnRdfP=BDywWbK zxDT8~z2OQJA-kk6yg5A(c7}LNWjuF7&_HF$Y1^Co^0Ta6cx>&=W7*lI1CR_9qmJ7V zO1rd0{miLo{COPmO8pFjj)%W<7laz-pmyd=&^1D!{ZN*72$D6+(J*NY%Crn2Oi{dhg$@GdLef?#bJX?UwlYr7oQ99;`yD!_6 z=)tUR(ZgnbX=7l1)1fE>_wSON_y zg=LYKqsWBxVGzTWZr~y~(w-vkwsT284u%ghE&ULrx1(Gua%)h&XqA+WaBR}J4|(n* z8E0)S@2+H;oC*`+5Oe%eK8_^6IWL?sVS+hdoR)!!E}jcZ&JlMlWBHg*l6fSXJZmDK zz%#ceWhb&R(?^8mkrFB>TgMoSkXbo1Pclh@bogmLZ!%`K(`n|*Fq<(mskD`X zVV0y*%=S|ACMz*nGGt~}E=(n)*5cphD`lpM5eze*UXa<2;g`&*znO)cOC_XemMoZA z{xP#F|1e?Yc}blCLweL~qE)dfPoX)IrztGqWedbXQIyt2nBm8&eG5fVS~V&TilW%E zQN%$W=#oYeMNu|gHn=#XTG&%heJYBw>7rqUqA0egI4Fu@i;9DyD7L6LD2if>ii4sk zwx~ELieih3gQ6(5td%&p+#Yy5GPpC(zHBh$abTCrWu6dBCzyHH%BRd6<|#j!-_T`K zluZSvD`TUcwYGybeDKO)1fhKHIDGcyOq6aj1iKIFjzlch;%D5X6I5ekqcLcCrhH9s zdmNbc;k$Tm`aBHU|0L|*yBHPIzQu@7#-g^%_PFrSoe&RK;DeW+$82|J9CO$qC<~+> z)m4;@i5O{1NXBDpeZ4l{M`Za_jQnac8vSi?+`)VN^0rJXftWms{|Cr}S8F5=vh$zb ze*_P{KLHNzIUYw{@i0!=z7*x(yo!I{ z`3jcqa2(#c>{y=N6}a{MGx42!FmAf`3iQsAR~o1~C>sxt$Ays(-Gos~n#^PQ8JsRJ z0)8)Tf;KB(Y0qkl6aMyhbPgugSRlkU-+J&8y!vf9{9ZRxtki1+hTmIyA{R9pO0e(mm#!tH2!_%+qm$_n@}c-m(IC5{*31!FZF0x zv=ECMBZ$;2!1Vc*Xj8luI(H1hnG9k4gz513i_p7oC+7B{bEl37$hR(2t1HSzKqUB@p-0*K{Hxvlg=#BmYoObb57+Ngf?^v^|Rzm5j#WS(A zHU_u6<%f2b2`5q_A#amUptS2&XcLeZ2c?#+inVxT+X*+f>SjR%d81D};Q?)SgJAK5 z<#y_detot=UU&}Pc>N7bUy_I3y?Uc(_dEX> zJoUumc>M9l@K}0y+{{0P@8;B_G{^gg!jNGN#6e!$m5)6S=!th;d(WhN{pM>3?!G(P za=Im6!=FVwhuV3wF>&$~)C79qxZ{pP-}W__Hf<`V&#b{Q#~zD)hxNdmpQd8MPqPq; z|DvAKkl9c^8=rspAqC`feE!Af`1F&H@#(jd%v+ZgWqlK;cWq*RhTw4;XiPp~wk}B| zP#$q$x0BAsh5vUR&OP^BGn{|nr8snl0IF;2(-~XF8hH-#rs1yJ?v5Uf-(m9N#rSrC z2Yc@|)Ew~o$3c$;nEBR=`1dte;U~{P9DB?$*fuyD_g;N9E_-)2jyd{R9DeAw82P}J zxbBe`usAHg1Z?_xbwT9eV2ClZ1fj!W;-yTbCy);DHmNb ztT*H}sX*K9cgC^D9gp^j1(-B>GUmlfu|GYClLnV!^5jXFIAIY>{mtp6gMJ;N*Rg}$zguH1t88>f_mq9E*UQ)cK{Gm9A zFjUT)h|jih&WX=nCqpgs>h&g7*em=7gDd;7b}t1^rt>8z=6wUSn24lEfgH{ zab|`WnMQZ90uN*IHQjWJZe_|2fO>p6Y65)T-*@JS$D-&ya2J&2IRCJ}!`k1ruCMD_VLBI`nvnjdB|Sq zp6gn9-MhG-C6nL9!o2-(;L^Fn z;)(U~66h+x| z*(eq&ou5|QlS@&Qjm}09hgJ12R}^IvK|4Vyin1ykkw`@Q87qpi67lTiv2I6VZQdWH iD9RR#h(kCW#{UBi2OM{CtgU|l0000R!n|~MV)f>D>dDcj=VCOnWIA%E!_47WvXaKL*Sfd-i(~6I3oQtFV%whA zaKeIvHp>it_l-8)Y&16iN`4PR-17U2btO?N=cmawt=7g99oC0rGOfNC!Y?f!6(17y zVlh;k5;6TF!f@W{4dyj6NKk+TTu-C4YQa9o0SK)2>B11yK$s7bQSC=svT%8Qdy#)# zEATPI(~0twL5dWx*f8Shg5VFl1zSOJ)G>_^WegC68yi+U3>D5F!&pL$Ea>n5y6e*! zZ1>((+EZRoTuX^QV!-r4U$&5E{wH9wc-0-W=v_NAtrZlxu_%?dmkht`95F{}p z($F>=MZUyPk-10gvviPHKiOFlk4jrju1aJ;?}5MFnYP#cWYc-x*Zg%_I=V6^?YQVS}p+QK3MkQ<6Zrrm=w$h92HdJ18IDS;F0$i#>W!08v{Bl-=5s>$9so_xl^k z-|2bE;m@MP_A@~g@ff#DXX=Q-EBkz3DB)dfH7rz0E6L0=B)nTWRP@shP520jjDyfz zac{FZh&N0^AseN)Af1rPJ?`V6CIfVAksD4gyA!{=x7VQhUJgl==Xlf2;FkRu=s!<~ z5?<#Unp$;Cem+|<-HBzN*y^nu7xXgkT%kC1MNg^Q1RSw^91d0Ne|MBSCaFtcAhB)v zhn~+idKFT897hT;W{b)Vb%^f=lhXbPbeynoJ6;@066Tx5gk5nlGJ>S@*x91}-uaeh zM25k-Ghwk}%Zk6Zm`CI!5^<_C9^GJfBzVB2&bKBjFJHi_h9{3P=0noFt;;Ep$0hC_ zzc#m_;72hO9Z-@ZezDZL(X#3EG`|y-pO#|L_mK{#@U`xcF3|A4ql|YuRs*>CA-IVd#Sdt!!k=CsR zkxY&9fZPya*Hc|0pZg721%>_==c7N|E@!K#O-s>HQ7G5P3s}VbPOJ#JIw7S`!^6Wp z!$}PBSy?ucKcpgY%~x8u9&e7!`iyRm7xvdWMW&{w=|HpnxIqW@x-PA?heF)O$I^N-zh(0z=Yokyv^LZyj^3S`r48(ciy>N%ZHC)B>!;(y=nag zzqMV72mSc`NfRe@DKOy=pW9)Udh>M?9=Xsy9=Z^J9a5>cS~(Z%`uD#I$`ULrbW*}) zd81k<`Q-UrXFb8l7b~u7Mkk96(y-D|`2Kkkq2yFl{ePY|LP?`Af6Qap)uW80u<$%- zszD7z5d_8%3mDH=>fPTi*|GV)dT~_th;B+~wM`Xbm5|>YevkJUrIStji|OB=vC(nh zRTz#R7hTcD*7n^+8dQJI{Y$7d&XU++3q(o-4gr@tFe!pS5dd?jmN* z^X4#EF^iu7Qa$lfes8^4KU8mH{@|oV2$BCT`9$9KCVabmMO1t0fxD1!dw4!p5`WWY zc7Adbj$ygFi{QbK3j`)#az=~^H2eW=^AQAOqzRY&H7(A){4@kIQV{qrQu z#p;%C|7rH#`gjTnf-9?^sI&I{4?ho@oHbWQ#Wr{9RW0Iy&+UhWqyeXY{fo{z{mfol zMbR!r*|C$alEPlUGxyEXp#F3gBU3;{Aj%G-(IzoU%w6y2+302TW=1q;jF{__*bJjA~R{>o^rZ0)<5{u_xrr0nOb zGaWpxEl%)C8m-((kdtd}vQW@{Zh&&MbiX&-W49^{FG3+(LEa&xr3Nd`n}+i&j8n50 z119o*#g`%|QM~n%0vg33s^e(6;mS&G1hcJkY)k_F8mSNI4#j$wKS=b|xf zRnjlgO~fZ9Nr{ma`sYbk!B?>0Hg=?*-gwyfmnz=*Qh<);t4hc)ru-)ELiS4#t`#=v zp&yx5yrT`ACCP9pK!n`Zw5|;N(~DvXu9BcKK8=%{loYcLsJS2N<(8f>J4TBb!&pJJ z#-d_m+Y<%)ejad-9=$@D7?Ry`|Jl{sESO$_o|m`%r2Hd&EAfjgyte) zKSjS2|D9)cb2z)ZMAC3jlfnRMkwAim+#tL>rYsh5(`vxm=*WKj$Vp2518K*01&I&@ zxe5HK)1kD|2GB)Y zk{GCrAUHT!{XI-1vtCQ850ZM#4w6vNA+{gJd*2^R*(E#(KeTH!D}w_tzWtsU{?&rx zq&{CnhM_t>solX3@%r|y)_q;>j8jbmn-&x_<5>UQFiFq11S?kP7Jsf%FA{;ojV#^M ze)y!U^raBTCXX_RNV`7y?O`uRA=&`P$=yax&2uhfC{V>nNlIMyrTb7uS)D~pN>qST zT^fZE7?KlevB4@dARu60?L-WCQtu|(+^;Nom^I*l=|BzAZ}))k@HA;i`3H!~!id?C zHrlO`JUl#1X5IrhvGCnwi?bC4(!#>RZl$QR0HZoAFdgvHBgssYRR$uCccKO*#d?Wb z5R_s~iYExhl>OvVgn-L2tDV7ITs}LC&QDoECn4ZO(NJ7pZ*c3ezAxHKl^R+vH%~HF zWhK|k6ktMQB4PyqXw*WxLaU}HOjK1h;Y39%po<$;JRP4Ns)mj`Hb4|qlShUjZVlWH z1|cw7U&w#8D+B(<{`=b=IwtcfMUjh?Bgmo)*4y40A3^h~rJ-(TBqd`Hw<0uy5xhJd z^NZz1%KnMIi+B{cUo2+$1SKEXaEYqe-5JzqX^hKNeE;<^cl&0Bw{}nQLxzn_a!Q3~ zn)mQ}1fykyXp|spiT@j%{(nH&|M@Osd)^*d`_Q;#3~_1WYW*TgB@kMo2WwJXbMIhI zftwx#R$TGVLaJZY9Ho&?cIzs>q1=RjcssJgD&_<2tyS6ZTZf2+*395w4jo85f+xt? zbNRma>F32uh~&ll9{Z$=ETj)a1FT0#vBx6nf;dt>0zs53-@I@uh3OG~!6`eak#g#d=Ap7%7Fs1KsD?Ri7U z;(;D3z7&EE-);5IR)41`4K_Wf|5jSIEYHJaTDTdov$*UsB=afBS{aPM%YRDV1_m{*nBE=jzE0g;>Xo0Xn#Hr zaYkYJ^&wXXQA9gFV$^e)-DkbBAE5^iD&|BbN=9iV7@_2tIf>-8pIKLk8$oO`vqBtU zRVy(BHsv_d7P?I0-?ezco&I*->X}~xn~ch$rj}5aXN$|qp+LF`Lz+H*kOfiDv4sid zVDWU!!;du5qz>kmArvxOOvQ?nP{BI9wEko>k)u!Or$rCqem-c$2!POd)YFT#R1ijN zJ%Q@O#Yt`SJEpDp!NkW0@>HtS2qc(i#^2tcu^-CLP!WY+m;F?>X8sCKV)YbT^WfUa zcTJtFHWyJXwQ1E2nq+^eh{DHEB~-@v;Ri08TRj{;YQ^5nQnPn@!iM=)n*0AQ-~4y7 zl4-SYW`0h1Q-UJa6m~9IUv5ZM)d!ZS2e%J3KB83HxwLWA@8BTtIDT~@yC$os8Rsv~ z84B8NThu6)M}Z>vdSP+WD8TU-%c=M*FY^ps$;fRo?GKho;66VWa?mCf#?;?DvP3ad z5waePnY=G-;Xb`R++BE*cwxfuy&kLrAp>u%37OUY(hwr)LiBrU!57YtMTBd9yz8Y$hc&x3gH8%F=Oz{(6$om&$^|0zd6K)1?UI{ z8>5mQTG*8Lt11=C4*#tyBIRISiO`@E`?Pu)6J3@~^J!tGD)Oh8H=55p0|n+^Hc~WK zaZVcH)bT1$ajnMD$PzO%L&dN8;X_B?&2mLlwfb_UK0ukF(RD3IT*akha2ugpq{2ob zPd@jR#0hTyFjri$&mHgPp%ugT-DF|)-FQ#ww#5K~uVJu}pTPAjc~tnOacEMSYhE=( z-pMg_Dh6icnd)bO}BT$vDc8X7Ye5|4d| zu6;M$WM<2TXuw47A_gPHtdUL0;|F(BQ_Ivc;i+6$e+<>u|5elZ&)+z*(UZ2--G5o8jK;{H6qCwcNH~h zj2c%FThkw%w>e&HKyGzClh)VIPOGet-Dht(_8%sURF5epM?yW^C@%X{VtldLFDqO6 z5}F~qqijON{spw^dDd>O_)z+;^W}Ew9zatUTd^Vl*)5t0g!b>qU3yF{7pSGyZ{o%g|X zj#A?4#J8tAy$Xex#$*BG+V%IHSt>)itrB}zFl43*8$1Ox<=zcA}HY*yR&#`yM#DBwwA z5lFqx-!XSSf2*rdKl+h}i;azszH!(2CRD7D5uzmWGBfj7vwx{wSN8j3CNHL0wmbDe z46)Vj!KF5Q(~`~YC*1Z%&)ehhx7WK)x1*m;|1fI7=enrbNlRJ>k4ttbJIW<8S>Dj^~7&J&BNld`zd zl=IyTyUn(%F%IVT#!s0}Q*zXtli(M_>;MhM9h*+;sc(HcD2EK#u&U*y5Q{0W02dcd z2DeR5``xP5ZkEsE0Rq?JW!Osbz>RjGm3f}=`PI0H$^H38^TTdNbdyT_-?+;>vN(Q; zXf3G?K5nmM&jXvlDGL5~guBAsR1 z;(cio*;aHT*S^cyuRRhD?@_M#3HefT;A%?DqbpAk(>J4Sb)+_mQuNvLezOe{nSf!e zObnuNkf6&x)i=%!$Q+INgB=7XH5^fiuU+!LEjtV@xQ_nr{&z`IR;RWrEopP!HXt?s zuo7A={eW9}<@&0C)9*$SI{-i9m(X)YpaHypI>;Dk&vp4A-i0SA`@!*eQs*8tHc|9jCTuVdg;7jUZ11Ey{#8sD*E%} zc_I1rm}HfH`$W6v9SpTpY#trJavUVArUA{=#_fyK#+m|(YXJ<`;7FIp}n`7^@OY26mR zcy4@1;g#$^6ZY4PfL^>EHu}K8>q6?P!rz5&Zmqf^z6?^XX(TjaKSY(1s{JTx>+8OM z3-A@KIuR~69J(VpsrJU7W(4)95;+tTdyMqr^EEx`ZjsPArex7zn}vBZ>}v=$!$Ggi zA)k4Zv3IJh)$wH?S+@CpK6z0oUT$KOh>h1rMMYsl)q*lqw$iG96FLzZ2}J$dKjF?r zyU8}IEc!ZJ{D>ITV4>T>a-)51L?gAK$X zFwZ!bBrF8h<4$y~m=aP$hgU{~4Lemj5n6mLgghLGE^NLUK9Oj7pDr#&77cxariM~) zmft~U`to?QtB1IVCi*WHIo;Gyu1_U_xIe$1R?27-d3zY&J(ZSf$Ci6Iw~mJo26rZ1 zwb>C{5^NUu4Wzvv9D!x_|q~ZwxjAFHgFp5&My+~Oc$Twr)Vc5 zKb+motD#_X+5WsR$)O2T@W7m}M<`U+*I<15&);VMQQA}BA1kd|MgmumvU(?kk(F5fNrjO1Bgin z2~;GietTCT%rY~d*m`6QS?%C@N8FyYWqxBV2XYiP?Gi$ZJ!Z+n`ZJ6<7EXeKpXBt= z{A!rUVGIRJN#FQ6S}2@{WzJEW#YNr<lo@bKANM#771>Yf?%a6zuZ)RT-w1V zf1=Hr#|N_Oy;SNN$rZC@`TXelYd> zQaBrpB+AEVWt7iXnFpcWX^Se2g%8F~A=|Ej96uR|PAPwR=+S073P4+}v91Co zrC^S-=!Fo9yrP*)q4o2^bPEdDIhXh8QjIK2@kw9!QL|%Y-l?Kdeu2uCbw^Rva1$#2 z2!1a)Opq|UoG?F^*sI@&`5&p7VqaM$nZWgqe<>{JS5KdzcyO?+@avjvryE5N)oa*f zM0bfn0;22L73EA^`ro9mZ7h8*_XE7jcvGIRNf($1@AK52-ZK_OwPf9xV!NrkA&!AH|UuVkni?BIBvu$8ZBjYdCR% zhb>$RZWf}=b|((tGp_En6B|I4I!9^a+~k*~Iy|S$NLL?JXF4wC4Mi}jsY@Ip?OJ-W z#vXmdx_vDtxD?^nL#e|!C7~fV-Mj)>XGAaKJ(2Ad37^|NI<3tfy|?QQiyg6^_WVot z+q;9~QY4j}L;{&I#v5uQpH(ohN^)x7bN%T7W?OI`^H&uL?zkz%NB#R%|eXTTqE*Y9?~QztHbDB)pw`AAoXR{M=K<)iH{stHL*IeKhL2P zzmnrubP(4L8_vo5f0fmLi<^wg}xp5Rz= z;9cr9AuaIWNZo`dkEtYTBWbylAcdZ`P>I`aN^k+|B(4TIMwWXP>iYA^1jV$9z2MZg zBy~}caWk)`rSTy6vau`eFHuari(ggWGR}lcIMTu%|L^8wl>~{VPi+XYCyXQ#5yu71 zGcL!PHE>@#e|%yaE&}5%*XfJrHOLZqchZ>*ExPu3erCa?w44n4xBelgZkvCf;=B$^ z&Pf~s@yE~NcrSu~SNvR~sCLXFP|Cgs3BHW6q6Wg3CG|c~(JoxW2@(%LEH0+gIa~mlR5OA{9u6(HBD6ES<|w|4wYzw%3^to=y>DEd_Py1 zc_Gs5nT2##Eh5>2iAiQdVeh6|c-x6vsaSBk!WR}1X*+edC1l@l%wS4nW$Vh_XfFo5 zjPD_Hn7^N;ql!fmVtnw!w@3ndQzCob^ikeg#y4~x$7Mlm*B*sLcbr~VXELIKf%e@l zyzl*c&`Y|S?%(1j&WtIQUPL90Y9+Cx&h74@;c_ymG|LI;Xxb>3d>DnZuBt#Qh zUN-XeR3ocWoG&SG8Q-9nB*R?ZU`r&SsUmZvC;uF+%UXoa3~|J9UMdDfxZr2Zhx{>o z#ifkyK+Yza?hE`aW;jniy>Gq@ZX%>QTE!m!TJ>i{!tja_6BbnmoI-xSL9J?Yy;1xo z;Ehm>#wZ!TM%VB|_k)M$c-EIw+R~aJ`ESvCP~i&{Op!*@tO&k&Y>ax9GeU2$ms(;Q`8bDZGqI}|xZ37p%|@F=(t5TTQop(rvcjw;{Qf$-K)W$Ld$*m`eCB{9 zf`Mcr9!1{{p$HhS=5UM}R5rAqT>WId9Ymipz$P>Bf@yoKOhLw7{hy7WFyq7U?Y`(a z%Bx;UO8#jf$7qR>u=2#gW}B*J(TQpnZQNpe`0CB3Epu(9V1y+j*|C!AEB(c(W5L%+ zfF8Dm*oFmzjrEGty5`b3qotyvd~0k*(f*DPb?EylJ9~jE(YkHWMZmxOPi5>DpT0y% z+=N17nHcXL|Ezii_Z_dU@)_?tX{+AQykK32{s6!JSI@87?IFLPWi^gnh8eAPGMvee z()YmH*D{BNu3z-YFJC#pM(vT4zrk2cw4g%i<{hNVmY#FYsV~Byx+@**PBsjxHv-W7 zDe1bx2S1t2G}RHQP!)HJ>S|PfwG6==7~kx;U=vU5j5~5pjgN$(h!nT(6s8V*y?^8P zdZN#o5*#-qO@)O=d8lVGki=hl>LC$7VdeG26!5%l(z&UB=xW9P_BSjbxA+o-iL$TY z8DO}E^=YA`*lc}a!Zet^xN%AhGN>>U?#&S;U)^oemd?YTD#Y7 zRrS8y4j{437B@HJ?`3bZOZ=Tl;IA+j#6K@^J=0Hhx|I9cej4f=IIgK{ z`RnhE@hA6(xy$r=2B!?}pAPpEdF;#s#3;ExKgJRWeHaMDsVv{}pdp8JM+%%a6Wc5` zvK=KiE&E@7OlbQjNT?B_GRZ`PgY%620PTd9k&!b;dtT|+k)X3YSDF33G95jAPm-p7 zxX9~8Y$~e}wD7|=R;I%M!SB>{n6Eof+p@=L#b+F@GT?5uB zDV?c16_-K)=Pdr%(otD{^m(bNF%2k14f`CH0ql-xbo=09zm}h*wUQ)IU6FYH#k`{- z_J67*@La`5Rh_H&zreH24qNt{;WS{1$=hssmiC!#220jQzB`^ZFRbZeghpMe5_z#TnDN|t+A@Nl*I&hsCPTJ z6XZWWS6$py`P?v|kO<{a%z|RPQ6i9k{vL(#Rgy5YZ5DjJFoBgbKz^N%gG<^9PiuD*Jo>_ zf$*s8Ze_fJ|NFn<_; zN>aaYYSXmxwU~p0FM3?>PZk&Z9M=qfMC|~?2Q2OV=DF>b(~8e^QS;}3FjXL* z!d#4!OlCe>Ibyp|3zxxT$IaC`Hhsg~vQMt-eKYF@C<69ZqdbH)V2-aS8Wmbb!{6>! zTulJ6Ogiz}HaQ|Wq8F%S+RuG9BVaLqyguN4d%lV`2c(&)<4;l>fD*>F1-6}#AXC8Q z5{)jJWtdPFRiW@WYrnGx6r)t|T_j5fD_2V}^Bv&x$N(Fl9s#72=i-5(sx1J}y_P@$ zmA-pfuA4zvima#i2~_e?k(Ez%x9Zs&7B(GUN5Lk!cgv3GU;m`49L}XTBJ4l5WX2q^ zy6C1T$jPxm!oiQg)UrGS(a)J3iWHpuDU_bIB_{u(3fK@7f$Qh?4-O8bDJxqJ>FX5FR@*P;bnFQ13}2rg{x(>p zSePGA79cRU9wwIqxY9W{Gsnuux4>9pLqsomc=~o?=gR?!@Ziv% zw%RHV!3KOBYy(yLeep6R7Q?xDks+e!g6Doinl)1vStYz#@s(pAD(*QY|FVUv5&pCQ z92BM@FbHUz(P3*|SJ7!2y~>(TK;#Vo(H?zK?q>e;2WsHq9N@l~WaRO>x38-hxTrH5 zA8?-63xz|*#owA65V6@`YP89~L|lmhpHCIZPySG6a5`DU0Tf4e>9YCCfpZ`qaa}q4 zTCRgNo`K-_s=Y+4<^?ER$Kc-!$swG~#aS=^o$OKDE z5LtC_7c=WNPt;qOyQ4{aAE!!+k#UKmim@;|=QSkH6gENZ+AgFWYqH#T(+1$0ES2T4 zowQN)t9Woifn`a=v*Lu6&Se!+5W_!=-^yIh+`?QAU%WIes4&;kVsL|9adPBjt$$pf zKi{Z$^r(@YEE6kn<+PMuHQkbVI*sI7;XJb2A9K`_gb7n5j07zKuSzikHA8m2soJC) zEfy`UXW!nc%-yI#G3z{YUtytV5W3i0Y6BY0;Nh7Dw9(d3410TBxte4<>bN%&ZbLZ3Fh#q6|y68a9R9$x(P=ig&PTVJP5JEm#(_^ zBgpxD&b^mABbaER@rjABDI++e(SLmc-v=3Fi6E9Izre=wK++{-d#Ob1SZrU93V3fS zkPG;nB?>Tuj_0Mx>a9qKD*MdQAgC$I4w$M+_cZSj{-bgZjwaiFGiwI*cwxeNfC@LT zn3<(F`%2b{-PActYOeam~#eT zpoL=G;+@F*8}ka%Z7L?Fx;Mliq4$S!+Jl41@B>|WHx7IemxUBVUAs)}3!Nkn7p~%X zcZJE;%k@mSmSU(Qpe?#M(EwGo`#@^A??5*FoH2pQqSwU!i3qk%6QWBVnTSn66y=5- zU$`MTfnS}52KObc)YXWk;Gs6Nl7?i^=bcd{0s$M5d^Vkic5>P~_9ol40&I+Nj#7N|&Q8>?eozC`3c#v=Dz;*A9sfyo40fSROo%SKn!NuUu8^3*xl> zz8t%*{MwpMgh)_Z^_^mgOd$Z?d5P^T8WVJyi4fZABm(<$h>S$+G1v-oxfMJXl?}4K z$FJm;AyaE6?j{x?PplhoL(S_UK6m27w5REgU&MLE8Sh=XgNAkF>0a96gyr^ydpp$J zP{uTOEX4HdN`4D>DC|vIL^KLT*vOnU?vjZ-`P$2KrXS?O>{oCC>dFZ{UrnOcb#To> z3FTojHh&;2@{+483iW@yQlM3flf#D z+WNa2CNs16RG%+-9?6Y_IcIdlA(eUb?s@Tu)T*xK`4^KoDFb~p?2|%*^TgDy^%_B&Fu^Lb)Y& zk1J%ksQ>)!7=p=p?wDo)OB z-x}*~e#S8)@CV_Xus>bvY8;*^#dQIWt&hbj>8bW*6T%BK@#*#j}vK?B|B_LpfPyxgR!w*d1oj| z)t{+t>jmP|7%U9z6p>~*lwKyhUoHLoYuW&Ge#rZfcg6YHZ203yi)t&spenBOp3X?D zb^>~s0Lh#S{MP13V*~Dd;m)-4M?y&_U1JXp+r~0-nytmF4>99KBz~`=svWuDq9Aa* zvuOtP!H3J7g_Me|L~nB?JhMVw_?H@Ikvj));?T9C@6(L~sncQo}2q7tyvad^Ao5iS}$?6ds$$L2QA*f3j zXl#~hXiBP*%9~X15w`L?cnECD^^i|+4Bu!ZL$F~~WjN`?O4Xxi`&7Pw_+U9p;~;l8 zM#V`a%pGLGoL)U0?6SBe$<8V=Nap>B*x={`Qy*8=wd~LY;1_!}M$uBJh z0WL{eX69nxIzh@+25=B6D!B0Q@N+l8B69z4aAK$iaANJSH)zj3ooWBRWUtbzi4GVU zrNr7{Zr&S9gd)L-<)qEw0L&9SN)^P3%g(`}0IQrGs%%t{KSmkEDLk`P74`xv*5CEd z%o&Z|a1xRJZukacMj$s-RCY_!rd5zlc^C&)Tz0GYLqIN5>@_eOnQD~qAA(85k5542 zveSMLnE!^i@c(O=7@Z3E=OqWhXn>EQiy~GqAe7XHH(lcJJ(4&R8^AmMmGt&!%kgYm z4ybiqSDf+rooG8Ab_qEQSe`k?cwvM*Z~LfHbOWAFThTRj9pI=xruxZ{dSmA)|7I-l zI`2ln7xv*EISgivWQ7|?G67PI7vH_hsho{9S_mu5D_oQC@L!QQczIns;U|ny8`^Hj4M&A}ha18_0pMa*)4=HN zbY*f`wj&rk3s^t$KRv~Pm+(yh{#?N42dvuOwdY+P^M%?XHtGu^`xzCPjs1dH?h&2m zEz-9xIhrik3sw7zemogR|B`GEq(M^OHbfntr=_*@w(dZLC2}61KPHNZ@BLn;BbvVV zjru<#3$&JS?9@-Z=)3PEQAZv8t)UQpI_CIiv-#WN%#iKAOCSInA*86M(fgzG<;3o* zb}yY?Qw2u+y{K5J6cL(?6Ql7na58%BdUGR`Q^UgI;`DS?aVU~I3m?Lj4ntIMSyW=@_12R$gMltfbz7!wmVS$GWps!N=C=wws zFyS;`$Fps28S+s7`J+tE7r8G1VxD1Y60Ev}rFLK67J)R8W|nO+MinlC9mKy5gcv7Y z?Od)Utwyvr+02cik`hlyl~(0tmG6ty^0yJD=99)HYYCRfxl`?<@(a1lSYWM9ZR6qL zW#k2e%jS=Q2e-t44w6-1(o|8C07WmbFR6I;O|$b+ofD52&{{^7Vni3ig{9@o{uQc|*epA&B~ISZB1#UFs@`C9;^0R)$aHj(Vs{^_5Z zB;$w{vl{)c=5M1LF?WCXu2lB<(BSTx3aV_8K}l2$h5 zZvl<3Df2FddC~UZr?)fTH;#r@Zm1t6xs+5?KzkG#?{RhS$E{T$Ww}ll=boS(9=;tY z`LYM(XNQ8<0el$K;r+D9;` zi*TB3^Goa-{(6`BTSObdnUnpNf5HsVZc%9z${ljZR$jW#qn3HI#n#d){a6T+b+}UbVQ7z`UD(pmtLa%I+|{}C@6aZAcPz6NmH(?ZoNX_ zjPQR6CjKv9Vzk6sJ(!qhJog9&ZLXjN@YZnjKK4lA>3vzHEVM(d)!&tqH4!Iem@hH7 ziFfkWNxC^~cFV8Yn@7OE30L)QmRqYcTIetVq`IPPmzlJdYUbS7j6?BIFjFM8x4!;J zNsscavtbbDmunTf_JJD*2XCGMV%KGVz{9sHxJ#l$sMbAsr?5XA^LYF7Z^~bMF#s?X z8T4ZH`s??p%xlrem!XqO$*R|^x)n(%co6HjKcao~-b(C%m9BD@I;rBep75YZYOq7j zatY&6{@0PP8Cd3BAZ@O0&R;)pL&c$OawKm*47SwEGc_t8hd76o1s9Nre(r6$M5h8~ z=@4T?zPhgq%))>cii8Ahaa~$7TXI`{*(Zu61RRBmj^>iCLWjqTR3{m+`UmLxR4}W- zxJNL+Z_yx!1X_SrTo`T=j8xNOPYax0HI{d#2dGUIl5|M}%^!5MAXJQ$CDfEFS614 zzvT0lLA^Xhi{^9CF2yjDHMc>Y1+Ct(d+Wqcd6O%GC-D%COB!Cb%4BL?y9L~~d#!ct zM}zlQrVu+j8&5L?q@46p?{-kE(F-B7N42rzI|}0ZyGmN|yx5&0&V}w?O||AMQYWc} zO7G{6@1|&Mr7Fb5?gP~Y5EkdVS~3i8(r3n>bsm5+((VcZCR>HDZ5f@HJ;kI-JG+LQ ztzPl%``$1`9{L`L_2@`2i!0t-IBme)Vm{g5rgCA zZAxzY)=T-v_e8y7IJvq=V;Ku4@IB-6vwDRRNe~uw%-~-K6RPOm$*n;XEi;x{m&f?v zVPr8cOg4MGtvbA%KJ+vx>E=y2L3-SjFxTB@g669jnQD3-T_%<}XTTh~ib*U&cF1hT z^nzkHx)kXD(()rya&Ly|klPZ4)XtTG(RiMX31^6Ds>ZW-9AD6#9-e3pPOnA!Q;OpL zR5^O%+cnHoh(ce`yR5A_5q`22$L%IbyT(ib(4rN!tA<`OjU4MssGt3c z+Y-x%_A{YA#b~Eef+Qix;WsHEOhf zbfUyFBoWeqUcuY%%!3-z!Q^%u-ef=1uUViZpVCf>(@)y*f_<93#af}4-~1&>U@}R3 ziCI^XcL&xw?TOp=wR4=!`a0hJF%t7Zi1<=6<2 zw|~AiUz};?ORahc3R)rixK61IbTP<#iHC#{S3K-Ge|)>9`6cn3o|Q$!4!GU z$JrcF%=&jVP?o(iT9WltxS7O2f4?Z~HXo>^GlkmuxMj!ICjX&mEG2m-mn1+Rzg5#K zyi??XdceS$XN+i8;bfLJEh*|!{Yg@Wb>Q~l$n9l?rG{%Tkb6`YD6n$aC9sv{g8YwB z-F9zWYtDT~CSSwE%;UA{+{zh^5DEXp?%0M?7hR{+ z#^Txe&SPULcLz()B(m_feV*f!c$>g@ET*@1y5oEF`mYR&4_H0kN`rhf#L@8u(ng8Y zLc1z~D)qInq0xdUh*F?g+RDK6JW}EpUuW(!F3_T1i z-Vquwv64@m4_w1Sct97-feT?C&uWYsZ=N5ic1l=|)o}4`!5QdhS!gc4znn$%WbdQl z%W~Dl!yos3uX|djKj%c(cT=@Q${3u~L;5#xB<_dAg)!+NpF$e}YjM)Zd9k5i#ldC{ui$N9sfigD{?T?QoiP( z%Qsc4ZdOVB>q4}{?0`E1FBm3t(r8@$p%iUF$6he6P8c$&tJvSr*V0je8?mWIJGPgs z1zN<%YKs;A3WFy2B}W*1RznP3)d6iWaT?7@>b8d==uD4QHOk=Ur?G0HDh3MF*4I{) z6PfFP5+rGNvZ(S_Pd*s#g(>^_}Cp0Yl$Y6m3Xa8Z&_HeC1mzaUxe89 zCa~tJ2g4(`D|v$r3(;f|tkTOGiW8qPzBY}(T`Nh{#EG`QX0|7)V+vz;elYTR?_FJu zWh`>wlZ&*LAn@M>IKRj$DaEQ)a!E4anpqM?5zHc#Fi4x%W?0%p2O_2=!OBU{tFh}&ktH1K3MQE_`S{Pek6E?Sjbyc`IwZCTKm6`Q*@CR5LWM=R=)+!42JO z>s`s*8L=NJi9rg4!eZql1#!m}uV=*ak{HQGCZ))ajS6h@;!ZI^_EK7WW(a7X#6a5{ ztvPk9jjm1nSg@g>FNSAe!H4bXeNGp8)o=4AJBM6aO}0WVxWD4!8t^$%JlI^E(0PZG zUD`3)to7RuUJ9>vvGd65JDVce%cqv1q%uPFz6(&>Q%R@2H#U`$Hlg}MzE0iu~ z(aBePmAbYaU=)JAbJvc@0>~HyKH1+-ko;|Sdxx|X+iT$CN-z*c$n*7BD=NC!VJoJm z)JTSWlrU67(?M=j4@G4xH*;B*Nrj)P$ud%rc>R^=?e{K3tiGUySQ1=QwQciI+-pp#fRgv!^$bC4`E{FK(k@n$*UTO2OKn zR5Ft1bvZC+=IdCB!*PLW(2j3o^1%p-@pd|L3U0pg6!D4xw>JSE6@U&yaPyrvAa&D+ zxarm>k?V4oV^I1V2GC{9G~9a2`DiYJT2jvKp_;ZGSg06mU;GIkc>FcE`ka6pfBQ=$ zhXQ3hy^1+#qoQ%0lUiZSQA056l_xMKyA{R`>S9`Mjq%2)Tw_JgfkSGEA+578V|_lH z^YhU2sNV3_g_j~|Ez{<(UhsWB2iX}u>~eNM|Be||swEGI!wE-V8~*du40IYb62aUZ z*uG;IcI_&ic4zIymU-V`Xa8|HqFsV`aq-!|Lqs5uvjI!j=ZNpTH`?z)(vBV2vvUVl zE&UF89gf8XC-g%=1hT5=HCnSq#mH~aqU%8PZ5_tkxeI|#!*I=Yze4w97naO?3E#}y zf_}$NLB}NVWXm}%!DzdPii={|j%7db@DLnM4+^#|z!Q(XfTHdbaMN`cqOB)b>APWC zmP+?j)Rt%8mgQKMlZ2t#4`DxdvXSHRz_slM-2d);H1l=C1;3k&B)Q1qV-g2L-M}E` zz4RZ<&fAV|qtC;Xq3z+1({G>#S)8*Gi&t!duS71~3J)qQKYJ3!j30|6#Pit2AMqC> zD|;{Y|4N7)dtwq=wrT;f>T2yXKDQke{T*D`xMUvu9R{OkOOG)F-|kE--H?yL!v??; zD!+^>2HHMg^8tdnNhd}SK=-a|2*GT0nEmOv-bY0di zw%RZeuM4rkA)?@kdUje<)$FIMDv{XGAntX%e*+Z-cO`qa)y}ay#BHuP7}Sfky2MWq zBDl1_OpF_@Z6Iz5YXTA)RJ3(tYzGho?T4U(P?O`d(6%5)u<~Jog()MSWgv~6cnd;x zFveDaAZSuSIMkm`)P2XNC4&%BBjR(rvF1<^2sy;4*Fr%cq=|BgR^^$rRGA%~dy6hcrC2&o4!WFVxDP-D}FrRsBIUVVXrKpH*zBw=!La&+p@ zqM~Fy*%&KO^biPXf>^g5b!a6kzdk@gAfyhl4Brw3B~};?H4dN8$H0n^T11Uq9~`oV zDh9Esq@={WLQUVgY(4x`*VtwB`~4IILTVW`d~0ZpTjHQEZ_yW|v}x1Eeq|`aTs$enEiyX1{zwNWI4rfU?9kW`@II Z{6E|4jzqM+(`f(z002ovPDHLkV1iy09;pBT literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/add-signature.png b/Document-Processing/PDF/PDF-Viewer/react/images/add-signature.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf8fe0628e03f1ff7957d4e09c29fd27a5d6f46 GIT binary patch literal 22529 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/add-sticky-notes.png b/Document-Processing/PDF/PDF-Viewer/react/images/add-sticky-notes.png new file mode 100644 index 0000000000000000000000000000000000000000..d86780c4405f65e59242abbdcc0b778962fe10ce GIT binary patch literal 20021 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�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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/adding-signature.png b/Document-Processing/PDF/PDF-Viewer/react/images/adding-signature.png new file mode 100644 index 0000000000000000000000000000000000000000..fd92aa760c058758d90268338c5dd747edf9598f GIT binary patch literal 19302 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 U@W{*X^8f$<07*qoM6N<$f^uNmJOBUy literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/after-enabling-annotation-toolbar.png b/Document-Processing/PDF/PDF-Viewer/react/images/after-enabling-annotation-toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..2387c40357937de27c4134c30f60332217562a9a GIT binary patch literal 18960 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/change-property.png b/Document-Processing/PDF/PDF-Viewer/react/images/change-property.png new file mode 100644 index 0000000000000000000000000000000000000000..edb1b772d17143c5d9abba0b380c5dfe51ea018b GIT binary patch literal 23044 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� zeT7vD{Qk7OEm^G!l@gRn*-N;wrX6oqF8kY|tOoDU@N#Qk6gP1c8rk(BCXwzDDy#pB zvm|K#z0u`oD_M$nZ~v~l*1Q`MbO3JGx3}&7Rmp;FSvIZK!!HaRsdbkr)2w=}^($3W zT#xIH|QAH$CP<&*a|b%I(CEPV1K9t-<&%h0GB)9kW7 zWVPVs-WKBMTjc55)N6)9?VpsR4exK(GzP*Ge5%9~41#pAWr zmxYvi21=7Y2$D|#(TZ=@2x)I}ankhLdu}!|BlmtBU=O@}f-A{q_X;=OFMwhl(Az_g zaS?guf|9wZo+H}rx6uA6+M({AvThQ9v-wwg7ZTH#zbBL#I#Oi2o-Me$*aPWYOrC=K z^zddN;^b+W+YrKUkxEZH#|qk~hPRTsWAGX7--9OnYJUjY;iRVrM{P*3P128v7#kPL7ywZpRCo$uS5naxpZMkyCF@^Y>e>d;Upl znaBY&wL3OIb(me|Q%HgE`w94?F(i&$Mtg>3Yujmh2kYea7qv60C#Mi8kavyAfu;)q z1kr)=%VxbjXm8`$1Z@=ZvSaqDkl@^_rEqrglm21zjsEN~tHrek;t?y-$BF8)+sx8M zNA21{mXY5QnRm=sAXCqN;p4rNUou2_lsBTo`xm1%ZvAQ$Stz+Sy4dbhvLR;`=mhEd zKqwR5B|}Pcz3I+H(4%|#o6OBepOj|F*{QyPI+054Zd3;$;QT;S49S=FRfSRANp~Hq z!*W&WuQ}cH^%k8amtOOHL{=KavRfqQ*t4F_SvygYQ2`ECU585CX<3_RR=g29;dYSw z;%I?)DI2KgxbdV9Ez?0~>w%>v53I7;(bN8hNyA$d%#!GZExu3O7 z7QvC1Eid{F5h_1V6UEo7;mcG$cGfjNv)mgcJ3So08MxH43#qo=RbjPRG`Nz|+Dt0v zB9+)2m>BDAwQ=96-mzU2`7ykA;~h0<{8?<$VaenwHuX;VFPmNAV8>E+azX%&&w47~Pf z|97MU%0&qvy6Xv-I|i2E7dj==f%W|3D{5NdZjoExrhRU~-c%zqU zM5fxxA>FPbeR)e3<89yZSRaxUf>+xdlg}7SjB|qy?^x9>MhN2JF{B5%54SMSoEm0( z+Yxfh=0#z5Zaex`)e+8#q~jJPKfyljnc$h~A((eu(X&C)%l13@S?g`d8vx)e6SR1Y zTl=YRPLmmq2ZT>Gf^za9LHKeS6}4(0$_d6vc+3obkW z!54~T%{!^S_N1>~)jx7g_|4F&QKvR#QvL@tu!g3|cnnJiL4WgA3;%9c z#Ypdby7Cd!E%faY6-D~%INNwz1Gj|;GowZ*Xw`y!%TY$L9<20+|H6w!){^0h#qC(3 z`INWP2KqA6Hupx0(WzYnQm&<}ih?_6d}eClj(VV6b+6xzFU4_1G{Uj-H;>4Kh+R=J zc-cYiueSjAvKp~rHlE>s#75ZccJL5gMfPPKR5>jzLQjvRXzb&8>$J7SK@|kk^9Gvh z+`>ey#Sq!@AX?Ol$<0-Tg&o#&W0+VQVWl=*_1h~R>nhn0mx8tSS54Z`ABSTnDbX@e zLPb>738=c??JvQcWXqZ(0w2iu6F14`MyGziQ1v21*EwtTNmFmk+qB({gw(`xmW9P3 zc>z7}MQFZV{c1F`>NAqnIzKpNT5%^8t$?`Ca&Us!khfQY5FVFE0cY}}UJ&pog|De| zK}xDx?4l>)2$`{c3%KMU{hdkFU!Tots)Qb?iK<^T9T&Sh06*nYFQBX`{7lMvBIdFd zb>|pICMM_F^Ifi7xn@vfH31x(e>S#!R~YmP`(pt~iN^00I3GqgF{?g~0x z`p!kY(u$l1Lha<{?D&YmM~y_`i1ikW@yo8Jy}2g!l3>0biLGlO$QDNh8BxayI=AkE zAu}2fNomX(Sr?6%{gM~%gvza~iZ7^IQ9YD?L8lSMeckj&_!WbhW72vTU`gxMRZw@hzXM-&AK95_DyTI5?z2fXlp< zkYJ}RDcVLW{akSDZeF3tH83+(+p{f`CugEfc6X9a`EFHqvb?VHiV|$B0v#8r^&r@%&*;6T9^}na!*wrg zF|rzieE?|H9vlWY510}BYqr3Xyk$Q@ zpr@NoAlNPkQYl(6dRnw$}Svp)ZaM9Q1B(9%nSU(H&6 ze3VN)(qif5K*FL6<&d-YPJPC&gMW2SHI?*b_rG zhxFYW(dq2^IM2+bb-_6RRG9X%dCsMjsVVoyC{|P9;Jx^c2}M?|<7?8a_xnw6bG@30 za|_q_yX4b826@RUxw)-AcT7iHD0t;M1jrRp7c?Q?G2D3TiawfzK}b3;aw4NYoJ#ROm59ki8|KPH-%VPEe+ z(N0gPnRq-=wuemp+;5{$#a&NczF-aYe@_P4>`Y$HVcgTrmhi2~#d=ygo6SBv>%ER8 z^G8Om7gE>dOy|=<@If?*p>RPTwFPnhTCemMO}AdRLykgHvF3_%H`Tn1ut5aaRuzR?;d#+!2m0BRc*1*ZvouZdu+ijO zJDq{A1T|p&_IO|(a--a-QlI&y$ar;HXHPxA-n43v%y>oco9aHHzluV%i+Rc|Zw#`C ze;6G+emva>AC(Zc0pv$%5Jme9yNL6N%JYtrhQ_c;(u)6&jk6a^^>K64f_)q#j^hd{ zqh>}JuPQBK%+4JLa(_MbYy(?VjhcaFwUVOLWQoyXiYjzp)knni-LH=dPh4fcp69_s zXE~0K4_t^Zd&tGYB|QOG*sd^ZZHn3I+l69CLT+P=QMSkIb7eh47l+^lg4{<*#+tv6 za75qN5($YcV=-xac(DZia^X zlcuK*r%>KtnBsD#NxMY+JS@Ooor0+!X3j*?!s#uaz3u+wrlO+5YB#nKP2Rc#kryHT zDlM}jZhnC}2yUGhX$zGJzq=e|gq>S9O=_bc5L`}S!M7?};bWPtaV110g}?0*gvZ&H z!#j70Z(vlCo=ar@JI9_E!1Qd?C~uBNLVMCwcysyFmiNxF2fwqhH*biCdIEtGSR z3SCCI+`DMqy~K+bD4wD4d(E-Asz{gvQK=o%Yza{?wN~!+R~~R=VU~~^hmth&A!+OR z)TbZ>;0SB2B!e3%gN^O+E|}M96xIA0d}eMhFLjygs{VYP`|>5W*)y7q@z*7GQ=O{GYPmT;AH zpO_9l_C6xdw|S>7iq-X``&o&u83R&G-T~n7lp5syi7to6C3)`F>AQ= zHcT-pf*hhq=8s_A@!NT^I$EvlTY|)~*<6t{d#(l$Hia+ryEQO8QxX zuBu4T8{FP5YkC?v(3^MAWn6>%-st)PM+F5~c)lfz9L7cU$VK>2HOW^Loa@rj6kL;2Z?4V^NXec^ zT*@HN%rDq^;AePR+O>)ZOCF0Hz~Wq2E3xpTXUu449HWv;CFHioR^hoji3=Gvzg0N`)4jjg;MZOkY}8>Aa0 zrpBiZ0N!(5!n+T7g(kCusVSM6CmX}J6iLHinvnnLe33N^?C_oPV^9@OnA=%}qH6H0%-jHry;R#b zStJE_sOTGL<8}CLs$NmzxgRnw1eJ#-G%%7jb7syb!QLn)m~-##*-}GYSCSV!*dQU} zyK=;>+;jDloil}#=S-QFe#+`$y7G0ofdM98)cnzwI>kN*u(pauqdHR&3CYxtkNPE*o**g__CNvC^*6 zMc3D`RVSp?^WJM~%jvbCkQ!RQ-l;S7JbSv$qsF2};*H2f<-2;&utwSMVzwqd&d^h# zGGJ2<5WBVQB^?l|w*K#RU3u~xzxVJ1sKHZXjSxE=`q{1DsGD`qN24qbzKahvEm-_n z)V0q~n<-*8jbRt6y&{iyy}ZuLM-SRm0f6U-sfm-@17Zcrk;P}gVuFrs;m0N1zc@cq z=++~48;KnGHDoKO-QU!MbFO%Mo;-rqD)rfN9h?ZRD(!$W&sWP^no{C4F8^u->(YUP zr%CKT*J|{?R_wj#mFcy@pyJ(8Fzj}d&c2(8%q+h-kK)N*t%L|6(;9)2Gsh;QU6KpSNl$c zG&B?`WDq;-y+G*z`yWhm_!uiN{OC6I5KgTiD&(A8kr6BL{+T3|-sGxhV<%VH@?p&{ z5!rfs=coH#Y)#D*3SQuU&TN{)>_1vBj2LL2; zbAylCs4mA(KNk5x3fTN a9J9tJHwG$KM!@e308GzJ7jxD5!M_0(4f2rkb1<+t5C z7j+p4xSB~)=v(K5#TTV7aBy|;s82>8-}=aovN|qsa2Nys+1{lvW01hX$uh}FebMwZ zI9WqZ*Pr)d`&YaF&r7vZuR3)ulXg0WFeE(&oev=f9l;h6cV}^!$R3AYuvZW=B0^6e z?~+J=JCuqv^tk|8&NBC)ZaxuIl6z3G|NHT^(psV9yTZTJ)SmpaJ;vYG zm^Np?-`DfHHd+w(P>F)%pU$UbY2M0G6hO8#=Bq;%3*DOz7xLTd>k^#E5U)fsLg+AC zn@TA?A;|cKD+5tyHsY}V;OSgI4>Ef-Gc|>YL(pM>xoYp>tt%sA!92Ln2Pwlef+(%uDi{Sb6u!}YiuH4Xh+mZME zDP$5j41h{W*Ap;X6v?_K8gsyd$K8p;3kB&>OwU1zETIweATnO31#0M_E* zi2d~sbjpN?we+;W{4I#XbEz#0zVKrUfB+S*?EP;T%#~1ptx2t+i)H8bo=al}ryf4? zIEan56B_*s9_%*;Xvb<9W)94j09--lm%<+3#)3184COWCDhPD>zp4}PsBT}} zEwML4^Ulzkx~xK5*XXhu7xG#HgIX1LWu`7$y@Ml@XLy;k6_fp=xJOqh-P|KXSsxL59scJT zfiW8|A?K3>zxh444=dD0iD({0!o|;0jNA==IROgz;1x;ECVj zxA!_k;s5fLCE#Xw(YJA8oWxQr7Bu7zRMo|hqbXE_xi{w5Rm({9L{FA_^SFj=Cc!0{ z$J%@cY{I@yQiOx2BPqg0h}dGq1Ons;nzz8v&@+SfY)LoF}o6i&q@5FWyskOOF0 z_jTI7hN0+^(l1jSIx+;ri?BB${14ipF!uswK zUJYGB^~jd)yV}Jx7yg&s3tf=G-Zs$+(c5YL;8)O(;tPw}-{=#Ol&WAeHPAKxnE}nrm^y6{W$?)oZ zLtv`i-AeZ>zwN3El5~;V1M?(QZ68(4Mkuk9$W`~pBzIJkPwL7er ztBkx&EoQ!a{s6RnWnz;|UvC5dJ9N=PO!n#$a;uSpSf>7K{A|8$-8%&kV@jR}mHA28Jx#}`s4LBq7ykj=(i`BUN18WPA{BfCc zccUd1mK2WhL;ObNlKq(p*Kb$uhb*dSs_PbL<*eU9^d4^1xif+`u^%I;0F8)2*MNyA zt>=8JKvPp7f-H!yc_y(f@Q_vMJ8_fN(1>sjuFet9k85*BK#het|tfgi@h2) zN|XW?%tuYI4&~9kBYLgi;%*;8A*swoSBlP(3ys#}7D?c=qIDMgu8!sXey=ElcxDdK&y3U98&^;Y5L9lAlJ#A!2 zlutL}{rsdEnAycW^EW=oaA8Z*kn-vzC99$i8sm_1B7Z=~j>JZea?~GFp~U+a)@=zW zRcs~7dwmugcztSkjZs7$Vc6RQ*(A+L2(Z4nR>H#2y5!%r?X zn>ufqW@qMak#@LDdG-iSDl^(rf>1+hPf)7^(;WUX6@OYfx#%Uc8y0)LrN20P9KCp( zJnYQ>U~0PkX5*qP;0hH+zj|)4&7z{nN>wIwQDbHlVxVVmgh zzGvWjh1FhkrhPYAU!&-+x-k1o@y)vMFY{U!xMc8Lb}2VoJ%({Im_I!}s1JZE&?fzf zVJhj5LYvyJtZ-7~@{PyU>bt>>C&8D4jb~=Q<7&x2e@M+}@6E-WofUrJo*O^Sc@ZwQ zzq7e%-g-D1+Uh)b!3emGCTo3+r03M-Bkk@ZNILA7{8w}HzBtcu1M*5LcK`A^1e?ib zCYN+-YHTcqA^yJJ_pMWUR5i$>NC*?Tn=}*)Ch>pNyL;+DHV?IPct)D)gv2}eJ$k66 zoJnZ5lM*a;r4|{|%{px42smS5J7E8&*QCrpp|Zl@$pZvUdScLhi%;s0$}g%Wklr(! zc@LE~q=^f9!fB^<1E9v`SCMyE`U8Ng)!eox*&u@Ey2 z<}n6Ci*26VnSuK&Ix9>X+`Z`DE6&M1!9aS}_X5fe;mD3+6c@j@M%^=B z;WumJ4j^ZZ--&F!x2{#>+2EB6aN)JbP(+MKtal;id+7Wnr9P`pQKo17@Ugj=uKa$; zX6D1s+?yF2L}&$Do)(6@%k4PS(2HfPwFJ$t%FNSLtQd)A(R zPWIJ2iZQ-T0#?9NB@RZZDGM}#&k=Bkea1Kz`xz{w@;TADzYLPgLHVoA?7P4fz=Z_B z+Ntf01v$9wO^GNhYsX}C@xufTu}DZ!Q1#mv9Of%r)m?i+wH%CZ3y6;w&oTU)oVg2^ ztuIQaB(q$=#Dq9F5Acvlo@d&VV=He)HC!g42pG#y%= z@k2OHtp&oaNtz3r47<^a>b4}9u)pp=5u{8QT|RoQQSvEA)Nnm-^0$n;D160Zn8_CB zpil40jq~798%RltY$Hy_K4jLqN%QyMOohP!`0(zU5I)Z&-fU{a}zV&=V$!)pUAAdk`aEy69humn^e2JT?gxN@Za41BDk)4_SQXGbP^C`D@->b= zu4ZUwv0;ns>5@RKzaW!30wewCHNz~K)OsHq8;DM)xN2|*U?bf)=X?3b-WB}KCv)@S zVd5K|ZOCZEd)i!QlYf2jTMF@h>Ud(>=W)XaYU^jJ-y_|Y z)GiaqgEPpc`n{Q$(Kv zf5yIEYuJj;ysMqEpw)bPWRcp0YinzVD*tM?WD=(B$`T0=kEAWM5Hod2rdJ{Hzek~j zX!X73TO6YxTm~@I6k(vRBAYma@570+S9j%~Cv`%uBS84G(If<<&&HCg7e%q1jkf_t)I{e<5-;jZXYw|mwlk#^GxX$}+c zRfN#5-|Gh^%CmGC)kE(NU8w4ZX$QW{sBfUaC_g|NH(pNii?ulm z*ZcRlOf&YEBM77iA;{Q%;xpBlDZr^5Ojo7EgavTr%hg9+OQsAS5@&lf+(JXd)riAo(;?NM-p|f1E)#_RDa4j%I~`w^_V@Rb!y++8 z|6TJ&M1)DgO9fo#b~7qSX?<)5NV)2S9bYcKkfUG&g%J=@-bPF(KI$=8bcx7FC3ChS za#yj%U-1h{Ni88*^#5rGyfOGuzHG%-OVrRcaw=z2i(r#Q3$Mi!%0gR7v-kgJ!X)Ig zBP$c7R_>PZ##`wHcbR|Lev`U>0((HmjB!_s)CT<Z~*vY}102vMZ8PYg>A z>swusZbZ*pv@Txic|7s1o#P#2oU13J68pE>0PjeR+rLAhp(G#8vwcy=U$vn0j?1GpeAn zvq<3Q`1bAWE7dp{c+EcS#-4S6n_hRvNurcJ6b7dil5bqy3hA?XKK%`eYRJ73Xm~2I zhmLw|p`6H0xn*2XK9lJ$T`So4bKI(fX`c|hK^#~qem5hc3bcGFdhEiV$1J@Lz-|+@ z3v%f+i55(4>o5;5ULGFO@!vSw8hvzEBVbP-)xX*ZgCryxZ_SZ}H zyNmdM7>bwk@coP5-zvvzw}h)x#xtFhu6Ji!%^$6g?U;Mc0*}IgT-DPx&w{#n)zHkXz#u%4LCfl=WXh#h{dX?xF~Sc ze5Gpn0MDvaF0w{Vl7yu!r5aFWV9*}Y@uI#TYKT%;X|4SRu^5(DRxY-q*|#@)gVVV! zFuE>NYBy00@818etgJJiAntg1ID#f8%KMiFS%}i9Eadi#-=qGbj(4df*lNl3MOuGh zv(>(&i{roPO*-ru-K#CoS`cyjft$+Wg<9KrPlw?#lyEE*_Dvz}2UM@SuRhiXJnx8B zrWe2ShEf_sw{gBg?GE`SCIDkpS0Y_-z8CIQo?Ft53J^-s>7Wx~{=$Nr&$&J~pKMpV z-Z^w!8ZP=*eM`O0Q1F%#KEkeHNcfJdD(a0F<^2!aIc<9uQ!KLGKKp|M)4pkG!3y6F z-6@TG%}PXl7J-qxj<`32(eYX%#-p-pq4z1P=UttQ8ZejLDD|{Z%3Ff4yrOrgS{S^D z8)_IdEQru4kVF&j1=x8w+B&h6>aHc6t)Ym;rB_LZZmqk!4keWnYaw`)u1LbZ5Wc}q zRomr8xl&lBh&4TN8^AsR7d|zvOGgVT+%as7+_vtRSj9k*p z9_ORU!RF9X^dHCdiSoY}8Eo-d!o0;PbjOtkSu2}s*@SfEFo z)~#lh9bDAkYAv-01<7ozfjFu6#5kot@o2(|*^`2UI(!F;uxU)&dK*{ptOX;Us|8!1 z_cLbRqmJl)(eHM|rju`NeUsK7u0c}j-|3Lx1x6eEfzOY(JJs{;3EbC0yQ4O|)-X?+OqG1Sg)jSGr@Prj3-Cw#*ynDX=r%W z>BLwMA5%dfAr^xULX+V*-ZhdFVW`rh8f2{Opu_9xkI67bg8_)dm>i{I^HLP@Wk}l- z?i#UWXL#xr&kYQRLW4DPEf4zI3y|{GQ}yvBSqDDguj@3t3&%M9a$hxwgDuEh5>%Y>D9DB(JKy<|KGLsE zA7pjxC4P7Pl13f-s*wMnm=66$=r;cMSF92cW(BxBr1re)YR8IMC~EH9u+?v2WJgja z6$|TZcmJ%*1)tYpA)1K8)kd3A{x^C@)(^?fO^KoU_t!XBw-g)735z} zzMY`-1^5b0^+;H0U}02L)cB8Tu9V(sk5-Cad3ItU-7WU29(Y4L*(HtdHF%e zk8=fnNtNJHw!Lq0!&OHX+oe7fLuuW<6z^X+Jr7a4BT0sR>R>7S)9mx=;V9X5G$o-) zNrsVaE(gY|i-oYIG)>ZKbadws^6CTGI|;`TbA4no+xeOh47R-LxzfTTCrfE%m6TLT z4E>okjw@p}7>ya3g?TE>%8bnCf(i`znTgw8_b^DY>G1kOuib5nykINH&|6qm6Ry3K zBkrS@cl--5$^O&OVEvs}b;@acdofC$@43s}Hm=I{mI~|FTs?!c@+Z9yQJeu^Y2zIH zQGFh-IK9+UPK$No4}-bhm|f3w?S5KHiqYA6C!Kb7gUGTs*#2ukfSCK~YUD@~eU{s# ztKjaeKJ)JQ693Lz&BUThA-V|tO=0zXbbTS<&N=WQ%sX4OmEcj?y`ah%!1P}FT)w3c zz%G;d#74S)E|l8o@gb>9QOcl@0v?+ns79HwXg)b7F$#~Am#BqBH-spOiB?g4#yWDR zGwl_()}dPR`J%}3G}`DmB=RpZ#*ecE_iQ15tYKGGjenjj++PcN3xNo0E_NlJW2GjF zd9GlL1tUW{GC<1w-&sWtN@D(k-$yNTq+k4wes+-KLzm z@$4`vYaPb&uX9XM_}>|6q=x;fsT?dR{;0+Q!jV3;x80~GdW`e<@lt(jJb9-M-51Zi zY6maoNL`fU==0m~jRvb7uXd38(Eb>$EHmD3P3qIaWlH&Gz0m^^}Rr?=R8fgY?Ldo2yFP**x66qQBcDjw zhrY*4Ja@4!`V}HJ;I9Q{)OT3DlXrBzfn{DK&UE}#OuEVH$cKNhNGPklCzp!Kar5t-C*k*>_=oiZF*bP^ig_&1%d3|9;g!!rzd71vh9uGf)w~y(o^Dh!uMonI7 zbv0V6-%Q3)fBRY0uqX203R*TPlZ=HpmLgW#NP>odi#G*W-&-DFL$N2eW>f2WyAAI* zGye_+)p-JHOpi5w>kXq|?o3_fdZc@8gW{63J$tcZe0jJ85QU(Llwlt0(^AikR=!?8TYbvrhLCB_fvN&v1+yK zXzEvIn@{s-)T9f!4)ry7xu zy$5x1W0Wv^?%uhI9Jr~0vQv!~#*U*IwHD^9%lhd$9rgw4M@gT&v4H4Wcnr%;I?c93 zzkmOBT(N7(_@W(N<5R)kprJ;p{82ExM%YuZ%}j-;V?DIFY){{|)AnFIX;?W@@}%K( zB4gxIUyp3r*r{)TbFMjT)x#^d)6|>fpyo_bW9hNt2qU$V1w8Mn6IcjSs$wn?%b0EC z0KP~#JlO=}vK@pWgPVRh=4UH~8%_6sIX|2%2pAQ@*4uzS*(Or}T2L6euxjIsr9z0G zD;4M$c9UxMcclK1h%l}~aY`x>;eSNF{HjX^G(`=CtWg#gpiPDu8Ac@o z$*G8K9VJZ`->&G&sO4&BLRA>e$(sCwBVu(`e^!E$iWtK#Ase!1WpA%+m2R0P!yck6 z#iM_GiIwn4GPb3D?Cq;E`^$zob%_PuGfoSSsQKUOC3m4X*kKBzYsry!l&0`@;}5(v zGidlId?U~8s`OR+P@YO0;^E_KF$(i$dq$L%f*o0D2iNO%ix^-&=-Skot+2VG!*%sJ zuU^*)t8S}M;z#Epe`K>EBL+14?bKYRs75Hlm-SB(mU`Qm(5kO_5gG zy(yquh$L^^-X8g<24b_(NNwtN6M>;b!1YAB8ZanQt*EM z>JmQdIk`G0pxGQM@N37S;3d0VZzs%Mpd+n1N_{WlIL1oP{@HA}&Ui^EdCi$yzPKCL zA{R?11q0VA!&Ag^y&K~d_Uezh66e;xbNz)&dfx)S<307!25XH zBVS-R+S5X0fz1y+3o}RR^KiUuA*NT6^Mp{_3jq3l5c|}6u;O{;yf1oenk@eFaHUlO zdB?mAuip0pI)m7DhxDJO0C#gCY@K{7N+4PuBzheLyc--l;`j~18uNc4#b^oHnopu; zBhwgR3CMW62_wa*B_?#nr>jT1?jrI*_B`{){rl9|s~6J*7fZqpKgCE>a@f9Q5(sdJ@Z(F^ON0RxuwL?P%HtcC_2DBdi*XXY*kywL^^VM?ZN&CrT_y zWi!7NXqJC;=)52n!Z9LUYQnbRvzK&nKr@K%^d|%JPVI%!gX8DbA)v1lgAj_>Rv4VV z=Xu3O@7yM1$K`?#(g|@Y# zuo1aA7Dk8{3oN2=8dXUyi3vMCqwAZHqT**9uuS%~xEfRy%%%>?axJMQr+RQ~ zWqK19q_Rn{fh0A$`B>nl@c;jcG4T<8Pr@*gzR+gYk;~|>IQY|bEg}(1q@>>Z9 z|3N!Y_$`SLRgRyhA^}V{tJ5Z};FZ7m}w^_XRf}z`lC%!(-Dab8D;W zO_zQ>8nQyxV=jeg2cv{UhD2{OpSes#S(HA$@9ft#RCV=ss@GA8*a@g@L}>o`pg|WO&Q2r=xN84ZI)m=* zN~v3=$Mi`Z`Klpt@+C)xziQU3ttQUi(*;%a*HMyRhvq#r%DNf*=*!84hT~pJA?P{XJuC8vJ3dwRF8!{GA(r()Z&NbZ@7MQbJuc)W<+GXDtr&Y_Q%tcp>iPF%{!NM!e z0$dH`F~n`c{3VWD)`V*{M>Byk*prOXa$Pb(j)&apAUBsUH=Y#hdNkj zoi$%CI{i`3e1iV5salGkujDThW_vf|f>zu0^ggv}C9Wo-5uwEfaQpn#Ql%aL3|=mU@<~6i`NVB`toZ7|g*8Ao7?Xj9*@B zLPCGbfEA${1fV2%-gW3!`V>^xnR=jO%!ieHQ#1D0x^+Dt?iQnnU+Ann9Kz0q^&h*&lm6>E_WLGQr^MuL3YLrUvW^1)opc}(5@$*XSfarK)h#fk)y-Sg_OnS zS0uh#KN3A+i3q;q9u(yGS$d4kk`}E3dYlx;2r8ye%dUKiIg`H^ao8R?h2_mDF+|kso!zPEJioiZ=*=YYY781*oYfjXdQW@EuGS zY9}5pVJ?;Mt3HgC;&4~2=!jD{Uns!s%nSR(fMHjkmYQljSFTq6`?t_R=^AOL8GrZ; ztgT~&mhrOl-2j46ozt4N?V?_A2!^ip9BsKf;Nq6bx=is;KXfZHu8DX{a? zurg_AZ8?ex;QG@lw*!^@SHtkE{k5>HeRc_}o?uT2klDJci{k7c?Oxk>?Qvc^I~VON zBx$%lMoV^WySqpn9awGheJVQW-ANv_!j(?{y&Ks8C9&MWUR-2Ve zAQ`36^q9{$2q(kM`J!r}J_O1sLz1$(B41YBU#VN2)a#JNTj--gT&vNnqV86aJ054m zw!&*``Uf&*f1N?1v!TxR13r3nUb8~BYt2McU2UIAPzk8Tu)oTIweR%e^W{>Hgxt_Z z3K@Iy;R8N>!-KeZU1CWYM8O>|4d04j0E zrDCdsOY{I!Oe}`#5TmoF$sjtl*Lkgdi6IulcPoo8s;neg^V@<+r*H-LLgy!x)2$d= zC_Kb&%I#^upo;_M^46ftI3sO%h&v8Wg$7 zA2if;8QU0`Du=4tP#qy<g z)WH_xD?ueq`hZz>>XpE*Iur0G%RNiI_m~g zMl`_9S!{Em=Sh@_P4vUOrY4PsDi&`$$Ap@kMB#GTb?#8pV%rCb zVGr|lM)q$>DE=m94Nt)EDa3pW5=b-0xcekutsxzhHVQj+!Q|$Nt{kKf2b4Rm*7=V0 z8}P_P1_`yk|NN0aAnak=w?BXM=fD#+YINAd_Y3**n_9Fw9r9)*fQWCl*1nN|*GZDT z|7;doWjJ@=K414cj4ms7mdE-OH@Mp7!da(|_yu={^`fZBUD!aU9^q)ABYaXDYlmL> z3$&c(JKI`_k{;iVrDO{WvCOOZz_FD&lQRt-_hTiH(qjZq@#5NKLilXEb1hsAV20y7 z9wdjH{;uKT)|lC}zTEu0j$lskgA@sFCN@ zn>3S1LWo372jsnbDqpHcP|&jP|7Rz>NyNN1+>yUq)u>OiDe)|FNPY-uOzKf`U?;~c zYH!CJOxn*sI>&%{Gpi=xN~##XF4f?H5r1eCC_u2lr{gy#D{A`sF;7pvUXmU~wY6vC zN(U4|u1H&sgsAu|zl6$6&@$+{0F$gW;@@jw8-5Ak2gXT~dLic#^X&5?uMKUxtU$E(*-@O!VpR zCPO|1H*4Z}n@hF%rVH3Hf#Oc2{AvkW*4+4qQg(~#f4^@MZlV6p^UlRwdEhWn{m$i* z!zjqNPvN$Y?5~WDG$-Iv0Gf*Ro1u54|M3?~MpV0f4tjT37-^b+K&du}Y){&2v1=O$ z!&4gC9rYb3xh~!?1Z!+A+g*G>Q3D$MOx196l(R8$HNrx+@@nmTr};fj!u~U6(r;#` zrydMf1&&p}M=HFJYtAgrq-;>*(p3ibT8XX=o90Tb@C6g}UHl?rS3wliXF`4x^3mX# zDCc|5<_?@Ma(sT!@Vhb^kZmS$2re>1mC?r%8GW$cP z(Gr_H;K>P>V>0c>c)fFNfm^BTJuG&pSdKk!+G0phii&)qQDO#HgBWiH6Z~!t_Tj!b z)z4{R_MWraw{OYAVq;Z34zh#CR*iBW0&&RA&7g6W^CONPbual=R2}2V@(;};yTMne z(Nynp`#xtuyPWLIZZ+DfB>>H&!%3=%ByG!mbhak?v^yku65=rOufpDr%nHuTL9#m> zH)${Bg&Jy8TU*qXYc50k1J>9`-hSHPAFXwxIGO;F#bKcwvnt1U@t^_W=$2*I#+!Dx zAOzIeX$NlO%}r1L(EUuHp{YreSN@hO0D3smcI$>MpCwFRPgNx`j?qp{u}d59WO%!K zKV&rsDfRa*T;w*0Z7a5c%q;4aiH*5~4N(i3OU|U30}C5Da%xy(6u@RpyhWl94z|@3 zmsF!p82$y3qVi!R3_@Q$<&@t|GHyq&@hH09+Y~uNIZFxYq=??oNjNTE8VIOYGiX9b zyd3d9G~&?se^!V4e-*v`AjsZG*Iztru$kfESlb^0>;y^ft$KD?iPeBACDpLwAMoO{G(C9JQ9vkaQzunjgd(GJy)U5Tvu%24HRjmE8vCH(*q>tYMrn%f=`CEqn{9T@777KA+$F zX7Gb<$9G(%1@d%M){jN=2&QM1?Q4@M{n#@61<(9grz%%qX!L)JE9hRWB1-xlTJ`4q zTry7nem51VUL@DZhh&NRFLh*iP#Opt)Y?Ljk*|bg3Gbe}U^bN5R=T;VW;a@+N*iUt z)G3Oe$yL%hZpK7gX-pM46tpuwUf;pmR$cYd?9*|8WVvN|{txWe6ICs+ET6-cqRCm5 zim^}$%Hxf03TCaE0dSGb1Z-wTom&ObeSXQg(Oj1Hvdz(Tn7HF^lw`4^oBUH!sflK; zRx0Fb89E3Hj3m55w*Stz@=e+6VU?O!aE?Gif~ie~$@cR7W6rt-=4#|STVOkpNG??j z;{^B09J*!m-%_pu$7bJft)Pa3JN&2Z19oFAApMY1W<*~$oPL76?NT$k2!pt^T9>V1 z{QdDw6B_!O#$)RCNwreC`Pc5HSc1F8*^M!2T1JlhOB^7FiT6qD|@HAsWVW42j+ z9yzG3_@VswzPNqsrkKKJ5WFXH={r9*R`={V=gXA0wvN^Kop#64&i>1-xMJ?8(_!G) z1amb_Ue(!Ei5{tFZSvWy$gg=*l2a-ERF<_s!Mq2m{nVj9#yd{Mg%fvsF0VlZ8wPQp z^>;eTsgui%OPKLp2u^SCl8N**CY@lZ+Dsumd-a0tU~t5E*2naZDUhs zzb3@ZPKajSrAE(e-2l|ZURiiT`3Ttv&Z0{zFkMyDO#85fzW?KPlr~~l)7aIXJ(blk zN^SPwvt~EJ8!yD+qptK<+YbNcH|(!XwG*f5em_|7cB}6p(+sS!6|-dpi+T1X z*>26DML<>$rXbuVrN7J?QryzOw+Ea6@;>3JRwk z78DwfhcovDPCJkAH9yBJKhtv<=#rQWDGeU>(Ez-PIIUcvOZZVsh*qJp3}hS4Xl02d z<(b-{RwfE{e)B7qSKoj19ZJMx0dNy!(RO~*=QBW}(H&|edSQd<-!r0<-4WeZr49H8 z9@O*Fi9dyDoWDAmal3hpKGjaN;f28swTkNvH+%EdMQTyPuOVUJ{g{GvW-2Kz)j(T$}8e;IPT3pE> z9&TuLajlwt5{w*CLql|UO1W_o4j=54Vv(eqB))3UfjuAj;5lv5$Xk=b)_zcgZg zkJin=MSji&v<&^j7a<<^qpyQH;KZd1$Z_HA?&~Yz8Jp6@44YouO zIJto2y#v{!ua80?eyOu=BR4M|)xNDinmzXV0ngXwnf?XR@U(0bE=mk`DdV{!D~+0S zo2hZk1#4*hZ@SlF$3NDmqXsca4M0R;M}Bhc7zlfuS)#b%-Efw2L1#6tNDi4moew|2 z40j8?Wm8*2N>`l!^XC+L{%)+$kD+u7jXpCQ?u3=!YX-Xd(bX$wgOkYH_~B{g5fzFH z5u8nZF8>lCDba}#3LD|qR95xCD!5g#Vkw#2)Jt|nGsZilyaCJBsv{q8bi7KI%-$>N znbgqS*a?S#T?mXu(@ACLdQV(TR_8LxnUMdw$X%O`XNz!|6=FV*kdL=tQ3AYQPa@{Y z#9iWDlXiK*-_`3|(DnE`!b==FBSlz6S-NidTKoO}GBXTYI`CUB?;HyF5#OgIseWc{ z3gJ_Vc*}vH;8nAD|I@VkRes##NPfh>-h&md`+dwgMTaX1ozcT4=j|Q z_X6c6I+xQh1bw}bQWUkLMsjP)XBQy8a>!xK8$xxAcNGT3oef9Lulxw}EBTfe{)^68>a_i9_jM7U8yH;U+9W`y#u2zcG>gto&Dzh z!X;ojn|O||ERhnTqO3zS8kKaIq{{8GOSl%g*Lpn}zw`1)(bJFVM?631KR~;hU>HV( zJL+hBKu3CVS?Jv-u;d^p+CT?JG^zBY4vqW@yu6 zyrR#B%Ea!S#ZG+py=48uvp?1VP(QsGAz{;{Scf88edYyM~r=W&swX{4*1J0i6gQ!Z!GtymC=GuG8 ztv~2`PcNc2Ho6yxb(0EaB6De^DYeMc$hHejlO)0?q2!#$4Ow(uq61#0>FYdu0ah8~ zJ-Zhs#mo?TV7ur3$Fysu&;MTH`)KZ86C_z9JQ|BiCW8BZ&?UPG*9Sf&;^3vdaRl+Q zBX`_G%yy2eQZIo&H{YNb`^J~)KVf}^Xm}6eKrU67#ynAc>rR}oqJlJ{Aqg?D`t`nwU)iWdZ;t~TXyj1 z5xvn)RN6%nKOZGi3VoR+o_)4@ND8|z#l|C8VG%MN&)879Iq;Bn(Miz}n|(x3r2pP( zrkM2D_l#`rc4#~!Uy8~aWN;y+|6Zc`jIpmePe0}@9gpd`zXVbH?nhl3TRjvcY`%FN z@J!IrVN7pK-re{erl|3tm>@X2dz~(yk(`PXlybK_v8Vk)@k+72t`)C$n$2og?Yih$ z!dqBYJKt4u_G6_0!>Z&jNPWLN$|;@0pXKdmp!m_>PUS2YMpu{ob?pX;Bj-Krl-c$K z?>t0Z5tZ${$u}PN+8Nrn@MBo#x+@bme-TVEukqmmoVh7kD_hq@xyh4Z@x6^v>dEo# zZ;j+v(O)EM& zveIBT7VxXbfM>gx$`QaPXQbYf&);*U#_5$v-u2qNAdrX9NAAzkbNrOhjA!PqfI!wG zh9((?zQxOkdmD~;YU`qtT|$9z`XXc0DHBVj_Us~Gx1}w1oEoK{(zSsfYa5wd33pxX z(A7VFA_VSAG9@J9tK)pUZ<8IOiWpFz3A(hQl$Gnb6Jg|8n5WFpi>fmlbhd@|&dFMe zGdZ$dx)f@^%m_0WK3R>Ekoh-O4gOi}Qp6tejxiuKk}_#QmqEr2t{70&FYb zi|l0A>Zik$9h)-`lhsy~R$8o`hfFye)6b-d*?&`}=kCB(Goa`j>P*;Yc6tJ^XG@5- z==%zRhd%5N@NF|f3TJQdrId)Hs+(`J^pj>gA1^QO-H3|6ajM=M2Q{C_G~16Q;zs!R z@nfkvCI)Ue@~4XY{gqM)<`j(2)^N~C1|S_}bxgA2>{)nut7w`}{D;K2P@0mbR$G~2 zW>>TUMvHU4CKe^kXN(wm*|9<2NVZv&1ln=>ZjAmzI7=3~N7k!GF1l@ESM}UvCvz|4 zqI6~cy;404Au%EnaRncKdFIN^r0?ofDfTH)XHX5s?BQa}eOJt}r2g%<__sLt3MY_7 z=ZmCH{Aae|r12PZC?~Y1-e2SUlxfMBo1CQl&1_1d+4V}p40(H5d}S+O5;rR(s+VW%$#~-Z*FV^vkUhH>BB0$iB2WgI@;cE zxfJuFOn3LS{`n^kerBZR+7Q$}DR`Ahj6uMcO9EBONg;rRbjInX-q$%Dc2#pO6r|XnuUo^s zX%?r|**p9^JWG-`&X~DUc+O1ms&^;m0T0f}bH4igP1SoFxtjH#H#r}jV|Hz}v10YX zgXd*$UhaHxIDduJ+bcg0e*UuYT(QxkIZwBoUaTvU{^&s~o4veVx-D>lOMzwSrIo+W zRXN+1zewJGt|afAi|uXW8OHNF?0#)>K5Q7mmXhwOHTBSc{?@xL^;XN-tAR%eF?hQA KxvXf#9wkym9y78VC--B|zhl;O>pPyH4lLy!Ga- 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 QK){c}J5`w?DMR1?2KUg~0RR91 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/open-comment.png b/Document-Processing/PDF/PDF-Viewer/react/images/open-comment.png new file mode 100644 index 0000000000000000000000000000000000000000..900069fad6f3024f5f48bee48da82d2c93676c2c GIT binary patch literal 23349 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/open-fillcolor.png b/Document-Processing/PDF/PDF-Viewer/react/images/open-fillcolor.png new file mode 100644 index 0000000000000000000000000000000000000000..5eaa678063e11d59c97ed083869ab2e1c874155e GIT binary patch literal 21372 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 LNkvXXu0mjfTD*$> literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/open-ink.png b/Document-Processing/PDF/PDF-Viewer/react/images/open-ink.png new file mode 100644 index 0000000000000000000000000000000000000000..c521252476083a98689e36457cd0d132a0beca98 GIT binary patch literal 18662 zcmeFZWmFtd)FqlA!5epP+}*utEVw%a2=49>+}+*Xf)g}23GM`U*Wf;#nfWpEetd6q zy+5zls@q*%UA68#b#C3W_t~c-loX^;5D5@JeE5JOBMnyh@ZlpoWSfEi1o;L{RlNoB z_R(2I3iP3Ng6Igc17j{GFZSU>eH_w@5iDdM!9iNv`NIdmz`yNd3Il-f!v|?^8L*g| zhrwA6+!t*1yP=-NS#pm5+^+}{K8 zY4wZmGvlA0-m{nt3){Md54keg^I6qjZK;${u& zJ34i2pTH~N5|Joka0f&TZvFj9F?{4UAB(Q>c;ftn3VErG2nm;ID3MC`yTg``&2`7_ z%lAE+<`_J&CbT!c>#e+wa+@d5k1y96WEgIEM(_tL!!0Lyp&~pg*1#2)|TQP;83mWj?hb9(?Zx=D7cILFz9?$;CU@qAr8Ow+u#)8 zCljdcC8%n8=WzIP=?1&aLCqQ_X#QezF{}|05%If;6iKEzPu!lm1X;F9!C8;Opb+MU zSivOb#Y8wz2}`nrq-&ablnKg+eUBshbmDolO@#Oxmib8Z*fQ}vCVW{oBMnIGPgn}Y zdC6!=C37Hl?1+r);e5U9jqF0Ph2r-kl-QzS+=~8oPX25R$#T(X-;cS^lcJv|ku&1_ z^Slm5SCC^1Hxk?*tHL=ig2uuo16d?$qm+O#+|+<7{}*`0o;Nl>-EREYF%3MgDUWQ= z-w7j<@V)$)2o+Hb!G`|YA?x1v!3v!{#`UuO=RY<$z7%giWemQCZwprICfd)6<+o};1uf|T1H3eZm<)^ zZfH_GU3-BKsy{-p=k>sQYIX)#RCSMdm2wY=>DuyW$oT_WMXnG+^V}#5ymnmWye`eY z)@DcRUibliIH4@)|3sHq$_V@zY-DQU^-e_7+9~IiRC0<^S%-ITa z6i=(4o?n9?!%!Y);0gr35+V|qJc!Tm<2+*4SzwdXjGr(M%xRJg=d^Bw)-66c99|u4 z4(ZwrGx5Bj9K1X#?Y_U@*tOsGJTNKhHw<`Tr1JVa?xig?m?C-I9)~~!cs~?L#SMM? z2>so5g?lWW4O-;=rIGJrru4XDxKefNhqtYoy{FVgh7)HkrW!~~4i?IDx3u2a16m7;u@Sk2T;RZe+Y3_uCk^Jn7+1?oW zg&fsaC53tQb*H!|J78>YmesX)!2`~0Tsdf?)03mcej`>a=u^gHd|S50L2;Mb@p`*8ehwGCIEfH30f!EkqdwN6b_-Il1z$^yFUDbV zWciPA?PIW2nNHrvOXTEGBgqfi?s>4SimUH1%T=M=6F((8-$sNUEVKzE0q2oFOZOg3 zO+N&MokewvOKs+V%#lCI&6gd+Nn6@k_@lVJ$&owUv+;-~bvGf(s`eVhGz&M~nen(> zIW5Bn``+nJ|0#wvD7t*W7u)7+O4%mlOO>#CKow*Oly5G|$cR@F5?iKx{4NA$0V zdo=iv_bHD<{aEQ@r&hhHK)-ry&rg|#{MA#g9$Aglyqn>>z>BCyv)$rjar|uZVBu%% ztvntmU$3G+B8p)Qy-)?^(rr2D)duWvjs7}_iXFMU4mV0LxQe~E?p*=m%x`cCOFh;# zQNf4DCrrI@S$T%0A9(cBkGz|u-)jdnqTPT3%F2lWH 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/open-radius.png b/Document-Processing/PDF/PDF-Viewer/react/images/open-radius.png new file mode 100644 index 0000000000000000000000000000000000000000..0dd083a9cdb490f0d8039fc17e1b7d32ced947b2 GIT binary patch literal 19925 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/select-text.png b/Document-Processing/PDF/PDF-Viewer/react/images/select-text.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d119b385119175bdd54c7d89cbfbee3d10c959 GIT binary patch literal 23051 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 It005^1#-tn^Z)<= literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/sticky-notes-in-page.png b/Document-Processing/PDF/PDF-Viewer/react/images/sticky-notes-in-page.png new file mode 100644 index 0000000000000000000000000000000000000000..3a96cc714d1ae6b08e410cabe990075d59465e07 GIT binary patch literal 20085 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 LNkvXXu0mjfc%_eI literal 0 HcmV?d00001 From 2ab14c1eda89d421fdf4a605e9ded55bdac9f7b6 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Fri, 24 Oct 2025 19:39:04 +0530 Subject: [PATCH 32/47] 984044: review corrections --- .../form-designer/form-field-events.md | 2 +- .../react/annotation/line-angle-constraints.md | 2 +- .../PDF/PDF-Viewer/react/events.md | 2 +- .../PDF/PDF-Viewer/react/how-to-overview.md | 2 +- .../how-to/add-annotation-in-text-search.md | 4 ++-- .../PDF-Viewer/react/how-to/add-save-button.md | 4 ++-- .../react/how-to/annotation-selectors.md | 3 +-- .../PDF/PDF-Viewer/react/images/add-revised.png | Bin 0 -> 28372 bytes .../PDF/PDF-Viewer/react/images/add-shapes.png | Bin 0 -> 19221 bytes .../PDF-Viewer/react/images/add-signature.png | Bin 0 -> 22529 bytes .../react/images/add-sticky-notes.png | Bin 0 -> 20021 bytes .../PDF-Viewer/react/images/add-text-markup.png | Bin 0 -> 23517 bytes .../react/images/adding-signature.png | Bin 0 -> 19302 bytes .../after-enabling-annotation-toolbar.png | Bin 0 -> 18960 bytes .../PDF-Viewer/react/images/change-property.png | Bin 0 -> 23044 bytes .../react/images/close-comment-panel.png | Bin 0 -> 6322 bytes .../PDF-Viewer/react/images/comment-panel.png | Bin 0 -> 18581 bytes .../PDF/PDF-Viewer/react/images/delete-icon.png | Bin 0 -> 23763 bytes .../PDF-Viewer/react/images/edit-annotation.png | Bin 0 -> 16388 bytes .../PDF-Viewer/react/images/open-comment.png | Bin 0 -> 23349 bytes .../PDF-Viewer/react/images/open-fillcolor.png | Bin 0 -> 21372 bytes .../PDF/PDF-Viewer/react/images/open-ink.png | Bin 0 -> 18662 bytes .../PDF/PDF-Viewer/react/images/open-radius.png | Bin 0 -> 19925 bytes .../PDF/PDF-Viewer/react/images/open-stamp.png | Bin 0 -> 28981 bytes .../react/images/radius-annotation.png | Bin 0 -> 22784 bytes .../PDF/PDF-Viewer/react/images/select-text.png | Bin 0 -> 23051 bytes .../react/images/sticky-notes-in-page.png | Bin 0 -> 20085 bytes 27 files changed, 9 insertions(+), 10 deletions(-) create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/add-revised.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/add-shapes.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/add-signature.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/add-sticky-notes.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/add-text-markup.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/adding-signature.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/after-enabling-annotation-toolbar.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/change-property.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/close-comment-panel.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/comment-panel.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/delete-icon.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/edit-annotation.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/open-comment.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/open-fillcolor.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/open-ink.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/open-radius.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/open-stamp.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/radius-annotation.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/select-text.png create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/sticky-notes-in-page.png diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md b/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md index 9be77ea98..af0410090 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md @@ -7,7 +7,7 @@ control: Form Field Events documentation: ug --- -# PDF Viewer Form Field events in ASP.NET CORE +# User Interaction with Form Fields in ASP.NET Core The PDF Viewer control provides the support to different Form Field events. The Form Field events supported by the PDF Viewer Control are: diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md index 67eb9737c..30a965032 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/line-angle-constraints.md @@ -1,7 +1,7 @@ --- layout: post title: Line angle constraints in React PDF Viewer | Syncfusion -description: Learn to add, edit, delete, and configure highlight, underline, strikethrough, and squiggly text markup annotations programmatically. +description: Explore how to add, edit, delete, and configure text markup annotations like highlight, underline, and squiggly in JavaScript (ES6) using the PDF Viewer. platform: document-processing control: PDF Viewer documentation: ug diff --git a/Document-Processing/PDF/PDF-Viewer/react/events.md b/Document-Processing/PDF/PDF-Viewer/react/events.md index ac2882d60..7d0caf19a 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/events.md +++ b/Document-Processing/PDF/PDF-Viewer/react/events.md @@ -10,7 +10,7 @@ domainurl: ##DomainURL## # Events in React PDF Viewer -The PDF Viewer component triggers events for creation, page navigation, document lifecycle, context menu interactions, comments, bookmarks, download and export, hyperlinks, annotation import/export, custom keyboard commands, printing, signatures, text search, and text selection. Use these events to integrate custom logic into application workflows. +The PDF Viewer component triggers events for creation, page navigation, document life cycle, context menu interactions, comments, bookmarks, download and export, hyperlinks, annotation import/export, custom keyboard commands, printing, signatures, text search, and text selection. Use these events to integrate custom logic into application workflows. The following table lists commonly used events supported by the PDF Viewer component: diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md b/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md index 036f0e239..dbb78c6b1 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md @@ -8,7 +8,7 @@ documentation: ug domainurl: ##DomainURL## --- -# Frequently Asked Questions Section in PDF Viewer control +# How to Use the Frequently Asked Questions Section in the PDF Viewer The frequently asked questions in Essential® PDF Viewer are listed below. diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md index 7efb5c1bf..f9d099577 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md @@ -1,13 +1,13 @@ --- layout: post -title: Add rectangle annotation from textSearch in React PDF Viewer | Syncfusion +title: Add Rectangle Annotation via Text Search in React PDF Viewer description: Learn to add rectangle annotations using text search bounds in the React PDF Viewer component, including initialization and search controls. control: PDF Viewer platform: document-processing documentation: ug --- -# Add rectangle annotations using text search bounds in PDF Viewer +# Programmatically Add Rectangle Annotations Based on Text Search in PDF Viewer A concise guide to adding rectangle annotations at highlighted text search results in the React PDF Viewer to visually emphasize matches and improve readability. diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md index e410824c9..3b2d64de6 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-save-button.md @@ -1,6 +1,6 @@ --- layout: post -title: Add Save button to the built-in toolbar in React PDF Viewer | Syncfusion +title: Add Save Button to Toolbar in React PDF Viewer description: Learn how to add, show, hide, enable, and disable a custom Save button in the built-in toolbar of the React PDF Viewer component. control: Toolbar platform: document-processing @@ -8,7 +8,7 @@ documentation: ug domainurl: ##DomainURL## --- -# Add a Save button to the built-in toolbar +# Add a Save Button to the Built-in Toolbar in React PDF Viewer PDF Viewer supports customizing toolbar items, including adding, showing, hiding, enabling, and disabling items. diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md index 3d1b5ccca..0f0a3abe9 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/annotation-selectors.md @@ -28,5 +28,4 @@ document.getElementById('annotationSelector').addEventListener('click', () => { ``` -Sample: How to customize the annotation selector -https://stackblitz.com/edit/react-dnkbqh66-tsqcqdcx?file=index.js,index.html \ No newline at end of file +Sample: [How to customize the annotation selector](https://stackblitz.com/edit/react-dnkbqh66-tsqcqdcx?file=index.js,index.html) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/add-revised.png b/Document-Processing/PDF/PDF-Viewer/react/images/add-revised.png new file mode 100644 index 0000000000000000000000000000000000000000..0e0a24bae4e96bcc1d49cbc24e6a5614715fcd57 GIT binary patch literal 28372 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 z zKCJU$K$>9{F1#9KMt?G8`(@Z;sLzF6mpn^ijS+#VIl_2S^%@Bx^HGf4cX z#I`RG3D@6ld&?)%QggnMZ07htQGdKy3cU9e9?!?b)fX8jqQh<{TNw^$1$1L1dd24W zJ+cm9`b2&8%ggDf2Hj~H#Jo=_h^3zT>Z{}SLk{T&pBoguD*i=};H$AVf!Gd5@;CZK z%*WMxvVVc?YV!V?=k;;V!1Ks2rK*PcBkFie>rv&)w&bj9 zo}vr(phMrmzLI?Elj@h_kTIM528QUsSA0_!xD*D2y!>92IGPC5vwnE!-S8m;?T+av z5H*^>Ic1wWLT`UvaHhU?4e+~HU&Ltz&x)sYVCGB3uPfsbHQ})%5l1EDvz2;=Ny^{l z#nF&TP?C}u>LBQ`cHh>xv5o^C^W0@#m)62am?*ca?Q-QU<{P_d5*;tI3*Xm=uJ)}z zG*Ws48D6NLQ8V$C1@37Ly-#)eVB@8ZR929H)6y*3uUk)eL&n3g#1nC}eL!K;8&Wm@!f2G`x1MwhYP^rt zgKaK_Hspz>2R+RL`F@=zyApP@D|j{@z%j?NE;SJiae9Yc#)j|eElY=?kI2Gd0xQt~XbK7ivKoEiQ07jJL(WEqZsUs}~`(?YM(!b3qkpZsZFg-Bsh2!nG3zo`KIJ)bH(^`n6)3`$#L$|XCq@*ZrQd9!Tu z;NhbC{E5#!K0}a`SvW5f_v$&b@N$p+!gS>4e#^tW*hK z@EI=p*^*)7!x)>y=azAPfxCzFayPSj$oTnIr|j3Sp-RuLa2s{Y?MAJQzTvp;zF2<8 zxCDysfsUuBnI-(b$`5Z?Va3dtx~4PMzvV7zoZpxh4T4`te6jBC$dsl)jLky9>Fib+ zT;EY*W++0L$T3Hs#RpBW2F{uk#sa7zJo$*JCs8dAjbF~5x53eV3zOOI5zz-(bng() zI8Lys-?9BHx-fPLE{uc?S=7#+-(xgzCP^BrV~0AFv((gdAg zuCG^2Qw>6Qj=*KGhm&X9cNP@g75H$Zb!Z+-CcyipuMlltPd+sd#gVM9Zl{@{_S2OD zhWr+HCz^$dc{UVi+eNG?g>7vJgCRoE z1pEXg^{Pe3Fh3ZKXFDh@4ApB_~)33awNpce4BvpA~f;zzK1nh6Ycqvk3%lHe4_XihP{SZg!45IvU za7e(;>c57@b6wVtVLHs>d9LPey$S0uCg=QU(ry7%ry=TnK~quFm39P5!f%wftG~yW7rI&2W4Ug7}kvijwwMBz2HX4aLV`yQ~Hee5PzEZl@zj;|aTBQltAmXY+ zqpk(u0X)}Cjuu+yy%-azKZ2bpV<)pmx6HiQttRz3I3=g61Dsm+qqK?eTfgWUob{dR zJi|XdOMs12!UxGm;MaqeORQ zGf2lOJJc%2ANJ;OLcDbHj26?RWli+7r<93*xhj-309>MS@`*<)il*LCptHV)U&1EuffmDKNO@Y-j(o`dtp{d=LQD zF@Wf3F5(>5+eDvr?48Synf?YY4*8V}RdDO$={xs+Jw7%v;oG z#_5R>xzfPt_!{0Ug%343c2lQ$Vd}X3XF@s@`9o> zMXE(|>}Z4MwxwikNIH{s;6ub7Up8Zl;p&Mxi7sHBoMg7YuVR_CaFXiX{e>(Qz%OVB zm!a&7ugJg&p335G2bn)9cIsDU=W&UO#l$>@=ZIc(L2Z@taC35{!4>X>xwiYg`eBwN zu*qR0D5+iRMa1yMw4d#vU2xkpHgbafD?d#ptb}K$7CsBJp2f+}Ku|!x*;En+@!D;s zq$uen`HhDb@aufGPSBfY><8u0uSr%N9i2;`w~paG6PDKXHVotCof&xl3^rW2i*C{o zF@DiT>@(=b^m_aBIgX}?Gg)ra03dv>aFkfQq^1Cf{isj9di|pQ^!omNxvI#* zqE-PL$!2WHx=&=!CsvZ!+8&&o97|Ya7yiSwOFvUM8C{b;9~GQDg->a$=!tHXK3~6?9xldjbWf1<*G3 z(I)q6R7bO&;h=3+rdK59fY6~_f6}wnM$yt(Dvny#h$i=AD z-0hHYNNZC`N=Xxf)lk|(-)Jo$!cDzkTOzA~Bk~0~q|fWHbH?jr-HFv%gc}Tk_*w=J zl!CeXzE}GazE^h=(H}0a{em9p?R z6fxen4|BA9F$@=M0*}M+zT5{i8eh0ocv5N);_|A5%x8TbPJ?) zHe9dE`U>$~n*@2)4Cv|#r7gF6w9rUw_wn7k=mm=KW_QZ>dqm>l)=RDMjP}WqpTxL! zv^q(O?PeE>&%L$Nn(Hyuu{&>kZf;DK0XP*t+N>_Wk{hUBa&%UPw$5_3+Ld28tv`0z zQ^D7)C}aB+FI_E;tUO0siLOfczf~S66Abw{F83F({s`C+_( zC{;;1v2=1Uy_9%-x;JXSqLW4`BdDMc@UA5JX!HEZy|6cGM&rxkOwA``Qd?F1EVQ`Q z7`C=|c1xx`C*-8r>A^hyue7YhmFBv(KV{Vqjmr&*6)7ydB^l?y3h%%TIEo@CXh*}6 z>~xja+)Teq1rL-_T};)d7}Ivf@+~~`VzxP_H;{%)Q;?gkNaGte(2YuR;7ThhQiKef z1uKf>SH5`m`-U>z&_R=HN2MgOQ_>Z%FtC4Gu2#m|{e_KVX$G3F<#GP-o4_iU8=K}9 zbvPK$B<*ddC^flwv!zlgN&} zR+;A2O(=9h8+f)#vEfBBq;in`$va}XsbjY3Ncu`;5Q>kYpEB0;v>CsgGA>UdxRLOjwnM#<}Y5<-$xydEysZuL}DG0v+nLsmL z>06=$hq6=GSxU*O-_doH*s+Nr$>&8Lgw*d-tje~cntaqM{%+lL(kq|L^SCf&zGQ*&P!u&W`h zt)26#G_RqS8RQ*F=2|=3_~8DY6dk}_-(YprsDZOomx5Z+dz<_`k!RJ*wt`)<<9wCR zoi((w7vUt3%{pCuicX@0=83en6eNKH5}?bn&yC96%n_*B_0Cg`S|;rY^(ydaT|6}u z?=L+Dm!m{=Ny1=`#eVQyUiIT{sg(9^f2+P167cn!x9k^FUOTa*het3d>6y}i6Q;0g z(n=z)p#|ZGaT2WkOj-T(^br@Vk>&z?x3FWh@8C5MMe$i&o0c(oahL`@s!hR%VVeb3 zN59WKwh#j^g>j4xHXSE=PDLD~a`LysvioOFBC(lHMzr<(!lU)2f|U*;QvdK+RGPq- zWXO4LuU1D)hm~RaGc#;BxXfkM*wa8S(G0wFWie%iQ z^noSfX`8ts{w9JOzV|lvoJ|0#6tsG@JWppp zNBi6f8xf}Nf%wG&X;i`vfnq?;yWg`Gx=kkfZc0(kY3`Gm?j`B&geB3LrBS_lKXd11 zeYdpJH!2t==F+tmSdST^5-nI)9W`+gbWUgYiE!Asj=3xnx_^FTV_a+vkp}GfGq|73 z;?TV9o4bu^J(>NdfX+g3;0Iw9ZRGWT`>h-Qw|AZ7OKKlq{k4|O;h3ne>a~rmBLi2! zP~m<^@)X?ZBA_ZNyjX0AC5cDdT;0ZRWrf7+uus}!3{>E&?~|%y#ZY@{xY96kP$h=z z-i-q+!F!K=%6KX;;Xb^76a|Hz9V|_`_y`>bCg1iYB;6XpYW4jPA%~RKhaM1*xCH)m zzM_1Y;kjU+?+6g;_#;fd*pA2k*Bq7OcICWqU)cw9kxgiN`FgX zE7S_*@R=IQka-6uN`?JZ3|xDZ&obZZYOS4bpYd;>5zUvq>KZQ-8UieCPR{)Q+H6#b z>;t*D{)i~$&jyo|m+LB0YkaijHso?>fVce)x6xNbC)|5BR*<@7Ie@YMxzTICSZ}&& z8phKXcXYFhWZ6yV$L5)2;%ZzxJzm!mqC`C0gU}**>BSW}cVwMtS$TOsc%dsHF%hac zGdbheqkqi*TmDB_DuZjhg6`nY2@l+O=}V9Q2B7PIJOfVPvAt6z1XLvd zI!U!`kC$DxBNtTc{uxljKrc<7TEUopHY}v}lEB-Flw=4D5|t~khX+q)#9(57KnHDh zhimpNHbB9R2lJNpwFbb-B%>z$iF(aBYNjm{{f47Q^eRsmn6ZvW)n6rUJX~C6xn$za zFt2Uc()7WP*u;;EpvCpDdr&n1;V;bNpPKS{F?1(Ya74qFr4Kk)vVS*~N>v{+&r=^a z@3lXhoOmrgXd(`dk#c|owrJ|NaCHb%Sy&kCaQwMlS<=JKU+zBes)YW*iwmHhbcAgW(pRW7Zv771k?aTcM;XWHzLN?KY|Q`1K_uh#nUE!h~V31lU+JSo5t zs3Hck3Wb0@$xlxpB}rqH;L3HQzjp+isqp(qt=!AFE)HWS#nq_)6=G3D%1aF`&WHwr znwD*ehFvU2-B?}&pi{3_&P%t#6&#^duuLlt-0D2cCaCcU7~2)~m~B5(gi8uKKWW!T zS#8S!bHWSlsxl2FsH$BIuTc$;I%+DlDb^+@omrBsojLksSrPc4!iNNIm8|t$5F?gE z4i;ca6HPri1Olev;)WV$Ik9N4}~3bCoaIx(-aUN=>t zXH_q|ZYvmkv0%KWvEQNt-B4|3E+iGFv9GG1z=_huYZN_e2Ch0NgUD~feG zNh;jkoxIB`ajNMHxKL0}I1WU^#FU|eE0iRmvHYugHJEbQ$`R%) zC0M_@qA(9on{&oWt>Rqdzx{NYap^@)n$QXE7+rQAv^`3*+796Eiu-6kQuSr^A?f<4 z#S~Vk>Q6(!!597oyGygMHDq&#|7Hf$^}@@>M{zS**#42UM`XMDOO8k-`8zr zT#lm)c*Y;6HrMg_My;4qeD2ete|uhJ*FH-Q#u_MkcIe|tIGrFkeIe*I5+(j^H~uZN z;jO~ImfmZZ?FN>^R|8vdNQ0Iu3tV;gBlF&YWJ?lF#8@_RX4Vx8F(hFH#kfP!yX3LWAZE;(m01bIudkY@ zJ1$;F-Y&d^&MT~NTh~#sAmMix5ji*jO0>XVUb4QUeQkaC<O$)xdBgRj=5KSD41DYna=5#&D!s;+4Sb$IdqM)VXNVf8dQ zbw^X;c_SOh_{8INAtvB_Aw2u7URn&f^}xt)7mGn>9$dD)vU60}T&Oy&k%ijv4$?|% z&Vwc9KiF+4^eo0>$07}2fpXNsg<(=C?X_Fs;!naU0B;RA+UP{DrJb|kCy8@MfRpm$ zC;lG+gD8C0^Ow}qBWPenE^&VX#U*(>t|S&Luf&5-jpnu@*mH-T7_xmYlotBYsZ$v~ z{bme&z95b}bO_qDZNn`&Fn#7iy!YN1xahVXe8^7d(z)2&;}|<;HfH_295r>dTt<;g z`ck!eB#OQE?uP;WJ7M^UDOgllkGz~PPCar@N?U}-=)xOJBS*;#-V-_Y0izmm{(3 zE?b%7Zf$6r!#YALmvb+E6mNa-GrYlUQv*2?ae59;JonOtxbX%NhvjhjcV21&%l_zx;6g^Q`@-Hx5jhQHg(D^%#EmVJ<}|3vs&L zJ_<>c`|PuIS2Whv;^+DEP*^&M;!p>xaS5s`8YvJxY54o%>YE-yZf-V)zi=srY~9_Q zvv)^Mz~BCQCxTfXJpJrN*lXv0IP=n{G5qyW+`ruI2=f|a#w5>~6+@)47WdqJHcmTb zFC23G9r$w0baW_XnD*WC<{Uiv{3zUZ+nc7nLqZD)t)zFU*OR~{mmY;PPurWv634zr z{uh&`*2CkD)6;3Bw;+$!d+BQ>(WT6f;cwhd&!!$FMY&wp-Y~Xww9R21;iU29yZtE1 z3ZPBE%R$CjC=K%BqWfIH8ne(JL~$^PHo*Y$gFa*jdBS<|hJ5YO6l@EJFB`F7K5BwJ z(C9BQhTfw`8=ia$hPx7@zL}1{p79WFz4r?apQeW|aLc_PX8S3unk^# zP{Xo3jvKeLew2 zxrNw%yB;{>AN%6$Gxx+fXYIoA9ys^x1F%j1cBbrkK0gZl1t`eoxgy_=osFAreU4s$ z1D(6&;mmXQ#@XlXkKS7sGDHLJx$kv+Fme*lksI0keX?1et{qBn_<`Ht(Ea;hm+g9? zxUemjF1PUblf%)mtO#B&e^}EFp{x$|999WWOL8_{;A~XW{fEcNS}!SG4H&k^QN)_9 zw%Utm#Fy%pzyLT&6^_Ro=u*rWoHZ=Gti6!W^T{Z_NgnI=(v!}Ii(+!k|6azEk9`QQ zFBef>s7Zz^ru~e6oDLT+b|=FEy7svayz=sY(XC4nj{N&|_;yS!b{g0f!=L{@Zd>{v zxNyp8H{r9d>#)-fWq9q`|HE4!kH)zdJcB^cftOyq4BPeWVvgw17eB&HH+}}6zmcBL z*@#sIDNK(b>WJa^W46P;uR7lJ+4u!HSO-E)3G^FuHaslX73ZIXztO0L7hn1emtX%J z3Uf;E(v#<)@77}AZoKowRGf9@V-!jko_X>tgqy1I&vRbpcEY&xj`MNkLA}lTzed_O zy!h*>_u{MX7c*pWmm(U@##Y@* z@ZN~4aKuUf!}xK_am4=panC)eP^~@$9CzX!nEZ1&b{>+8m!H0psq!SO$e6TYv@X?;{5k9=&%u!P9ILsh>|8{y+nl zcS;CJy4;Rr7DX(8SZ$NssE}0j>)8>>C&$mt{+qfLlA8Q^evW3xxhV>GUqD~PDmg@h56l(I;hh1@|fErxLiN{c(7o@I5> zBe?Rq$Fcv>H{zh9uft(S-iE`Ey#-G_^Cd!&)Vgtp6LMHlOBy?Y=`)wY<;Y>#yJP4! z6b7q`MXE>d4uv>i-`yD|_^@sNd<@UMl7qSr{N?}RTII|WwltbtO3ipY*|GN zi_632;jH@VD5{pa(Xgxuk!6)wTvd;ywGF(0dEq)jh(^nCz&<^3*G+%LQ;+^1o_X{< zJp05sc=F-1@WPYlj?z1C>Y|2$Xl(VF5?NA8=16mhgg0x zNW=BeaHUltML0&GiU%nM5=co|vnnR>ial&XCQT4Ng1xWkhV z7h_JiSew$jh$U0+!t7X<1IyKbm@|y2GiES{PY#G9hCv*O+X-&lNyC#jR=E=NT)5qg zVfp+lQ%ua6=SOabq>sntqj9H&h^EVw1n$22V0=3K61@K8nRx5ji}Ci0ms14K#^CL{ z(&H(_XPKnN&a4(b4e#NbAFBcp!@+U4y%QRAiZ#;=Co259K>~ZMp8y+jFd*; zl$XeIis_)CNt?PQ>+!-B14%t#;iWy&{g&E~MmX}biFoRjFY&?~-{ZwMzx`zxJ{m8* z^$pIy_%T#g(nY2bw=XM1UeJT~ZHnQGCt33@!N*_E#P>fe!o(@%sI8+xy15^x^c9fp zb0@~YWccMLwk(;K(8PyG%!NJn+ZKiS6e=qV|GD8+y#3)6Ok=G+ZQdeGp1l~e=T&p9 z5G)@>hHEB_00=1s>)yQskGU2h3d9?4O~m*q%Q0rkLQI`gPSK%6@m%qcNf04-4`s-)ghDV6ci!~@<}VFk!7?ZA zf9z|FA3poNj35lxcRi(BiulY@NIZyJKV-)2Wk6V5xc{U_-49coeaaav> zz)fEQdHa)z1|(oj&`{(hvUHinT}>t>K4&KB2F&SXf&#&sij&OC3tisVz^iLAA5Q@{`K!?aK+Vc;_53$aCqB{uews^-@zAO%tJKR!2K`B2`BEsHGo}r+=d=X zJ?bb1=l|cMIQ{f{aOz*~!|a(-%a-!TOobJ4`Aa#)TEwVV!eUy9Mp*GM7sXLroP|?P z+J}L75{u`@amD4Ym^PH-kG~toA9p*h_}9Z+Dcdwq#ibn~E}l$kQ_}OXf8S2%(B6ko zxEjwr{|Wx`_uKH-({96q54}OJ!q2iNOh>Xs3aASW-%A%^VSh?&mLiK4JDhV8a3#6u7NANJm@AC08}haI{LuDJ39 zbnli!SAhz_?SU?JlKYijgwlgiaIuEY_H(~(>Clv_kp(A>BgP;P*AHEWbET1pzl6d-w|Mwo7Mv12j4F zrfmiW^aO(5D8n)7li;CF(WU4195IFf(v>kv(TcL{@hHzt6AnILE1Z4y(Pq0|cO7y9 zH4MSHoD}BxxsNMx#GylZUVs(lOR;R}Vt9DY4?ARAJn_iI=+rjIeMET9dH(#h6r>P^ zK^j-hCg9_55a6--yy28HXj0X4_#^aI<|>erA{~J&y5F%VJ%_X>Dz_WOYxQI`A{zG5 zfZT8}RF@T`mUhsfvIF&KYREyl3iaxLb}TZ)|r_ry!jT#6`#Bpk|S zR&FQAob>G-PS&N2X`~S`DX-9H9PjqV5NBSmH^`hm)N{Xb`(HXoNn@gTMEL=^0|3-S z;^v9bpo@YiPl!ry!}o#LC-4Sa~QFRgyntQ^gJZako&>rKZVWZ zq44l{xNq51IKoiO#q&z>$_+9!u)=V<17_V2wQpHPr72sR!aOeLwn$RkJE~Pv$bl#Y z((9GujZl`d;i8CyOuBT2icxqNR>_WRZsD~Cw1?z6K+Zut5oYZt?FZ&&VJcnXc&SmH zm8_Zka5=MS4D!MjY4hhLoRqkH35}-&36D6ian_{)NZY&Iij+PQ5|TK@!;l`ACKO0- zU497}(z6nVBzUn)!zKL?jClVWd^KSTvXBE8Yh}>57p;(P#j_|z7S28WAY5_j-V6aM zSgu@_kMXx9-b1!A9vLjtz)0g03wF>DV-x`g{Q=n?ZB5E3@6{H!JdO}NQF&Vxjmy&n z7t1TcAy1&nw&k{J!eR)(n9HKjd1%xrIB)(1QqOM4ez?rI^Arb2^~an^8hAxhU@j~D@KM5~TQ z&)C}G~5pRw$;{Atq!2=InjM6+m zVkT~v!sc;*)f6%sTY>^ZgNt}#@I`5;9vVMA883}4VIG&3I~x+4)6hgbC=p`xE^#H| z^cr{}iEv1|+zk;!O-lKViAfp7WoY2}2ypCzSGrm!bKs2ATakBfQfS3vaB$n+2)&WO z3L1PNg^I_?@F$j#J16zZEKQWLyf4P^M_zpAfRFnFMN;fg&X2>zya_3H>KMd;En}pz-v$;|K(YVxLbZ7igASHWl^FOW{c;-C%16v0g0z1B0*n=>$Wab z9M%DHQflNj-eJtFhJ5 zXQF&jIkL*OfF&pA7}9{}6$7L2B*T@c zpYx^64u%+30B%Q!o>CT# zmNl}Yj$0_E7I8~FRtJwq))VoPFe1V0N!|@v9b1IRlBp=@bP(JWN;mV(`S41Vb{zt5 zuM;I$fL}Uy$u^NsK@;JT+sAUgS$KL^<|9JRNZMPd=K0L$_3GuZC5$MDz$RQyH1XU9 zMMUVy#VI7NCWdKYic^8~t&n~g++Hg~yHBqJ#A_{x(OByjqF{$ZQGCo3Xw&aZEFW<{ zB6Ge&oV8b+uB$`b*hnD_A;C&CeRqHcRlZ~bqR|zmCXR?39Aiik%|Vj2vAF84cn&;t zd*zX3iOXHl7(6kG2IG0!7c0+3Zhr|DEgwxcIED~I1L+G@&7Z7^o=Ax6)r)f=#wlH* z`5Q-!2N0pb(#XT@;0Q@5K_j3jL}|zodJt0M#<@Hhr2*3m2vE5KO)FS~m!omPdzka( z&0KFe;Sq`2HXE+CS^Jc=^RE5POui?fQ!f$n=NYc=mKgO^u8DVHdfeF*AiAmvE zc2PJdw<&!Tns^M+qm-g$53U#^q29| z(bM|!ZgTH!2^MSQJL0;)V6Vk0=08T0wulBRJ1*7oQ}vY zN?^g%50Kw|4|r%`jpdUm0#o4kC(T9KFzW>r_C6Lx1)bn`wm~ei2=0KiC(u0)FEkBq zR&*|!D&|rFs!h*6Y3fhb&qAnTA>5v9*1AE~-adqV`DmY80!MBaBtvuHubTj?W&vyX z7{lqd@P+1b`^yljoQVJpFYYg5ZOpj8p&Fs;AK`L0vUV>(G&BuvZ!TqpUP{wUX+nU{ zwH!^AQxOi=@i=N|ThuHvvN#1$5&d+JDJ<+ew>WE)f0$di(;sox^I*N#~7@$Cq$ z_z|I+C2-FE5&kYa(vChy;edTG|LZ5=_cdbCsF7&XV+b$s3QYa*R+MDrVD1;sQ6Q$H z@`sUd=eK2zSc7@*U58kBGJI{@!=2TMwKD^Z=xi)_`!N*t*&6f4J_yIyrx2@2pkl%& zC>%Hhp)vPj{txf4Vx5ZEv=5Q9)o!So^&u92`#Njr87LqB7P7rTESmB%eBKfS3fp1f zS9ic_3ZnL>chEFrB*HZn2!C@IT!r*(mMw%ednr7n1t_090y#al#iFmCM&r~skqFJi z!bv}%uzd&A&;A?>zrGDtxDgAcyofxOIS}j$ccRvW9rNG05k+NP;m9t=viGk=Uda#y zybdgS=VAnMJD_~hOYrAqAv|$BD}RbtvH?wVzeTjZ21_TtiGr?sBjWeKpKzPEXjRYq z9814{jy~~tR8D^v`JK1td0&jFA721>yb<-&KSbrvKQL73j``o+kHq5d5u#h=Z6Cz+ z_iu-{b}?4Wno6(6i^85e(Ib-<3J-tJ*5^H}i8yFju?i%tV6=>orv~yCwJiF_Zq`~3 z3TC~;z{|dXbMXhr>(CK-ZMxB5-axc^Y^nvE?srzC1_2s~tEdR|Kfi+&bG|@+*PXFq z$qW>D638vcMoD2AD#pG|w|gntWjWF5py!cQG?cX(<97Zs(n#q9Yi@roJ%j@Ihn|a~ zLvKQEo(EA8q>vju`yYW0``m*DM?RXCOhe_5U!v=d$D`ezccRN~7h~z9;b^z@aj4`N z%f}+Rv;kRp%Ycf>Xn*W~(Q)64;qJ8$LQxC;_S+!YZ94?oZHK1VLc}Y^Ahc`|I`01f zN_V>*ZM*cqg0Uk^+eX`Vd!hY4SEEzMJrFJr)8Je@XC8)D*=W1%p@@uo1fKG@;9EKl zRWm3=b4J6;qO0G20OIxa@V4Cv&a&>v9ds}~Gz%r$?1%RI-iktoAMwyn$g&t-(THQt z1ggeAh>q>z^xC$ew-iV9v}aH`;SKa1auz!7b^|)?dOp3HD#U$siE2D3Y_mJcw&r$! z9EqZ;DtZc?P+C%mx=GJdlov28k$Ac_-m6$MR2)`=GggTvpA*rne8$Yulu&_M)_Q2W z8^YFBaOSo_B$bimz$zuF}@ARtvkl^B?I?H{j{&)o%$L&bl(>Ajp6V# zq1N36jctdbxc4B_SScP!s!yP_$}={npgS3dyCmL5h~kuh!z~wdjEXO6&-mNrr-;bY zl-cya+cSL$Kr!=Xw>NDQ&g{-edOQf071Etwf|_rxrWe98xH>Sb;Chz4(K-vRY)&Wg zSzI?_-fCEpT=+Tdh*Tk2;6)^lZoVf6{=y&}u?p@p3{OrmOUikd+?JI)ER6dZ|9eo6 ztnPcErY?fzU(>7D`CLRQ$6)D?FQV->C$p?!Y)8Ol1bK7UU-*GhI8f%nDgm1 zSiX2ZI&ZTxd~Ld;CY*~R8cA_+87dbszNcM>k~CNvNlbc0M&byT_GP@EkEp*3y@)=@ zE9(Y#eKp#a^+u7S4v7^@k>G_}os{=43essRMt4t&U?FVo)mwkxSI2B9&UKtYEd zs7?6bYderNc>wObws3Yi6!GjL*1mmcSWYaS`W1Ju0);!DMq??ad1NElzMpZ~rJ+nZ zLh+{py=dfj7>K5*6IsO_;mK-?h8XMYlKxz;0ItHW^c2cW*J6Lc0F?IKA9Zx)E9Q(v zR(=p|cK#b`9G#FI=mHdO$2hz@oD__l4%=bD^yg7iy#fWLgMhN0u(G=#;VnY2up{gD ze0VwzLrK?s)KC5%HS@+Jr~h8a?{^Bqa!!K9++Sx3MGWrT5(+>W%PnRdfP=BDywWbK zxDT8~z2OQJA-kk6yg5A(c7}LNWjuF7&_HF$Y1^Co^0Ta6cx>&=W7*lI1CR_9qmJ7V zO1rd0{miLo{COPmO8pFjj)%W<7laz-pmyd=&^1D!{ZN*72$D6+(J*NY%Crn2Oi{dhg$@GdLef?#bJX?UwlYr7oQ99;`yD!_6 z=)tUR(ZgnbX=7l1)1fE>_wSON_y zg=LYKqsWBxVGzTWZr~y~(w-vkwsT284u%ghE&ULrx1(Gua%)h&XqA+WaBR}J4|(n* z8E0)S@2+H;oC*`+5Oe%eK8_^6IWL?sVS+hdoR)!!E}jcZ&JlMlWBHg*l6fSXJZmDK zz%#ceWhb&R(?^8mkrFB>TgMoSkXbo1Pclh@bogmLZ!%`K(`n|*Fq<(mskD`X zVV0y*%=S|ACMz*nGGt~}E=(n)*5cphD`lpM5eze*UXa<2;g`&*znO)cOC_XemMoZA z{xP#F|1e?Yc}blCLweL~qE)dfPoX)IrztGqWedbXQIyt2nBm8&eG5fVS~V&TilW%E zQN%$W=#oYeMNu|gHn=#XTG&%heJYBw>7rqUqA0egI4Fu@i;9DyD7L6LD2if>ii4sk zwx~ELieih3gQ6(5td%&p+#Yy5GPpC(zHBh$abTCrWu6dBCzyHH%BRd6<|#j!-_T`K zluZSvD`TUcwYGybeDKO)1fhKHIDGcyOq6aj1iKIFjzlch;%D5X6I5ekqcLcCrhH9s zdmNbc;k$Tm`aBHU|0L|*yBHPIzQu@7#-g^%_PFrSoe&RK;DeW+$82|J9CO$qC<~+> z)m4;@i5O{1NXBDpeZ4l{M`Za_jQnac8vSi?+`)VN^0rJXftWms{|Cr}S8F5=vh$zb ze*_P{KLHNzIUYw{@i0!=z7*x(yo!I{ z`3jcqa2(#c>{y=N6}a{MGx42!FmAf`3iQsAR~o1~C>sxt$Ays(-Gos~n#^PQ8JsRJ z0)8)Tf;KB(Y0qkl6aMyhbPgugSRlkU-+J&8y!vf9{9ZRxtki1+hTmIyA{R9pO0e(mm#!tH2!_%+qm$_n@}c-m(IC5{*31!FZF0x zv=ECMBZ$;2!1Vc*Xj8luI(H1hnG9k4gz513i_p7oC+7B{bEl37$hR(2t1HSzKqUB@p-0*K{Hxvlg=#BmYoObb57+Ngf?^v^|Rzm5j#WS(A zHU_u6<%f2b2`5q_A#amUptS2&XcLeZ2c?#+inVxT+X*+f>SjR%d81D};Q?)SgJAK5 z<#y_detot=UU&}Pc>N7bUy_I3y?Uc(_dEX> zJoUumc>M9l@K}0y+{{0P@8;B_G{^gg!jNGN#6e!$m5)6S=!th;d(WhN{pM>3?!G(P za=Im6!=FVwhuV3wF>&$~)C79qxZ{pP-}W__Hf<`V&#b{Q#~zD)hxNdmpQd8MPqPq; z|DvAKkl9c^8=rspAqC`feE!Af`1F&H@#(jd%v+ZgWqlK;cWq*RhTw4;XiPp~wk}B| zP#$q$x0BAsh5vUR&OP^BGn{|nr8snl0IF;2(-~XF8hH-#rs1yJ?v5Uf-(m9N#rSrC z2Yc@|)Ew~o$3c$;nEBR=`1dte;U~{P9DB?$*fuyD_g;N9E_-)2jyd{R9DeAw82P}J zxbBe`usAHg1Z?_xbwT9eV2ClZ1fj!W;-yTbCy);DHmNb ztT*H}sX*K9cgC^D9gp^j1(-B>GUmlfu|GYClLnV!^5jXFIAIY>{mtp6gMJ;N*Rg}$zguH1t88>f_mq9E*UQ)cK{Gm9A zFjUT)h|jih&WX=nCqpgs>h&g7*em=7gDd;7b}t1^rt>8z=6wUSn24lEfgH{ zab|`WnMQZ90uN*IHQjWJZe_|2fO>p6Y65)T-*@JS$D-&ya2J&2IRCJ}!`k1ruCMD_VLBI`nvnjdB|Sq zp6gn9-MhG-C6nL9!o2-(;L^Fn z;)(U~66h+x| z*(eq&ou5|QlS@&Qjm}09hgJ12R}^IvK|4Vyin1ykkw`@Q87qpi67lTiv2I6VZQdWH iD9RR#h(kCW#{UBi2OM{CtgU|l0000R!n|~MV)f>D>dDcj=VCOnWIA%E!_47WvXaKL*Sfd-i(~6I3oQtFV%whA zaKeIvHp>it_l-8)Y&16iN`4PR-17U2btO?N=cmawt=7g99oC0rGOfNC!Y?f!6(17y zVlh;k5;6TF!f@W{4dyj6NKk+TTu-C4YQa9o0SK)2>B11yK$s7bQSC=svT%8Qdy#)# zEATPI(~0twL5dWx*f8Shg5VFl1zSOJ)G>_^WegC68yi+U3>D5F!&pL$Ea>n5y6e*! zZ1>((+EZRoTuX^QV!-r4U$&5E{wH9wc-0-W=v_NAtrZlxu_%?dmkht`95F{}p z($F>=MZUyPk-10gvviPHKiOFlk4jrju1aJ;?}5MFnYP#cWYc-x*Zg%_I=V6^?YQVS}p+QK3MkQ<6Zrrm=w$h92HdJ18IDS;F0$i#>W!08v{Bl-=5s>$9so_xl^k z-|2bE;m@MP_A@~g@ff#DXX=Q-EBkz3DB)dfH7rz0E6L0=B)nTWRP@shP520jjDyfz zac{FZh&N0^AseN)Af1rPJ?`V6CIfVAksD4gyA!{=x7VQhUJgl==Xlf2;FkRu=s!<~ z5?<#Unp$;Cem+|<-HBzN*y^nu7xXgkT%kC1MNg^Q1RSw^91d0Ne|MBSCaFtcAhB)v zhn~+idKFT897hT;W{b)Vb%^f=lhXbPbeynoJ6;@066Tx5gk5nlGJ>S@*x91}-uaeh zM25k-Ghwk}%Zk6Zm`CI!5^<_C9^GJfBzVB2&bKBjFJHi_h9{3P=0noFt;;Ep$0hC_ zzc#m_;72hO9Z-@ZezDZL(X#3EG`|y-pO#|L_mK{#@U`xcF3|A4ql|YuRs*>CA-IVd#Sdt!!k=CsR zkxY&9fZPya*Hc|0pZg721%>_==c7N|E@!K#O-s>HQ7G5P3s}VbPOJ#JIw7S`!^6Wp z!$}PBSy?ucKcpgY%~x8u9&e7!`iyRm7xvdWMW&{w=|HpnxIqW@x-PA?heF)O$I^N-zh(0z=Yokyv^LZyj^3S`r48(ciy>N%ZHC)B>!;(y=nag zzqMV72mSc`NfRe@DKOy=pW9)Udh>M?9=Xsy9=Z^J9a5>cS~(Z%`uD#I$`ULrbW*}) zd81k<`Q-UrXFb8l7b~u7Mkk96(y-D|`2Kkkq2yFl{ePY|LP?`Af6Qap)uW80u<$%- zszD7z5d_8%3mDH=>fPTi*|GV)dT~_th;B+~wM`Xbm5|>YevkJUrIStji|OB=vC(nh zRTz#R7hTcD*7n^+8dQJI{Y$7d&XU++3q(o-4gr@tFe!pS5dd?jmN* z^X4#EF^iu7Qa$lfes8^4KU8mH{@|oV2$BCT`9$9KCVabmMO1t0fxD1!dw4!p5`WWY zc7Adbj$ygFi{QbK3j`)#az=~^H2eW=^AQAOqzRY&H7(A){4@kIQV{qrQu z#p;%C|7rH#`gjTnf-9?^sI&I{4?ho@oHbWQ#Wr{9RW0Iy&+UhWqyeXY{fo{z{mfol zMbR!r*|C$alEPlUGxyEXp#F3gBU3;{Aj%G-(IzoU%w6y2+302TW=1q;jF{__*bJjA~R{>o^rZ0)<5{u_xrr0nOb zGaWpxEl%)C8m-((kdtd}vQW@{Zh&&MbiX&-W49^{FG3+(LEa&xr3Nd`n}+i&j8n50 z119o*#g`%|QM~n%0vg33s^e(6;mS&G1hcJkY)k_F8mSNI4#j$wKS=b|xf zRnjlgO~fZ9Nr{ma`sYbk!B?>0Hg=?*-gwyfmnz=*Qh<);t4hc)ru-)ELiS4#t`#=v zp&yx5yrT`ACCP9pK!n`Zw5|;N(~DvXu9BcKK8=%{loYcLsJS2N<(8f>J4TBb!&pJJ z#-d_m+Y<%)ejad-9=$@D7?Ry`|Jl{sESO$_o|m`%r2Hd&EAfjgyte) zKSjS2|D9)cb2z)ZMAC3jlfnRMkwAim+#tL>rYsh5(`vxm=*WKj$Vp2518K*01&I&@ zxe5HK)1kD|2GB)Y zk{GCrAUHT!{XI-1vtCQ850ZM#4w6vNA+{gJd*2^R*(E#(KeTH!D}w_tzWtsU{?&rx zq&{CnhM_t>solX3@%r|y)_q;>j8jbmn-&x_<5>UQFiFq11S?kP7Jsf%FA{;ojV#^M ze)y!U^raBTCXX_RNV`7y?O`uRA=&`P$=yax&2uhfC{V>nNlIMyrTb7uS)D~pN>qST zT^fZE7?KlevB4@dARu60?L-WCQtu|(+^;Nom^I*l=|BzAZ}))k@HA;i`3H!~!id?C zHrlO`JUl#1X5IrhvGCnwi?bC4(!#>RZl$QR0HZoAFdgvHBgssYRR$uCccKO*#d?Wb z5R_s~iYExhl>OvVgn-L2tDV7ITs}LC&QDoECn4ZO(NJ7pZ*c3ezAxHKl^R+vH%~HF zWhK|k6ktMQB4PyqXw*WxLaU}HOjK1h;Y39%po<$;JRP4Ns)mj`Hb4|qlShUjZVlWH z1|cw7U&w#8D+B(<{`=b=IwtcfMUjh?Bgmo)*4y40A3^h~rJ-(TBqd`Hw<0uy5xhJd z^NZz1%KnMIi+B{cUo2+$1SKEXaEYqe-5JzqX^hKNeE;<^cl&0Bw{}nQLxzn_a!Q3~ zn)mQ}1fykyXp|spiT@j%{(nH&|M@Osd)^*d`_Q;#3~_1WYW*TgB@kMo2WwJXbMIhI zftwx#R$TGVLaJZY9Ho&?cIzs>q1=RjcssJgD&_<2tyS6ZTZf2+*395w4jo85f+xt? zbNRma>F32uh~&ll9{Z$=ETj)a1FT0#vBx6nf;dt>0zs53-@I@uh3OG~!6`eak#g#d=Ap7%7Fs1KsD?Ri7U z;(;D3z7&EE-);5IR)41`4K_Wf|5jSIEYHJaTDTdov$*UsB=afBS{aPM%YRDV1_m{*nBE=jzE0g;>Xo0Xn#Hr zaYkYJ^&wXXQA9gFV$^e)-DkbBAE5^iD&|BbN=9iV7@_2tIf>-8pIKLk8$oO`vqBtU zRVy(BHsv_d7P?I0-?ezco&I*->X}~xn~ch$rj}5aXN$|qp+LF`Lz+H*kOfiDv4sid zVDWU!!;du5qz>kmArvxOOvQ?nP{BI9wEko>k)u!Or$rCqem-c$2!POd)YFT#R1ijN zJ%Q@O#Yt`SJEpDp!NkW0@>HtS2qc(i#^2tcu^-CLP!WY+m;F?>X8sCKV)YbT^WfUa zcTJtFHWyJXwQ1E2nq+^eh{DHEB~-@v;Ri08TRj{;YQ^5nQnPn@!iM=)n*0AQ-~4y7 zl4-SYW`0h1Q-UJa6m~9IUv5ZM)d!ZS2e%J3KB83HxwLWA@8BTtIDT~@yC$os8Rsv~ z84B8NThu6)M}Z>vdSP+WD8TU-%c=M*FY^ps$;fRo?GKho;66VWa?mCf#?;?DvP3ad z5waePnY=G-;Xb`R++BE*cwxfuy&kLrAp>u%37OUY(hwr)LiBrU!57YtMTBd9yz8Y$hc&x3gH8%F=Oz{(6$om&$^|0zd6K)1?UI{ z8>5mQTG*8Lt11=C4*#tyBIRISiO`@E`?Pu)6J3@~^J!tGD)Oh8H=55p0|n+^Hc~WK zaZVcH)bT1$ajnMD$PzO%L&dN8;X_B?&2mLlwfb_UK0ukF(RD3IT*akha2ugpq{2ob zPd@jR#0hTyFjri$&mHgPp%ugT-DF|)-FQ#ww#5K~uVJu}pTPAjc~tnOacEMSYhE=( z-pMg_Dh6icnd)bO}BT$vDc8X7Ye5|4d| zu6;M$WM<2TXuw47A_gPHtdUL0;|F(BQ_Ivc;i+6$e+<>u|5elZ&)+z*(UZ2--G5o8jK;{H6qCwcNH~h zj2c%FThkw%w>e&HKyGzClh)VIPOGet-Dht(_8%sURF5epM?yW^C@%X{VtldLFDqO6 z5}F~qqijON{spw^dDd>O_)z+;^W}Ew9zatUTd^Vl*)5t0g!b>qU3yF{7pSGyZ{o%g|X zj#A?4#J8tAy$Xex#$*BG+V%IHSt>)itrB}zFl43*8$1Ox<=zcA}HY*yR&#`yM#DBwwA z5lFqx-!XSSf2*rdKl+h}i;azszH!(2CRD7D5uzmWGBfj7vwx{wSN8j3CNHL0wmbDe z46)Vj!KF5Q(~`~YC*1Z%&)ehhx7WK)x1*m;|1fI7=enrbNlRJ>k4ttbJIW<8S>Dj^~7&J&BNld`zd zl=IyTyUn(%F%IVT#!s0}Q*zXtli(M_>;MhM9h*+;sc(HcD2EK#u&U*y5Q{0W02dcd z2DeR5``xP5ZkEsE0Rq?JW!Osbz>RjGm3f}=`PI0H$^H38^TTdNbdyT_-?+;>vN(Q; zXf3G?K5nmM&jXvlDGL5~guBAsR1 z;(cio*;aHT*S^cyuRRhD?@_M#3HefT;A%?DqbpAk(>J4Sb)+_mQuNvLezOe{nSf!e zObnuNkf6&x)i=%!$Q+INgB=7XH5^fiuU+!LEjtV@xQ_nr{&z`IR;RWrEopP!HXt?s zuo7A={eW9}<@&0C)9*$SI{-i9m(X)YpaHypI>;Dk&vp4A-i0SA`@!*eQs*8tHc|9jCTuVdg;7jUZ11Ey{#8sD*E%} zc_I1rm}HfH`$W6v9SpTpY#trJavUVArUA{=#_fyK#+m|(YXJ<`;7FIp}n`7^@OY26mR zcy4@1;g#$^6ZY4PfL^>EHu}K8>q6?P!rz5&Zmqf^z6?^XX(TjaKSY(1s{JTx>+8OM z3-A@KIuR~69J(VpsrJU7W(4)95;+tTdyMqr^EEx`ZjsPArex7zn}vBZ>}v=$!$Ggi zA)k4Zv3IJh)$wH?S+@CpK6z0oUT$KOh>h1rMMYsl)q*lqw$iG96FLzZ2}J$dKjF?r zyU8}IEc!ZJ{D>ITV4>T>a-)51L?gAK$X zFwZ!bBrF8h<4$y~m=aP$hgU{~4Lemj5n6mLgghLGE^NLUK9Oj7pDr#&77cxariM~) zmft~U`to?QtB1IVCi*WHIo;Gyu1_U_xIe$1R?27-d3zY&J(ZSf$Ci6Iw~mJo26rZ1 zwb>C{5^NUu4Wzvv9D!x_|q~ZwxjAFHgFp5&My+~Oc$Twr)Vc5 zKb+motD#_X+5WsR$)O2T@W7m}M<`U+*I<15&);VMQQA}BA1kd|MgmumvU(?kk(F5fNrjO1Bgin z2~;GietTCT%rY~d*m`6QS?%C@N8FyYWqxBV2XYiP?Gi$ZJ!Z+n`ZJ6<7EXeKpXBt= z{A!rUVGIRJN#FQ6S}2@{WzJEW#YNr<lo@bKANM#771>Yf?%a6zuZ)RT-w1V zf1=Hr#|N_Oy;SNN$rZC@`TXelYd> zQaBrpB+AEVWt7iXnFpcWX^Se2g%8F~A=|Ej96uR|PAPwR=+S073P4+}v91Co zrC^S-=!Fo9yrP*)q4o2^bPEdDIhXh8QjIK2@kw9!QL|%Y-l?Kdeu2uCbw^Rva1$#2 z2!1a)Opq|UoG?F^*sI@&`5&p7VqaM$nZWgqe<>{JS5KdzcyO?+@avjvryE5N)oa*f zM0bfn0;22L73EA^`ro9mZ7h8*_XE7jcvGIRNf($1@AK52-ZK_OwPf9xV!NrkA&!AH|UuVkni?BIBvu$8ZBjYdCR% zhb>$RZWf}=b|((tGp_En6B|I4I!9^a+~k*~Iy|S$NLL?JXF4wC4Mi}jsY@Ip?OJ-W z#vXmdx_vDtxD?^nL#e|!C7~fV-Mj)>XGAaKJ(2Ad37^|NI<3tfy|?QQiyg6^_WVot z+q;9~QY4j}L;{&I#v5uQpH(ohN^)x7bN%T7W?OI`^H&uL?zkz%NB#R%|eXTTqE*Y9?~QztHbDB)pw`AAoXR{M=K<)iH{stHL*IeKhL2P zzmnrubP(4L8_vo5f0fmLi<^wg}xp5Rz= z;9cr9AuaIWNZo`dkEtYTBWbylAcdZ`P>I`aN^k+|B(4TIMwWXP>iYA^1jV$9z2MZg zBy~}caWk)`rSTy6vau`eFHuari(ggWGR}lcIMTu%|L^8wl>~{VPi+XYCyXQ#5yu71 zGcL!PHE>@#e|%yaE&}5%*XfJrHOLZqchZ>*ExPu3erCa?w44n4xBelgZkvCf;=B$^ z&Pf~s@yE~NcrSu~SNvR~sCLXFP|Cgs3BHW6q6Wg3CG|c~(JoxW2@(%LEH0+gIa~mlR5OA{9u6(HBD6ES<|w|4wYzw%3^to=y>DEd_Py1 zc_Gs5nT2##Eh5>2iAiQdVeh6|c-x6vsaSBk!WR}1X*+edC1l@l%wS4nW$Vh_XfFo5 zjPD_Hn7^N;ql!fmVtnw!w@3ndQzCob^ikeg#y4~x$7Mlm*B*sLcbr~VXELIKf%e@l zyzl*c&`Y|S?%(1j&WtIQUPL90Y9+Cx&h74@;c_ymG|LI;Xxb>3d>DnZuBt#Qh zUN-XeR3ocWoG&SG8Q-9nB*R?ZU`r&SsUmZvC;uF+%UXoa3~|J9UMdDfxZr2Zhx{>o z#ifkyK+Yza?hE`aW;jniy>Gq@ZX%>QTE!m!TJ>i{!tja_6BbnmoI-xSL9J?Yy;1xo z;Ehm>#wZ!TM%VB|_k)M$c-EIw+R~aJ`ESvCP~i&{Op!*@tO&k&Y>ax9GeU2$ms(;Q`8bDZGqI}|xZ37p%|@F=(t5TTQop(rvcjw;{Qf$-K)W$Ld$*m`eCB{9 zf`Mcr9!1{{p$HhS=5UM}R5rAqT>WId9Ymipz$P>Bf@yoKOhLw7{hy7WFyq7U?Y`(a z%Bx;UO8#jf$7qR>u=2#gW}B*J(TQpnZQNpe`0CB3Epu(9V1y+j*|C!AEB(c(W5L%+ zfF8Dm*oFmzjrEGty5`b3qotyvd~0k*(f*DPb?EylJ9~jE(YkHWMZmxOPi5>DpT0y% z+=N17nHcXL|Ezii_Z_dU@)_?tX{+AQykK32{s6!JSI@87?IFLPWi^gnh8eAPGMvee z()YmH*D{BNu3z-YFJC#pM(vT4zrk2cw4g%i<{hNVmY#FYsV~Byx+@**PBsjxHv-W7 zDe1bx2S1t2G}RHQP!)HJ>S|PfwG6==7~kx;U=vU5j5~5pjgN$(h!nT(6s8V*y?^8P zdZN#o5*#-qO@)O=d8lVGki=hl>LC$7VdeG26!5%l(z&UB=xW9P_BSjbxA+o-iL$TY z8DO}E^=YA`*lc}a!Zet^xN%AhGN>>U?#&S;U)^oemd?YTD#Y7 zRrS8y4j{437B@HJ?`3bZOZ=Tl;IA+j#6K@^J=0Hhx|I9cej4f=IIgK{ z`RnhE@hA6(xy$r=2B!?}pAPpEdF;#s#3;ExKgJRWeHaMDsVv{}pdp8JM+%%a6Wc5` zvK=KiE&E@7OlbQjNT?B_GRZ`PgY%620PTd9k&!b;dtT|+k)X3YSDF33G95jAPm-p7 zxX9~8Y$~e}wD7|=R;I%M!SB>{n6Eof+p@=L#b+F@GT?5uB zDV?c16_-K)=Pdr%(otD{^m(bNF%2k14f`CH0ql-xbo=09zm}h*wUQ)IU6FYH#k`{- z_J67*@La`5Rh_H&zreH24qNt{;WS{1$=hssmiC!#220jQzB`^ZFRbZeghpMe5_z#TnDN|t+A@Nl*I&hsCPTJ z6XZWWS6$py`P?v|kO<{a%z|RPQ6i9k{vL(#Rgy5YZ5DjJFoBgbKz^N%gG<^9PiuD*Jo>_ zf$*s8Ze_fJ|NFn<_; zN>aaYYSXmxwU~p0FM3?>PZk&Z9M=qfMC|~?2Q2OV=DF>b(~8e^QS;}3FjXL* z!d#4!OlCe>Ibyp|3zxxT$IaC`Hhsg~vQMt-eKYF@C<69ZqdbH)V2-aS8Wmbb!{6>! zTulJ6Ogiz}HaQ|Wq8F%S+RuG9BVaLqyguN4d%lV`2c(&)<4;l>fD*>F1-6}#AXC8Q z5{)jJWtdPFRiW@WYrnGx6r)t|T_j5fD_2V}^Bv&x$N(Fl9s#72=i-5(sx1J}y_P@$ zmA-pfuA4zvima#i2~_e?k(Ez%x9Zs&7B(GUN5Lk!cgv3GU;m`49L}XTBJ4l5WX2q^ zy6C1T$jPxm!oiQg)UrGS(a)J3iWHpuDU_bIB_{u(3fK@7f$Qh?4-O8bDJxqJ>FX5FR@*P;bnFQ13}2rg{x(>p zSePGA79cRU9wwIqxY9W{Gsnuux4>9pLqsomc=~o?=gR?!@Ziv% zw%RHV!3KOBYy(yLeep6R7Q?xDks+e!g6Doinl)1vStYz#@s(pAD(*QY|FVUv5&pCQ z92BM@FbHUz(P3*|SJ7!2y~>(TK;#Vo(H?zK?q>e;2WsHq9N@l~WaRO>x38-hxTrH5 zA8?-63xz|*#owA65V6@`YP89~L|lmhpHCIZPySG6a5`DU0Tf4e>9YCCfpZ`qaa}q4 zTCRgNo`K-_s=Y+4<^?ER$Kc-!$swG~#aS=^o$OKDE z5LtC_7c=WNPt;qOyQ4{aAE!!+k#UKmim@;|=QSkH6gENZ+AgFWYqH#T(+1$0ES2T4 zowQN)t9Woifn`a=v*Lu6&Se!+5W_!=-^yIh+`?QAU%WIes4&;kVsL|9adPBjt$$pf zKi{Z$^r(@YEE6kn<+PMuHQkbVI*sI7;XJb2A9K`_gb7n5j07zKuSzikHA8m2soJC) zEfy`UXW!nc%-yI#G3z{YUtytV5W3i0Y6BY0;Nh7Dw9(d3410TBxte4<>bN%&ZbLZ3Fh#q6|y68a9R9$x(P=ig&PTVJP5JEm#(_^ zBgpxD&b^mABbaER@rjABDI++e(SLmc-v=3Fi6E9Izre=wK++{-d#Ob1SZrU93V3fS zkPG;nB?>Tuj_0Mx>a9qKD*MdQAgC$I4w$M+_cZSj{-bgZjwaiFGiwI*cwxeNfC@LT zn3<(F`%2b{-PActYOeam~#eT zpoL=G;+@F*8}ka%Z7L?Fx;Mliq4$S!+Jl41@B>|WHx7IemxUBVUAs)}3!Nkn7p~%X zcZJE;%k@mSmSU(Qpe?#M(EwGo`#@^A??5*FoH2pQqSwU!i3qk%6QWBVnTSn66y=5- zU$`MTfnS}52KObc)YXWk;Gs6Nl7?i^=bcd{0s$M5d^Vkic5>P~_9ol40&I+Nj#7N|&Q8>?eozC`3c#v=Dz;*A9sfyo40fSROo%SKn!NuUu8^3*xl> zz8t%*{MwpMgh)_Z^_^mgOd$Z?d5P^T8WVJyi4fZABm(<$h>S$+G1v-oxfMJXl?}4K z$FJm;AyaE6?j{x?PplhoL(S_UK6m27w5REgU&MLE8Sh=XgNAkF>0a96gyr^ydpp$J zP{uTOEX4HdN`4D>DC|vIL^KLT*vOnU?vjZ-`P$2KrXS?O>{oCC>dFZ{UrnOcb#To> z3FTojHh&;2@{+483iW@yQlM3flf#D z+WNa2CNs16RG%+-9?6Y_IcIdlA(eUb?s@Tu)T*xK`4^KoDFb~p?2|%*^TgDy^%_B&Fu^Lb)Y& zk1J%ksQ>)!7=p=p?wDo)OB z-x}*~e#S8)@CV_Xus>bvY8;*^#dQIWt&hbj>8bW*6T%BK@#*#j}vK?B|B_LpfPyxgR!w*d1oj| z)t{+t>jmP|7%U9z6p>~*lwKyhUoHLoYuW&Ge#rZfcg6YHZ203yi)t&spenBOp3X?D zb^>~s0Lh#S{MP13V*~Dd;m)-4M?y&_U1JXp+r~0-nytmF4>99KBz~`=svWuDq9Aa* zvuOtP!H3J7g_Me|L~nB?JhMVw_?H@Ikvj));?T9C@6(L~sncQo}2q7tyvad^Ao5iS}$?6ds$$L2QA*f3j zXl#~hXiBP*%9~X15w`L?cnECD^^i|+4Bu!ZL$F~~WjN`?O4Xxi`&7Pw_+U9p;~;l8 zM#V`a%pGLGoL)U0?6SBe$<8V=Nap>B*x={`Qy*8=wd~LY;1_!}M$uBJh z0WL{eX69nxIzh@+25=B6D!B0Q@N+l8B69z4aAK$iaANJSH)zj3ooWBRWUtbzi4GVU zrNr7{Zr&S9gd)L-<)qEw0L&9SN)^P3%g(`}0IQrGs%%t{KSmkEDLk`P74`xv*5CEd z%o&Z|a1xRJZukacMj$s-RCY_!rd5zlc^C&)Tz0GYLqIN5>@_eOnQD~qAA(85k5542 zveSMLnE!^i@c(O=7@Z3E=OqWhXn>EQiy~GqAe7XHH(lcJJ(4&R8^AmMmGt&!%kgYm z4ybiqSDf+rooG8Ab_qEQSe`k?cwvM*Z~LfHbOWAFThTRj9pI=xruxZ{dSmA)|7I-l zI`2ln7xv*EISgivWQ7|?G67PI7vH_hsho{9S_mu5D_oQC@L!QQczIns;U|ny8`^Hj4M&A}ha18_0pMa*)4=HN zbY*f`wj&rk3s^t$KRv~Pm+(yh{#?N42dvuOwdY+P^M%?XHtGu^`xzCPjs1dH?h&2m zEz-9xIhrik3sw7zemogR|B`GEq(M^OHbfntr=_*@w(dZLC2}61KPHNZ@BLn;BbvVV zjru<#3$&JS?9@-Z=)3PEQAZv8t)UQpI_CIiv-#WN%#iKAOCSInA*86M(fgzG<;3o* zb}yY?Qw2u+y{K5J6cL(?6Ql7na58%BdUGR`Q^UgI;`DS?aVU~I3m?Lj4ntIMSyW=@_12R$gMltfbz7!wmVS$GWps!N=C=wws zFyS;`$Fps28S+s7`J+tE7r8G1VxD1Y60Ev}rFLK67J)R8W|nO+MinlC9mKy5gcv7Y z?Od)Utwyvr+02cik`hlyl~(0tmG6ty^0yJD=99)HYYCRfxl`?<@(a1lSYWM9ZR6qL zW#k2e%jS=Q2e-t44w6-1(o|8C07WmbFR6I;O|$b+ofD52&{{^7Vni3ig{9@o{uQc|*epA&B~ISZB1#UFs@`C9;^0R)$aHj(Vs{^_5Z zB;$w{vl{)c=5M1LF?WCXu2lB<(BSTx3aV_8K}l2$h5 zZvl<3Df2FddC~UZr?)fTH;#r@Zm1t6xs+5?KzkG#?{RhS$E{T$Ww}ll=boS(9=;tY z`LYM(XNQ8<0el$K;r+D9;` zi*TB3^Goa-{(6`BTSObdnUnpNf5HsVZc%9z${ljZR$jW#qn3HI#n#d){a6T+b+}UbVQ7z`UD(pmtLa%I+|{}C@6aZAcPz6NmH(?ZoNX_ zjPQR6CjKv9Vzk6sJ(!qhJog9&ZLXjN@YZnjKK4lA>3vzHEVM(d)!&tqH4!Iem@hH7 ziFfkWNxC^~cFV8Yn@7OE30L)QmRqYcTIetVq`IPPmzlJdYUbS7j6?BIFjFM8x4!;J zNsscavtbbDmunTf_JJD*2XCGMV%KGVz{9sHxJ#l$sMbAsr?5XA^LYF7Z^~bMF#s?X z8T4ZH`s??p%xlrem!XqO$*R|^x)n(%co6HjKcao~-b(C%m9BD@I;rBep75YZYOq7j zatY&6{@0PP8Cd3BAZ@O0&R;)pL&c$OawKm*47SwEGc_t8hd76o1s9Nre(r6$M5h8~ z=@4T?zPhgq%))>cii8Ahaa~$7TXI`{*(Zu61RRBmj^>iCLWjqTR3{m+`UmLxR4}W- zxJNL+Z_yx!1X_SrTo`T=j8xNOPYax0HI{d#2dGUIl5|M}%^!5MAXJQ$CDfEFS614 zzvT0lLA^Xhi{^9CF2yjDHMc>Y1+Ct(d+Wqcd6O%GC-D%COB!Cb%4BL?y9L~~d#!ct zM}zlQrVu+j8&5L?q@46p?{-kE(F-B7N42rzI|}0ZyGmN|yx5&0&V}w?O||AMQYWc} zO7G{6@1|&Mr7Fb5?gP~Y5EkdVS~3i8(r3n>bsm5+((VcZCR>HDZ5f@HJ;kI-JG+LQ ztzPl%``$1`9{L`L_2@`2i!0t-IBme)Vm{g5rgCA zZAxzY)=T-v_e8y7IJvq=V;Ku4@IB-6vwDRRNe~uw%-~-K6RPOm$*n;XEi;x{m&f?v zVPr8cOg4MGtvbA%KJ+vx>E=y2L3-SjFxTB@g669jnQD3-T_%<}XTTh~ib*U&cF1hT z^nzkHx)kXD(()rya&Ly|klPZ4)XtTG(RiMX31^6Ds>ZW-9AD6#9-e3pPOnA!Q;OpL zR5^O%+cnHoh(ce`yR5A_5q`22$L%IbyT(ib(4rN!tA<`OjU4MssGt3c z+Y-x%_A{YA#b~Eef+Qix;WsHEOhf zbfUyFBoWeqUcuY%%!3-z!Q^%u-ef=1uUViZpVCf>(@)y*f_<93#af}4-~1&>U@}R3 ziCI^XcL&xw?TOp=wR4=!`a0hJF%t7Zi1<=6<2 zw|~AiUz};?ORahc3R)rixK61IbTP<#iHC#{S3K-Ge|)>9`6cn3o|Q$!4!GU z$JrcF%=&jVP?o(iT9WltxS7O2f4?Z~HXo>^GlkmuxMj!ICjX&mEG2m-mn1+Rzg5#K zyi??XdceS$XN+i8;bfLJEh*|!{Yg@Wb>Q~l$n9l?rG{%Tkb6`YD6n$aC9sv{g8YwB z-F9zWYtDT~CSSwE%;UA{+{zh^5DEXp?%0M?7hR{+ z#^Txe&SPULcLz()B(m_feV*f!c$>g@ET*@1y5oEF`mYR&4_H0kN`rhf#L@8u(ng8Y zLc1z~D)qInq0xdUh*F?g+RDK6JW}EpUuW(!F3_T1i z-Vquwv64@m4_w1Sct97-feT?C&uWYsZ=N5ic1l=|)o}4`!5QdhS!gc4znn$%WbdQl z%W~Dl!yos3uX|djKj%c(cT=@Q${3u~L;5#xB<_dAg)!+NpF$e}YjM)Zd9k5i#ldC{ui$N9sfigD{?T?QoiP( z%Qsc4ZdOVB>q4}{?0`E1FBm3t(r8@$p%iUF$6he6P8c$&tJvSr*V0je8?mWIJGPgs z1zN<%YKs;A3WFy2B}W*1RznP3)d6iWaT?7@>b8d==uD4QHOk=Ur?G0HDh3MF*4I{) z6PfFP5+rGNvZ(S_Pd*s#g(>^_}Cp0Yl$Y6m3Xa8Z&_HeC1mzaUxe89 zCa~tJ2g4(`D|v$r3(;f|tkTOGiW8qPzBY}(T`Nh{#EG`QX0|7)V+vz;elYTR?_FJu zWh`>wlZ&*LAn@M>IKRj$DaEQ)a!E4anpqM?5zHc#Fi4x%W?0%p2O_2=!OBU{tFh}&ktH1K3MQE_`S{Pek6E?Sjbyc`IwZCTKm6`Q*@CR5LWM=R=)+!42JO z>s`s*8L=NJi9rg4!eZql1#!m}uV=*ak{HQGCZ))ajS6h@;!ZI^_EK7WW(a7X#6a5{ ztvPk9jjm1nSg@g>FNSAe!H4bXeNGp8)o=4AJBM6aO}0WVxWD4!8t^$%JlI^E(0PZG zUD`3)to7RuUJ9>vvGd65JDVce%cqv1q%uPFz6(&>Q%R@2H#U`$Hlg}MzE0iu~ z(aBePmAbYaU=)JAbJvc@0>~HyKH1+-ko;|Sdxx|X+iT$CN-z*c$n*7BD=NC!VJoJm z)JTSWlrU67(?M=j4@G4xH*;B*Nrj)P$ud%rc>R^=?e{K3tiGUySQ1=QwQciI+-pp#fRgv!^$bC4`E{FK(k@n$*UTO2OKn zR5Ft1bvZC+=IdCB!*PLW(2j3o^1%p-@pd|L3U0pg6!D4xw>JSE6@U&yaPyrvAa&D+ zxarm>k?V4oV^I1V2GC{9G~9a2`DiYJT2jvKp_;ZGSg06mU;GIkc>FcE`ka6pfBQ=$ zhXQ3hy^1+#qoQ%0lUiZSQA056l_xMKyA{R`>S9`Mjq%2)Tw_JgfkSGEA+578V|_lH z^YhU2sNV3_g_j~|Ez{<(UhsWB2iX}u>~eNM|Be||swEGI!wE-V8~*du40IYb62aUZ z*uG;IcI_&ic4zIymU-V`Xa8|HqFsV`aq-!|Lqs5uvjI!j=ZNpTH`?z)(vBV2vvUVl zE&UF89gf8XC-g%=1hT5=HCnSq#mH~aqU%8PZ5_tkxeI|#!*I=Yze4w97naO?3E#}y zf_}$NLB}NVWXm}%!DzdPii={|j%7db@DLnM4+^#|z!Q(XfTHdbaMN`cqOB)b>APWC zmP+?j)Rt%8mgQKMlZ2t#4`DxdvXSHRz_slM-2d);H1l=C1;3k&B)Q1qV-g2L-M}E` zz4RZ<&fAV|qtC;Xq3z+1({G>#S)8*Gi&t!duS71~3J)qQKYJ3!j30|6#Pit2AMqC> zD|;{Y|4N7)dtwq=wrT;f>T2yXKDQke{T*D`xMUvu9R{OkOOG)F-|kE--H?yL!v??; zD!+^>2HHMg^8tdnNhd}SK=-a|2*GT0nEmOv-bY0di zw%RZeuM4rkA)?@kdUje<)$FIMDv{XGAntX%e*+Z-cO`qa)y}ay#BHuP7}Sfky2MWq zBDl1_OpF_@Z6Iz5YXTA)RJ3(tYzGho?T4U(P?O`d(6%5)u<~Jog()MSWgv~6cnd;x zFveDaAZSuSIMkm`)P2XNC4&%BBjR(rvF1<^2sy;4*Fr%cq=|BgR^^$rRGA%~dy6hcrC2&o4!WFVxDP-D}FrRsBIUVVXrKpH*zBw=!La&+p@ zqM~Fy*%&KO^biPXf>^g5b!a6kzdk@gAfyhl4Brw3B~};?H4dN8$H0n^T11Uq9~`oV zDh9Esq@={WLQUVgY(4x`*VtwB`~4IILTVW`d~0ZpTjHQEZ_yW|v}x1Eeq|`aTs$enEiyX1{zwNWI4rfU?9kW`@II Z{6E|4jzqM+(`f(z002ovPDHLkV1iy09;pBT literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/add-signature.png b/Document-Processing/PDF/PDF-Viewer/react/images/add-signature.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf8fe0628e03f1ff7957d4e09c29fd27a5d6f46 GIT binary patch literal 22529 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/add-sticky-notes.png b/Document-Processing/PDF/PDF-Viewer/react/images/add-sticky-notes.png new file mode 100644 index 0000000000000000000000000000000000000000..d86780c4405f65e59242abbdcc0b778962fe10ce GIT binary patch literal 20021 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�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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/adding-signature.png b/Document-Processing/PDF/PDF-Viewer/react/images/adding-signature.png new file mode 100644 index 0000000000000000000000000000000000000000..fd92aa760c058758d90268338c5dd747edf9598f GIT binary patch literal 19302 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 U@W{*X^8f$<07*qoM6N<$f^uNmJOBUy literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/after-enabling-annotation-toolbar.png b/Document-Processing/PDF/PDF-Viewer/react/images/after-enabling-annotation-toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..2387c40357937de27c4134c30f60332217562a9a GIT binary patch literal 18960 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/change-property.png b/Document-Processing/PDF/PDF-Viewer/react/images/change-property.png new file mode 100644 index 0000000000000000000000000000000000000000..edb1b772d17143c5d9abba0b380c5dfe51ea018b GIT binary patch literal 23044 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� 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 KxvXf#9wkym9y78VC--B|zhl;O>pPyH4lLy!Ga- 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 QK){c}J5`w?DMR1?2KUg~0RR91 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/open-comment.png b/Document-Processing/PDF/PDF-Viewer/react/images/open-comment.png new file mode 100644 index 0000000000000000000000000000000000000000..900069fad6f3024f5f48bee48da82d2c93676c2c GIT binary patch literal 23349 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/open-fillcolor.png b/Document-Processing/PDF/PDF-Viewer/react/images/open-fillcolor.png new file mode 100644 index 0000000000000000000000000000000000000000..5eaa678063e11d59c97ed083869ab2e1c874155e GIT binary patch literal 21372 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 LNkvXXu0mjfTD*$> literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/open-ink.png b/Document-Processing/PDF/PDF-Viewer/react/images/open-ink.png new file mode 100644 index 0000000000000000000000000000000000000000..c521252476083a98689e36457cd0d132a0beca98 GIT binary patch literal 18662 zcmeFZWmFtd)FqlA!5epP+}*utEVw%a2=49>+}+*Xf)g}23GM`U*Wf;#nfWpEetd6q zy+5zls@q*%UA68#b#C3W_t~c-loX^;5D5@JeE5JOBMnyh@ZlpoWSfEi1o;L{RlNoB z_R(2I3iP3Ng6Igc17j{GFZSU>eH_w@5iDdM!9iNv`NIdmz`yNd3Il-f!v|?^8L*g| zhrwA6+!t*1yP=-NS#pm5+^+}{K8 zY4wZmGvlA0-m{nt3){Md54keg^I6qjZK;${u& zJ34i2pTH~N5|Joka0f&TZvFj9F?{4UAB(Q>c;ftn3VErG2nm;ID3MC`yTg``&2`7_ z%lAE+<`_J&CbT!c>#e+wa+@d5k1y96WEgIEM(_tL!!0Lyp&~pg*1#2)|TQP;83mWj?hb9(?Zx=D7cILFz9?$;CU@qAr8Ow+u#)8 zCljdcC8%n8=WzIP=?1&aLCqQ_X#QezF{}|05%If;6iKEzPu!lm1X;F9!C8;Opb+MU zSivOb#Y8wz2}`nrq-&ablnKg+eUBshbmDolO@#Oxmib8Z*fQ}vCVW{oBMnIGPgn}Y zdC6!=C37Hl?1+r);e5U9jqF0Ph2r-kl-QzS+=~8oPX25R$#T(X-;cS^lcJv|ku&1_ z^Slm5SCC^1Hxk?*tHL=ig2uuo16d?$qm+O#+|+<7{}*`0o;Nl>-EREYF%3MgDUWQ= z-w7j<@V)$)2o+Hb!G`|YA?x1v!3v!{#`UuO=RY<$z7%giWemQCZwprICfd)6<+o};1uf|T1H3eZm<)^ zZfH_GU3-BKsy{-p=k>sQYIX)#RCSMdm2wY=>DuyW$oT_WMXnG+^V}#5ymnmWye`eY z)@DcRUibliIH4@)|3sHq$_V@zY-DQU^-e_7+9~IiRC0<^S%-ITa z6i=(4o?n9?!%!Y);0gr35+V|qJc!Tm<2+*4SzwdXjGr(M%xRJg=d^Bw)-66c99|u4 z4(ZwrGx5Bj9K1X#?Y_U@*tOsGJTNKhHw<`Tr1JVa?xig?m?C-I9)~~!cs~?L#SMM? z2>so5g?lWW4O-;=rIGJrru4XDxKefNhqtYoy{FVgh7)HkrW!~~4i?IDx3u2a16m7;u@Sk2T;RZe+Y3_uCk^Jn7+1?oW zg&fsaC53tQb*H!|J78>YmesX)!2`~0Tsdf?)03mcej`>a=u^gHd|S50L2;Mb@p`*8ehwGCIEfH30f!EkqdwN6b_-Il1z$^yFUDbV zWciPA?PIW2nNHrvOXTEGBgqfi?s>4SimUH1%T=M=6F((8-$sNUEVKzE0q2oFOZOg3 zO+N&MokewvOKs+V%#lCI&6gd+Nn6@k_@lVJ$&owUv+;-~bvGf(s`eVhGz&M~nen(> zIW5Bn``+nJ|0#wvD7t*W7u)7+O4%mlOO>#CKow*Oly5G|$cR@F5?iKx{4NA$0V zdo=iv_bHD<{aEQ@r&hhHK)-ry&rg|#{MA#g9$Aglyqn>>z>BCyv)$rjar|uZVBu%% ztvntmU$3G+B8p)Qy-)?^(rr2D)duWvjs7}_iXFMU4mV0LxQe~E?p*=m%x`cCOFh;# zQNf4DCrrI@S$T%0A9(cBkGz|u-)jdnqTPT3%F2lWH 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/open-radius.png b/Document-Processing/PDF/PDF-Viewer/react/images/open-radius.png new file mode 100644 index 0000000000000000000000000000000000000000..0dd083a9cdb490f0d8039fc17e1b7d32ced947b2 GIT binary patch literal 19925 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/select-text.png b/Document-Processing/PDF/PDF-Viewer/react/images/select-text.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d119b385119175bdd54c7d89cbfbee3d10c959 GIT binary patch literal 23051 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 It005^1#-tn^Z)<= literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/sticky-notes-in-page.png b/Document-Processing/PDF/PDF-Viewer/react/images/sticky-notes-in-page.png new file mode 100644 index 0000000000000000000000000000000000000000..3a96cc714d1ae6b08e410cabe990075d59465e07 GIT binary patch literal 20085 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 LNkvXXu0mjfc%_eI literal 0 HcmV?d00001 From 98535ccb3af675c78a8ed7527131bbdd24472123 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Mon, 27 Oct 2025 16:48:38 +0530 Subject: [PATCH 33/47] 984044: review --- .../PDF/PDF-Viewer/react/accessibility.md | 2 +- .../react/annotation/free-text-annotation.md | 10 +- .../react/annotation/ink-annotation.md | 8 +- .../annotation/line-angle-constraints.md | 2 +- .../annotation/measurement-annotation.md | 10 +- .../react/annotation/shape-annotation.md | 8 +- .../react/annotation/signature-annotation.md | 6 +- .../react/annotation/stamp-annotation.md | 8 +- .../annotation/sticky-notes-annotation.md | 8 +- .../annotation/text-markup-annotation.md | 30 +++--- .../PDF/PDF-Viewer/react/download.md | 2 +- .../PDF/PDF-Viewer/react/events.md | 96 +++++++++---------- .../PDF/PDF-Viewer/react/feature-module.md | 2 +- .../form-designer/create-programmatically.md | 36 +++---- .../create-with-user-interface-interaction.md | 4 +- .../react/form-designer/form-field-events.md | 52 +++++----- .../PDF/PDF-Viewer/react/form-filling.md | 2 +- .../PDF/PDF-Viewer/react/getting-started.md | 8 +- .../PDF/PDF-Viewer/react/globalization.md | 2 +- .../how-to/add-annotation-in-text-search.md | 2 +- .../react/how-to/add-save-button.md | 2 +- .../PDF-Viewer/react/how-to/add-signature.md | 2 +- .../configure-annotation-selector-setting.md | 4 +- .../how-to/control-annotation-visibility.md | 2 +- ...pdf-library-bounds-to-pdf-viewer-bounds.md | 4 +- .../react/how-to/custom-context-menu.md | 6 +- .../react/how-to/download-start-event.md | 2 +- .../react/how-to/enable-text-selection.md | 4 +- .../react/how-to/extract-text-option.md | 2 +- .../PDF-Viewer/react/how-to/extract-text.md | 4 +- .../react/how-to/find-text-async.md | 2 +- .../PDF-Viewer/react/how-to/load-document.md | 2 +- .../react/how-to/load-n-number-page.md | 2 +- .../react/how-to/lock-annotation.md | 2 +- .../PDF-Viewer/react/how-to/min-max-zoom.md | 4 +- ...renderstarted-pagerendercompleted-event.md | 2 +- .../perform-form-field-double-click-event.md | 2 +- .../how-to/restricting-zoom-in-mobile-mode.md | 2 +- .../react/how-to/show-custom-stamp-item.md | 2 +- .../react/how-to/show-hide-annotation.md | 2 +- .../signatureselect-signatureunselect.md | 2 +- .../PDF/PDF-Viewer/react/interaction-mode.md | 4 +- .../bookmark-navigation.md | 2 +- .../page-navigation.md | 4 +- .../page-thumbnail-navigation.md | 2 +- .../table-of-content-navigation.md | 6 +- .../react/keyboard-accessibility.md | 2 +- .../PDF/PDF-Viewer/react/magnification.md | 2 +- .../PDF/PDF-Viewer/react/mobile-toolbar.md | 4 +- .../PDF/PDF-Viewer/react/navigation.md | 10 +- .../react/organize-pdf/organize-pdf-events.md | 4 +- .../programmatic-support-for-organize-page.md | 6 +- .../organize-pdf/toolbar-organize-page.md | 6 +- .../PDF/PDF-Viewer/react/overview.md | 2 +- .../PDF/PDF-Viewer/react/print.md | 14 +-- .../react/save-pdf-file/to-amazon-s3.md | 2 +- .../save-pdf-file/to-azure-blob-storage.md | 2 +- .../to-dropbox-cloud-file-storage.md | 2 +- .../PDF/PDF-Viewer/react/text-search.md | 4 +- .../PDF/PDF-Viewer/react/text-selection.md | 6 +- .../annotation-toolbar-customization.md | 6 +- .../toolbar-customization/custom-toolbar.md | 6 +- .../form-designer-toolbar-customization.md | 4 +- .../toolbar-customization/mobile-toolbar.md | 4 +- .../primary-toolbar-customization.md | 4 +- .../PDF/PDF-Viewer/react/toolbar.md | 22 ++--- 66 files changed, 242 insertions(+), 242 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/accessibility.md b/Document-Processing/PDF/PDF-Viewer/react/accessibility.md index f421be692..07fe349bc 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/accessibility.md +++ b/Document-Processing/PDF/PDF-Viewer/react/accessibility.md @@ -156,7 +156,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" commandManager = {commandManager} style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/free-text-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/free-text-annotation.md index 9971d99fd..cf8d844f2 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/free-text-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/free-text-annotation.md @@ -49,7 +49,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" freeTextSettings={{fillColor: 'green', borderColor: 'blue', fontColor: 'yellow'}} style={{ 'height': '640px' }}> @@ -461,7 +461,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" freeTextSettings={{enableAutoFit: true}} style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/ink-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/ink-annotation.md index 08b81fb0b..1fc9cf86d 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/ink-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/ink-annotation.md @@ -49,7 +49,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" inkAnnotationSettings={{author: 'Syncfusion', strokeColor: 'green', thickness: 3, opacity: 0.6}} style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, @@ -179,7 +179,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" distanceSettings={{fillColor: 'blue', opacity: 0.6, strokeColor: 'green'}} perimeterSettings={{fillColor: 'green', opacity: 0.6, strokeColor: 'blue'}} areaSettings={{fillColor: 'yellow', opacity: 0.6, strokeColor: 'orange'}} @@ -625,7 +625,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" measurementSettings={{scaleRatio: 2, conversionUnit: 'cm', displayUnit: 'cm'}} style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/shape-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/shape-annotation.md index 2ea172f58..73c961aa4 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/shape-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/shape-annotation.md @@ -57,7 +57,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" lineSettings={{fillColor: 'blue', opacity: 0.6, strokeColor: 'green'}} arrowSettings={{fillColor: 'green', opacity: 0.6, strokeColor: 'blue'}} rectangleSettings={{fillColor: 'yellow', opacity: 0.6, strokeColor: 'orange'}} diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/signature-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/signature-annotation.md index 30c88ac24..2a3550eb4 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/signature-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/signature-annotation.md @@ -53,7 +53,7 @@ function App() { @@ -125,7 +125,7 @@ function App() { @@ -240,7 +240,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.1.48/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/stamp-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/stamp-annotation.md index 029525dd5..5726449e4 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/stamp-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/stamp-annotation.md @@ -69,7 +69,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" stampSettings={{opacity: 0.3, author: 'Guest User'}} style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/sticky-notes-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/sticky-notes-annotation.md index 58af1de89..a91ffa294 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/sticky-notes-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/sticky-notes-annotation.md @@ -67,7 +67,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" stickyNotesSettings={{author: 'Syncfusion'}} style={{ 'height': '640px' }}> @@ -335,7 +335,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableStickyNotesAnnotation={false} style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md index c81a43d03..77b9737e5 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/text-markup-annotation.md @@ -60,7 +60,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> @@ -507,7 +507,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> @@ -785,7 +785,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/30.1.37/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/30.1.37/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> @@ -1063,7 +1063,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/30.1.37/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/30.1.37/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }} highlightSettings = {{author: 'Guest User', subject: 'Important', color: '#ffff00', opacity: 0.9, modifiedDate: ''}} underlineSettings = {{author: 'Guest User', subject: 'Points to be remembered', color: '#00ffff', opacity: 0.9,modifiedDate: ''}} @@ -1279,7 +1279,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> @@ -1369,7 +1369,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableTextMarkupAnnotation = {false} style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/download.md b/Document-Processing/PDF/PDF-Viewer/react/download.md index 7784cc499..89d920f1f 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/download.md +++ b/Document-Processing/PDF/PDF-Viewer/react/download.md @@ -39,7 +39,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/events.md b/Document-Processing/PDF/PDF-Viewer/react/events.md index 7d0caf19a..703c5a969 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/events.md +++ b/Document-Processing/PDF/PDF-Viewer/react/events.md @@ -88,7 +88,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" bookmarkClick={(args) => { console.log(`Bookmark clicked: ${args.name}`); }} @@ -123,7 +123,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" toolbarClick={(args) => { console.log(`Toolbar item clicked: ${args.name}`); }} @@ -166,7 +166,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/form-designer.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableFormFieldsValidation={true} validateFormFields={(args) => { console.log('form field event name:', args.name); @@ -208,7 +208,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" zoomChange={(args) => { console.log(`Zoom changed to: ${args.zoomValue}%`); }} @@ -243,7 +243,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" buttonFieldClick={(args) => { console.log(`Button field clicked. Name: ${args.name}`); }} @@ -278,7 +278,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" commentAdd={(args) => { console.log(`Comment added. Id: ${args.id}`); }} @@ -313,7 +313,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" commentDelete={(args) => { console.log(`Comment deleted. Id: ${args.id}`); }} @@ -348,7 +348,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" commentEdit={(args) => { console.log(`Comment edited. Id: ${args.id}`); }} @@ -383,7 +383,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" commentSelect={(args) => { console.log(`Comment selected. Id: ${args.id}`); }} @@ -418,7 +418,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" commentStatusChanged={(args) => { console.log(`Comment status changed. Id: ${args.id}, Status: ${args.status}`); }} @@ -453,7 +453,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" created={() => { console.log('PDF Viewer created'); }} @@ -505,7 +505,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" customContextMenuBeforeOpen={(args) => { console.log(`Before open context menu at page ${args.name}`); }} @@ -561,7 +561,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" customContextMenuSelect={(args) => { console.log(`Context menu item selected: ${args.name}`); }} @@ -599,7 +599,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" documentLoad={(args) => { console.log(`Document loaded: page count = ${args.pageData}`); }} @@ -668,7 +668,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" documentUnload={() => { console.log('Document unloaded'); }} @@ -703,7 +703,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" downloadEnd={(args) => { console.log(`Download finished. File name: ${args.fileName}`); }} @@ -738,7 +738,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" downloadStart={() => { console.log('Download started'); }} @@ -773,7 +773,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" exportFailed={(args) => { console.log(`Export failed: ${args.name}`); }} @@ -808,7 +808,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" exportStart={() => { console.log('Export started'); }} @@ -843,7 +843,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" exportSuccess={() => { console.log('Export success'); }} @@ -878,7 +878,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" extractTextCompleted={(args) => { console.log(`Extracted text length: ${(args.documentTextCollection || '').length}`); }} @@ -913,7 +913,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" hyperlinkClick={(args) => { console.log(`Hyperlink clicked: ${args.hyperlink}`); }} @@ -948,7 +948,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" hyperlinkMouseOver={(args) => { console.log(`Hyperlink hover at page: ${args.name}`); }} @@ -983,7 +983,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" importFailed={(args) => { console.log(`Import failed: ${args.name}`); }} @@ -1018,7 +1018,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" importStart={() => { console.log('Import started'); }} @@ -1053,7 +1053,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" importSuccess={() => { console.log('Import success'); }} @@ -1109,7 +1109,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" created={onCreated} keyboardCustomCommands={(args) => { console.log('Custom command triggered:', args); @@ -1145,7 +1145,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" moveSignature={(args) => { console.log(`Signature moved on page ${args.id}`); }} @@ -1180,7 +1180,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageChange={(args) => { console.log(`Page changed from ${args.previousPageNumber} to ${args.currentPageNumber}`); }} @@ -1215,7 +1215,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageClick={(args) => { console.log(`Page ${args.pageNumber} clicked at (${args.x}, ${args.y})`); }} @@ -1250,7 +1250,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageMouseover={(args) => { console.log(`Mouse over page ${args.name}`); }} @@ -1285,7 +1285,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageOrganizerSaveAs={(args) => { console.log(`Page organizer save triggered. File name: ${args.downloadDocument}`); }} @@ -1320,7 +1320,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageRenderComplete={(args) => { console.log(`Page ${args.data} rendering completed.`); }} @@ -1355,7 +1355,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageRenderInitiate={(args) => { console.log(`Page ${args.jsonData} rendering initiated.`); }} @@ -1390,7 +1390,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" printEnd={() => { console.log('Print action completed.'); }} @@ -1425,7 +1425,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" printStart={() => { console.log('Print action initiated.'); }} @@ -1460,7 +1460,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" removeSignature={(args) => { console.log(`Signature removed from page ${args.bounds}`); }} @@ -1495,7 +1495,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" resizeSignature={(args) => { console.log(`Signature resized on page ${args.currentPosition}`); }} @@ -1530,7 +1530,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" resourcesLoaded={() => { console.log('PDFium resources loaded.'); }} @@ -1565,7 +1565,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" signaturePropertiesChange={(args) => { console.log(`Signature properties changed on page ${args.type}`); }} @@ -1600,7 +1600,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" signatureSelect={(args) => { console.log(`Signature selected on page ${args.signature}`); }} @@ -1635,7 +1635,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" signatureUnselect={(args) => { console.log(`Signature unselected ${args.signature}`); }} @@ -1670,7 +1670,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" textSearchComplete={() => { console.log('Text search completed.'); }} @@ -1705,7 +1705,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" textSearchHighlight={(args) => { console.log(`Search result ${args.bounds} highlighted.`); }} @@ -1740,7 +1740,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" textSearchStart={(args) => { console.log(`Text search started for: "${args.searchText}"`); }} @@ -1775,7 +1775,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" textSelectionEnd={(args) => { console.log(`Text selection ended on page ${args.pageIndex}.`); }} @@ -1810,7 +1810,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" textSelectionStart={(args) => { console.log(`Text selection started on page ${args.pageIndex}.`); }} @@ -1845,7 +1845,7 @@ function App() { id="pdfViewer" ref={viewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" thumbnailClick={(args) => { console.log(`Thumbnail clicked for page index ${args.pageNumber}.`); }} diff --git a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md index b8ec36591..6165419b8 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md +++ b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md @@ -12,7 +12,7 @@ domainurl: ##DomainURL## The PDF Viewer features are segregated into individual feature-wise modules to enable selectively referencing in the application. The required modules should be injected to extend its functionality. The following are the selective modules of PDF Viewer that can be included as required: -The available PdfViewer modules are: +The available PDF Viewer modules are: * [**Toolbar**](./toolbar-customization):- Built-in toolbar for better user interaction. * [**Magnification**](./magnification.md):- Perform zooming operation for better viewing experience. diff --git a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md index caccf1de6..087cc04df 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md +++ b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md @@ -63,7 +63,7 @@ function App() { @@ -116,7 +116,7 @@ export function App() { @@ -181,7 +181,7 @@ export function App() { @@ -234,7 +234,7 @@ export function App() { @@ -299,7 +299,7 @@ export function App() { @@ -352,7 +352,7 @@ export function App() { @@ -398,7 +398,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enablePrint={true} style={{ 'height': '640px' }}> @@ -639,7 +639,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/form-designer.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" documentLoad={documentLoaded} enableFormFieldsValidation={true} ValidateFormFields= {validateFormFields} @@ -924,7 +924,7 @@ return (
        {/* Inject the required services */} @@ -1053,7 +1053,7 @@ return (
        {/* Inject the required services */} @@ -1226,7 +1226,7 @@ return (
        {/* Inject the required services */} @@ -1409,7 +1409,7 @@ return (
        {/* Inject the required services */} @@ -1575,7 +1575,7 @@ return (
        @@ -1738,7 +1738,7 @@ return (
        @@ -1917,7 +1917,7 @@ return (
        @@ -2098,7 +2098,7 @@ return (
        diff --git a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-with-user-interface-interaction.md b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-with-user-interface-interaction.md index 3a6543b59..a3068725c 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-with-user-interface-interaction.md +++ b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-with-user-interface-interaction.md @@ -43,7 +43,7 @@ function App() { id="container" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/form-designer.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableFormDesignerToolbar={true} style={{ 'height': '640px' }}> @@ -160,7 +160,7 @@ function App() { id="container" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/form-designer.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> @@ -85,7 +85,7 @@ export function App() { @@ -125,7 +125,7 @@ function App() { @@ -158,7 +158,7 @@ export function App() { @@ -198,7 +198,7 @@ function App() { @@ -231,7 +231,7 @@ export function App() { @@ -271,7 +271,7 @@ function App() { @@ -304,7 +304,7 @@ export function App() { @@ -344,7 +344,7 @@ function App() { @@ -377,7 +377,7 @@ export function App() { @@ -419,7 +419,7 @@ function App() { @@ -454,7 +454,7 @@ export function App() { @@ -496,7 +496,7 @@ function App() { @@ -531,7 +531,7 @@ export function App() { @@ -590,7 +590,7 @@ function App() { @@ -642,7 +642,7 @@ export function App() { @@ -682,7 +682,7 @@ function App() { @@ -715,7 +715,7 @@ export function App() { @@ -757,7 +757,7 @@ function App() { @@ -792,7 +792,7 @@ export function App() { @@ -832,7 +832,7 @@ function App() { @@ -865,7 +865,7 @@ export function App() { @@ -905,7 +905,7 @@ function App() { @@ -938,7 +938,7 @@ export function App() { @@ -979,7 +979,7 @@ function App() { @@ -1013,7 +1013,7 @@ export function App() { diff --git a/Document-Processing/PDF/PDF-Viewer/react/form-filling.md b/Document-Processing/PDF/PDF-Viewer/react/form-filling.md index 4a97534ff..ea421b2eb 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/form-filling.md +++ b/Document-Processing/PDF/PDF-Viewer/react/form-filling.md @@ -46,7 +46,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableFormDesigner={false} style={{ 'height': '640px' }}> @@ -240,7 +240,7 @@ return (
        {/* Inject the required services */} {/* Inject the required services */} diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-signature.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-signature.md index ea33f3c1c..7eb63ddbd 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-signature.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-signature.md @@ -23,7 +23,7 @@ The PDF Viewer library allows you to add signature in the signature field of the + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" documentLoad={documentLoaded} style={{ 'height': '640px' }}>
        diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md index dd3df4947..8f1f75b37 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md @@ -14,9 +14,9 @@ When exporting annotations from the PDF Library, convert the bounds values into Steps to convert bounds values -**Step 1:** Initialize the PdfViewer instance +**Step 1:** Initialize the PDF Viewer instance -Create an instance of the PdfViewer and configure it with the required services. +Create an instance of the PDF Viewer and configure it with the required services. **Step 2:** Handle export success diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-context-menu.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-context-menu.md index 30e50e50b..51b43db11 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-context-menu.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-context-menu.md @@ -58,7 +58,7 @@ The following example adds custom options to the context menu. { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" downloadStart={downloadStart} style={{ 'height': '640px' }}> @@ -97,7 +97,7 @@ export class App extends React.Component { id="pdfViewer" ref={this.pdfViewer} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/28.1.33/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableTextSelection={false} style={{ height: '640px' }} > diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-option.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-option.md index e8aad2eef..3a86da98a 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-option.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text-option.md @@ -49,7 +49,7 @@ export function App() { diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text.md index 27c4c6585..3e6914809 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/extract-text.md @@ -33,7 +33,7 @@ Returns a Promise with: **pageText:** A concatenated string of plain text extracted from the specified page(s). -### Usage of extractText in Syncfusion PdfViewer Control +### Usage of extractText in Syncfusion PDF Viewer Control Here is an example that demonstrates how to use the extractText method along with event handling: ```html @@ -79,7 +79,7 @@ export function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/min-max-zoom.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/min-max-zoom.md index cce3e0f2f..26d19e20a 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/min-max-zoom.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/min-max-zoom.md @@ -33,7 +33,7 @@ export function App() { diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/pagerenderstarted-pagerendercompleted-event.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/pagerenderstarted-pagerendercompleted-event.md index 3f376d307..70f4b0817 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/pagerenderstarted-pagerendercompleted-event.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/pagerenderstarted-pagerendercompleted-event.md @@ -49,7 +49,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageRenderInitiate={pageRenderInitiate} pageRenderComplete={pageRenderComplete} style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/perform-form-field-double-click-event.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/perform-form-field-double-click-event.md index c0395e8d2..713efcafb 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/perform-form-field-double-click-event.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/perform-form-field-double-click-event.md @@ -23,7 +23,7 @@ The PDF Viewer library allows you to trigger an event when you double click on t diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/restricting-zoom-in-mobile-mode.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/restricting-zoom-in-mobile-mode.md index 8854c2cd2..5b4dadc43 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/restricting-zoom-in-mobile-mode.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/restricting-zoom-in-mobile-mode.md @@ -40,7 +40,7 @@ function App() { diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/show-custom-stamp-item.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/show-custom-stamp-item.md index b184aecfb..2fb298086 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/show-custom-stamp-item.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/show-custom-stamp-item.md @@ -74,7 +74,7 @@ class App extends React.Component { ref={this.viewerRef} id="PdfViewer" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" customStampSettings={customStampSettings} style={{ height: '640px' }} > diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/show-hide-annotation.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/show-hide-annotation.md index 64153d07b..0ed136fe3 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/show-hide-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/show-hide-annotation.md @@ -91,7 +91,7 @@ export class App extends React.Component { diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/signatureselect-signatureunselect.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/signatureselect-signatureunselect.md index 4685cf22c..0f82ec904 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/signatureselect-signatureunselect.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/signatureselect-signatureunselect.md @@ -49,7 +49,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" signatureSelect={signatureSelect} signatureUnselect={signatureUnselect} style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/interaction-mode.md b/Document-Processing/PDF/PDF-Viewer/react/interaction-mode.md index c3310564c..8fd6b38d3 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/interaction-mode.md +++ b/Document-Processing/PDF/PDF-Viewer/react/interaction-mode.md @@ -34,7 +34,7 @@ function App() { @@ -113,7 +113,7 @@ function App() { diff --git a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md index f0e308c40..8fbb6a65d 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/bookmark-navigation.md @@ -39,7 +39,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} enableBookmark={true} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > { pdfviewer = scope; }} enableNavigation={true} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > { pdfviewer = scope; }} enableThumbnail={true} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableHyperlink={false} style={{ height: '500px', width: '100%' }} > @@ -166,7 +166,7 @@ function App() { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" hyperlinkOpenState="NewTab" style={{ height: '500px', width: '100%' }} > @@ -276,7 +276,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/mobile-toolbar.md b/Document-Processing/PDF/PDF-Viewer/react/mobile-toolbar.md index 5e8f81058..72b889683 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/mobile-toolbar.md +++ b/Document-Processing/PDF/PDF-Viewer/react/mobile-toolbar.md @@ -74,7 +74,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableDesktopMode={true} style={{ 'height': '640px' }}> @@ -144,7 +144,7 @@ function App() { { pdfviewer = scope; }} id="container" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableDesktopMode={true} enableTextSelection={false} style={{ 'height': '640px' }}> diff --git a/Document-Processing/PDF/PDF-Viewer/react/navigation.md b/Document-Processing/PDF/PDF-Viewer/react/navigation.md index 997280c7c..b28a24d76 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/navigation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/navigation.md @@ -41,7 +41,7 @@ function App() { @@ -112,7 +112,7 @@ function App() { @@ -184,7 +184,7 @@ function App() { @@ -265,7 +265,7 @@ function App() { @@ -334,7 +334,7 @@ function App() { diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md index 5cb636d64..9ae00b6d9 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md @@ -51,7 +51,7 @@ function App() { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageOrganizerSaveAs={(args) => { console.log('File Name is' + args.fileName); console.log('Document data' + args.downloadDocument); @@ -119,7 +119,7 @@ function App() { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageOrganizerZoomChanged={(args) => { console.log('Previous Zoom Value is' + args.previousZoom); console.log('Current Zoom Value is' + args.currentZoom); diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/programmatic-support-for-organize-page.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/programmatic-support-for-organize-page.md index af1bc1078..919eba16c 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/programmatic-support-for-organize-page.md +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/programmatic-support-for-organize-page.md @@ -27,7 +27,7 @@ export default function App() { @@ -72,7 +72,7 @@ export default function App() { @@ -118,7 +118,7 @@ export default function App() { diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md index 470297b72..606775030 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/toolbar-organize-page.md @@ -30,7 +30,7 @@ function App() { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageOrganizerSettings={{ canInsert: false }} style={{ height: '640px' }} > @@ -89,7 +89,7 @@ function App() { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageOrganizerSettings={{ canDelete: false }} style={{ height: '640px' }} > @@ -148,7 +148,7 @@ function App() { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" pageOrganizerSettings={{ canRotate: false }} style={{ height: '640px' }} > diff --git a/Document-Processing/PDF/PDF-Viewer/react/overview.md b/Document-Processing/PDF/PDF-Viewer/react/overview.md index 8b34a4a2b..a88f16b25 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/overview.md +++ b/Document-Processing/PDF/PDF-Viewer/react/overview.md @@ -62,7 +62,7 @@ function App() { @@ -102,7 +102,7 @@ function App() { @@ -316,7 +316,7 @@ function App() { @@ -392,7 +392,7 @@ function App() { { console.log('Print action has started for file: ' + args.fileName); // To cancel the print action @@ -465,7 +465,7 @@ function App() { { console.log('Printed File Name: ' + args.fileName); }} diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md index cc55fc681..4b4ab1ec2 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-amazon-s3.md @@ -66,7 +66,7 @@ return (
        }} created={loadDocument} id="container" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.40/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ height: '640px' }} toolbarSettings={{ showTooltip : true, toolbarItems: [ 'OpenOption', 'PageNavigationTool', 'MagnificationTool', 'PanTool', 'SelectionTool', 'SearchOption', 'PrintOption', toolItem1, 'UndoRedoTool', 'AnnotationEditTool', 'FormDesignerEditTool', 'CommentTool', 'SubmitForm']}} toolbarClick={toolbarClick} diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-blob-storage.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-blob-storage.md index 300ee2d4c..7360bbaea 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-blob-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-azure-blob-storage.md @@ -63,7 +63,7 @@ return (
        }} created={loadDocument} id="container" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.40/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ height: '640px' }} toolbarSettings={{ showTooltip : true, toolbarItems: [ 'OpenOption', 'PageNavigationTool', 'MagnificationTool', 'PanTool', 'SelectionTool', 'SearchOption', 'PrintOption', toolItem1, 'UndoRedoTool', 'AnnotationEditTool', 'FormDesignerEditTool', 'CommentTool', 'SubmitForm']}} toolbarClick={toolbarClick} diff --git a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md index baab0f783..0a08f2611 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/react/save-pdf-file/to-dropbox-cloud-file-storage.md @@ -59,7 +59,7 @@ return (
        }} created={loadDocument} id="container" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.40/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ height: '640px' }} toolbarSettings={{ showTooltip : true, toolbarItems: [ 'OpenOption', 'PageNavigationTool', 'MagnificationTool', 'PanTool', 'SelectionTool', 'SearchOption', 'PrintOption', toolItem1, 'UndoRedoTool', 'AnnotationEditTool', 'FormDesignerEditTool', 'CommentTool', 'SubmitForm']}} toolbarClick={toolbarClick} diff --git a/Document-Processing/PDF/PDF-Viewer/react/text-search.md b/Document-Processing/PDF/PDF-Viewer/react/text-search.md index 249c22ed9..fbe49e308 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/text-search.md +++ b/Document-Processing/PDF/PDF-Viewer/react/text-search.md @@ -195,8 +195,8 @@ export default function WholeWordExample() { The following text search methods are available in the PDF Viewer, * [**Search text**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearch/#searchtext):- Searches the target text in the PDF document and highlights the occurrences in the pages. -* [**Search next**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearch/#searchnext):- Searches the next occurrence of the searched text from the current occurrence of the PdfViewer. -* [**Search previous**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearch/#searchprevious):- Searches the previous occurrence of the searched text from the current occurrence of the PdfViewer. +* [**Search next**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearch/#searchnext):- Searches the next occurrence of the searched text from the current occurrence of the PDF Viewer. +* [**Search previous**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearch/#searchprevious):- Searches the previous occurrence of the searched text from the current occurrence of the PDF Viewer. * [**Cancel text search**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/textSearch/#canceltextsearch):- The text search can be canceled and the highlighted occurrences from the PDF Viewer can be removed . ![Alt text](./images/search.png) diff --git a/Document-Processing/PDF/PDF-Viewer/react/text-selection.md b/Document-Processing/PDF/PDF-Viewer/react/text-selection.md index 18456aa23..0dc0f1834 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/text-selection.md +++ b/Document-Processing/PDF/PDF-Viewer/react/text-selection.md @@ -77,7 +77,7 @@ function App() { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableTextSelection={true} style={{ height: '500px', width: '100%' }} > @@ -177,7 +177,7 @@ function App() { @@ -211,7 +211,7 @@ function App() { diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md index ba2018c13..15fd7250f 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/annotation-toolbar-customization.md @@ -51,7 +51,7 @@ const App = () => { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath='https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf' - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" height="500px" width="100%" /> @@ -106,7 +106,7 @@ Choose which tools appear and control their order in the annotation toolbar. Use [`PdfViewerToolbarSettings`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbarSettings/) with the [`AnnotationToolbarItems`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/toolbarSettings/#annotationtoolbaritems) property to choose which tools are displayed in the annotation toolbar. The property accepts a list of [`AnnotationToolbarItem`](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/annotationToolbarItem/) values. Only the items included in this list are shown; any item not listed is hidden. The rendered order follows the sequence of items in the list. -The annotation toolbar is presented when entering annotation mode in PdfViewer and adapts responsively based on the available width. Include the Close tool to allow users to exit the annotation toolbar when needed. +The annotation toolbar is presented when entering annotation mode in PDF Viewer and adapts responsively based on the available width. Include the Close tool to allow users to exit the annotation toolbar when needed. The following example demonstrates how to customize the annotation toolbar by specifying a selected set of tools using `AnnotationToolbarItem`. @@ -150,7 +150,7 @@ const App = () => { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath='https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf' - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" height="500px" width="100%" toolbarSettings={{ annotationToolbarItems }} diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md index d286893f6..f5c3a186d 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/custom-toolbar.md @@ -59,7 +59,7 @@ Follow the steps provided in the [getting started](https://ej2.syncfusion.com/ja documentLoad={this.documentLoaded} pageChange={this.onPageChange} documentPath="https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'display': 'block', 'height': '640px' }}> (this.viewer = v)} enableToolbar={false} - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" documentLoad={this.documentLoaded} pageChange={this.onPageChange} diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md index 0115a7f6e..96967ec30 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/form-designer-toolbar-customization.md @@ -35,7 +35,7 @@ const App = () => { id="PdfViewer" enableFormDesigner={false} documentPath="https://cdn.syncfusion.com/content/pdf/form-designer.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > { ref={(scope) => { pdfviewer = scope; }} id="PdfViewer" documentPath="https://cdn.syncfusion.com/content/pdf/form-designer.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" toolbarSettings={{ formDesignerToolbarItems: [ 'TextboxTool', diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md index 0a7b16ae6..3c127a6aa 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/mobile-toolbar.md @@ -70,7 +70,7 @@ function App() { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableDesktopMode={true} height="640px" > @@ -129,7 +129,7 @@ function App() { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" enableDesktopMode={true} enableTextSelection={false} height="640px" diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/primary-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/primary-toolbar-customization.md index e7e2db246..635e2a965 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/primary-toolbar-customization.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar-customization/primary-toolbar-customization.md @@ -32,7 +32,7 @@ function App() { ref={(scope) => { pdfviewer = scope; }} enableToolbar={false} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > @@ -104,7 +104,7 @@ function App() { id="PdfViewer" ref={(scope) => { pdfviewer = scope; }} documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ height: '500px', width: '100%' }} > diff --git a/Document-Processing/PDF/PDF-Viewer/react/toolbar.md b/Document-Processing/PDF/PDF-Viewer/react/toolbar.md index eb98c3ed2..4bfb68eb2 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/toolbar.md +++ b/Document-Processing/PDF/PDF-Viewer/react/toolbar.md @@ -50,7 +50,7 @@ export function App() { @@ -79,7 +79,7 @@ export function App() { @@ -125,7 +125,7 @@ export function App() { @@ -231,7 +231,7 @@ export function App() { @@ -275,7 +275,7 @@ export function App() { @@ -572,7 +572,7 @@ The PDF Viewer provides API for user interactions options provided in it's built documentLoad={this.documentLoaded} pageChange={this.onPageChange} documentPath="https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf" - resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + resourceUrl="https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib" style={{ 'display': 'block', 'height': '640px' }}> Date: Mon, 27 Oct 2025 16:49:41 +0530 Subject: [PATCH 34/47] 984044: empty commit From bf4254fae8f321254da1a4b21c99305ba97c375d Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Mon, 27 Oct 2025 16:50:47 +0530 Subject: [PATCH 35/47] 984044: commit From 5826f16dc8b88bc7b9e7ba277783a8be425c06d2 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Mon, 27 Oct 2025 17:39:23 +0530 Subject: [PATCH 36/47] 984044: custom font --- Document-Processing-toc.html | 10 +- .../PDF/PDF-Viewer/react/events.md | 8 +- .../PDF/PDF-Viewer/react/feature-module.md | 24 +- .../PDF/PDF-Viewer/react/how-to-overview.md | 100 ++--- .../PDF-Viewer/react/how-to/custom-fonts.md | 10 +- .../PDF/PDF-Viewer/react/magnification.md | 10 +- .../PDF/PDF-Viewer/react/navigation.md | 380 +----------------- .../PDF-Viewer/react/organize-pdf-overview.md | 11 + .../react/organize-pdf/organize-pdf-events.md | 6 +- .../PDF/PDF-Viewer/react/overview.md | 2 +- 10 files changed, 109 insertions(+), 452 deletions(-) diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index 7c0bab9a8..c72b23ebb 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -677,12 +677,12 @@
      • Custom Toolbar
      -
    • Interactive PDF Navigation +
    • Interactive PDF Navigation
    • Magnification
    • diff --git a/Document-Processing/PDF/PDF-Viewer/react/events.md b/Document-Processing/PDF/PDF-Viewer/react/events.md index 703c5a969..7024bb78d 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/events.md +++ b/Document-Processing/PDF/PDF-Viewer/react/events.md @@ -1080,7 +1080,7 @@ The [keyboardCustomCommands](https://ej2.syncfusion.com/react/documentation/api/ When it triggers - After registering gestures in commandManager.keyboardCommand. For example, pressing Shift + Alt + G or Shift + Alt + H triggers the event. Use this to handle custom keyboard shortcuts. -Refer to [Keyboard interaction](./accessibility.md#keyboard-interaction) for details about adding and handling custom shortcut keys. +Refer to [Keyboard interaction](./accessibility#keyboard-interaction) for details about adding and handling custom shortcut keys. Example: ```jsx @@ -1861,3 +1861,9 @@ root.render(); ``` > Tip: For annotation and signature-specific events and arguments, see the dedicated Annotations Events topic. + +See also: + +- [Annotation events](./annotations/annotation-event) +- [Form field events](./form-designer/form-field-events) +- [Organize PDF events](./organize-pdf/organize-pdf-events) diff --git a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md index 6165419b8..ac8e1c76b 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md +++ b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md @@ -14,18 +14,18 @@ The PDF Viewer features are segregated into individual feature-wise modules to e The available PDF Viewer modules are: -* [**Toolbar**](./toolbar-customization):- Built-in toolbar for better user interaction. -* [**Magnification**](./magnification.md):- Perform zooming operation for better viewing experience. -* [**Navigation**](./interactive-pdf-navigation/page-navigation.md):- Easy navigation across the PDF pages. -* [**LinkAnnotation**](./interactive-pdf-navigation/table-of-content-navigation.md):- Easy navigation within and outside of the PDF document. -* [**ThumbnailView**](./interactive-pdf-navigation/page-thumbnail-navigation.md):- Easy navigation with in the PDF document. -* [**BookmarkView**](./interactive-pdf-navigation/bookmark-navigation.md):- Easy navigation based on the bookmark content of the PDF document. -* [**TextSelection**](./textselection.md):- Select and copy text from a PDF file. -* [**TextSearch**](./text-search.md):- Search a text easily across the PDF document. -* [**Print**](./print.md):- Print the entire document or a specific page directly from the browser. -* [**Annotation**](./annotations/text-markup-annotation.md):- Annotations can be added or edited in the PDF document. -* [**FormFields**](./form-designer/create-programmatically.md):- Preserve the form fields in the PDF document. -* [**FormDesigner**](./form-designer/create-programmatically.md):- Form fields can be added or edited in the PDF document. +* [**Toolbar**](./toolbar-customization/annotation-toolbar-customization): Built-in toolbar for user interaction. +* [**Magnification**](./magnification): Perform zoom operations for a better viewing experience. +* [**Navigation**](./interactive-pdf-navigation/page-navigation): Navigate across pages. +* [**LinkAnnotation**](./interactive-pdf-navigation/table-of-content-navigation): Navigate within the document or to external destinations via hyperlinks. +* [**ThumbnailView**](./interactive-pdf-navigation/page-thumbnail-navigation): Navigate within the document using page thumbnails. +* [**BookmarkView**](./interactive-pdf-navigation/bookmark-navigation): Navigate using document bookmarks (table of contents). +* [**TextSelection**](./textselection): Select and copy text from the document. +* [**TextSearch**](./text-search): Search for text across the document. +* [**Print**](./print): Print the entire document or specific pages directly from the browser. +* [**Annotation**](./annotations/text-markup-annotation): Add and edit annotations. +* [**FormFields**](./form-designer/create-programmatically): Work with form fields in the document. +* [**FormDesigner**](./form-designer/create-programmatically): Add or edit form fields in the document. >In addition to injecting the required modules in your application, enable corresponding properties to extend the functionality for a PDF Viewer instance. Refer to the following table. diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md b/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md index dbb78c6b1..dba935c59 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to-overview.md @@ -12,54 +12,54 @@ domainurl: ##DomainURL## The frequently asked questions in Essential® PDF Viewer are listed below. -* [How to add annotation in text search in react?](./how-to/add-annotation-in-text-search-ts.md) -* [How to add custom header to the PDF Viewer ajax request?](./how-to/add-header-value.md) -* [How to add a save button to PDF Viewer toolbar?](./how-to/add-save-button-ts.md) -* [How to customize the annotation selectors?](./how-to/annotation-selectors.md) -* [How to change the author name of the annotation dynamically?](./how-to/change-author-name-using-annotation-settings.md) -* [How to clear all the annotations from the PDF document?](./how-to/clear-annotations.md) -* [How to configure the annotation selector settings?](./how-to/configure-annotationselector-setting-ts.md) -* [What are the supported conformance or standards of PDF Viewer?](./how-to/conformance.md) -* [How to control the visibility of the annotation?](./how-to/control-annotation-visibility-ts.md) -* [How to convert the PDF library bounds to PDF viewer bounds?](./how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds-ts.md) -* [How to create PDF Viewer service using ASP.NET Core?](./how-to/create-pdfviewer-service-core.md) -* [How to create PDF viewer web service using ASP.NET MVC?](./how-to/create-pdfviewer-service.md) -* [How to customize the context menu in PDF Viewer?](./how-to/custom-context-menu.md) -* [How to add custom font in handwritten signature?](./how-to/custom-font-signature-field-ts.md) -* [How to add custom fonts for form fields and free text annotations?](./how-to/custom-fonts-ts.md) -* [How to customize text search highlight color in PDF Viewer?](./how-to/customize-text-search-color.md) -* [How to delete a specific annotation from the PDF document?](./how-to/delete-annotation.md) -* [How to disable the context menu?](./how-to/disable-context-menu.md) -* [How to disable tile rendering in PDF Viewer?](./how-to/disable-tile-rendering.md) -* [How to display custom tooltip for annotation?](./how-to/display-custom-tool-tip-for-annotation.md) -* [How to get the download start event?](./how-to/download-start-event-ts.md) -* [How to enable or disable the local storage?](./how-to/enable-local-storage-ts.md) -* [Enable the resizer for text markup annotation?](./how-to/enable-resize.md) -* [How to enable or disable the text selection?](./how-to/enable-text-selection-ts.md) -* [How to export the PDF pages as images?](./how-to/export-as-image-ts.md) -* [How to extract text from the PDF document?](./how-to/extract-text-completed-ts.md) -* [How to extract text from a specific region?](./how-to/extract-text-option-ts.md) -* [How to extract text from the PDF document?](./how-to/extract-text-ts.md) -* [How to find the text in the PDF document asynchronously?](./how-to/find-text-async-ts.md) -* [How to get the base64 string of the loaded document?](./how-to/get-base64-ts.md) -* [How to get the page information of the loaded document?](./how-to/get-page-info-ts.md) -* [How to perform highlight, underline, and strikethrough for the selected text?](./how-to/highlight-underline-strikeout-text.md) -* [How to identify the added annotation and its mode?](./how-to/identify-added-annotation-mode.md) -* [How to import annotations from the PDF document?](./how-to/import-annotations.md) -* [How to import and export annotations in PDF Viewer?](./how-to/import-export-annotation-ts.md) -* [How to load a PDF document in PDF Viewer?](./how-to/load-document.md) -* [How to set the minimum and maximum zoom percentage?](./how-to/min-max-zoom-ts.md) -* [How to open the bookmark pane when the document is loaded?](./how-to/open-bookmark-ts.md) -* [How to open the thumbnail pane when the document is loaded?](./how-to/open-thumbnail.md) -* [How to get the annotation when it is overlapped with another annotation on its selection?](./how-to/overlapped-annotation.md) -* [How to get the page render started and completed event?](./how-to/pagerenderstarted-pagerendercompleted-ts.md) -* [How to print the PDF document silently?](./how-to/print-document.md) -* [How to resolve the `Unable to find an entry point named 'FreeExportedValues' in DLL 'pdfium''?](./how-to/resolve-unable-to-find-an-entry-point-error.md) -* [How to restrict the zooming in mobile mode?](./how-to/restricting-zoom-in-mobile-mode-ts.md) -* [How to save the PDF document to database or URL?](./how-to/save-pdf-document-to-url.md) -* [How to select annotations in multi page?](./how-to/select-multi-page-annotations.md) -* [How to show custom stamp item in the stamp annotation?](./how-to/show-custom-stamp-item-ts.md) -* [How to show or hide a particular annotation?](./how-to/show-hide-annotation-ts.md) -* [How to get the signature selected and unselected event?](./how-to/signatureselect-signatureunselect-ts.md) -* [How to unload the PDF document from the viewer?](./how-to/unload-document.md) +* [How to add annotation in text search in react?](./how-to/add-annotation-in-text-search-ts) +* [How to add custom header to the PDF Viewer ajax request?](./how-to/add-header-value) +* [How to add a save button to PDF Viewer toolbar?](./how-to/add-save-button-ts) +* [How to customize the annotation selectors?](./how-to/annotation-selectors) +* [How to change the author name of the annotation dynamically?](./how-to/change-author-name-using-annotation-settings) +* [How to clear all the annotations from the PDF document?](./how-to/clear-annotations) +* [How to configure the annotation selector settings?](./how-to/configure-annotationselector-setting-ts) +* [What are the supported conformance or standards of PDF Viewer?](./how-to/conformance) +* [How to control the visibility of the annotation?](./how-to/control-annotation-visibility-ts) +* [How to convert the PDF library bounds to PDF viewer bounds?](./how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds-ts) +* [How to create PDF Viewer service using ASP.NET Core?](./how-to/create-pdfviewer-service-core) +* [How to create PDF viewer web service using ASP.NET MVC?](./how-to/create-pdfviewer-service) +* [How to customize the context menu in PDF Viewer?](./how-to/custom-context-menu) +* [How to add custom font in handwritten signature?](./how-to/custom-font-signature-field-ts) +* [How to add custom fonts for form fields and free text annotations?](./how-to/custom-fonts-ts) +* [How to customize text search highlight color in PDF Viewer?](./how-to/customize-text-search-color) +* [How to delete a specific annotation from the PDF document?](./how-to/delete-annotation) +* [How to disable the context menu?](./how-to/disable-context-menu) +* [How to disable tile rendering in PDF Viewer?](./how-to/disable-tile-rendering) +* [How to display custom tooltip for annotation?](./how-to/display-custom-tool-tip-for-annotation) +* [How to get the download start event?](./how-to/download-start-event-ts) +* [How to enable or disable the local storage?](./how-to/enable-local-storage-ts) +* [Enable the resizer for text markup annotation?](./how-to/enable-resize) +* [How to enable or disable the text selection?](./how-to/enable-text-selection-ts) +* [How to export the PDF pages as images?](./how-to/export-as-image-ts) +* [How to extract text from the PDF document?](./how-to/extract-text-completed-ts) +* [How to extract text from a specific region?](./how-to/extract-text-option-ts) +* [How to extract text from the PDF document?](./how-to/extract-text-ts) +* [How to find the text in the PDF document asynchronously?](./how-to/find-text-async-ts) +* [How to get the base64 string of the loaded document?](./how-to/get-base64-ts) +* [How to get the page information of the loaded document?](./how-to/get-page-info-ts) +* [How to perform highlight, underline, and strikethrough for the selected text?](./how-to/highlight-underline-strikeout-text) +* [How to identify the added annotation and its mode?](./how-to/identify-added-annotation-mode) +* [How to import annotations from the PDF document?](./how-to/import-annotations) +* [How to import and export annotations in PDF Viewer?](./how-to/import-export-annotation-ts) +* [How to load a PDF document in PDF Viewer?](./how-to/load-document) +* [How to set the minimum and maximum zoom percentage?](./how-to/min-max-zoom-ts) +* [How to open the bookmark pane when the document is loaded?](./how-to/open-bookmark-ts) +* [How to open the thumbnail pane when the document is loaded?](./how-to/open-thumbnail) +* [How to get the annotation when it is overlapped with another annotation on its selection?](./how-to/overlapped-annotation) +* [How to get the page render started and completed event?](./how-to/pagerenderstarted-pagerendercompleted-ts) +* [How to print the PDF document silently?](./how-to/print-document) +* [How to resolve the `Unable to find an entry point named 'FreeExportedValues' in DLL 'pdfium''?](./how-to/resolve-unable-to-find-an-entry-point-error) +* [How to restrict the zooming in mobile mode?](./how-to/restricting-zoom-in-mobile-mode-ts) +* [How to save the PDF document to database or URL?](./how-to/save-pdf-document-to-url) +* [How to select annotations in multi page?](./how-to/select-multi-page-annotations) +* [How to show custom stamp item in the stamp annotation?](./how-to/show-custom-stamp-item-ts) +* [How to show or hide a particular annotation?](./how-to/show-hide-annotation-ts) +* [How to get the signature selected and unselected event?](./how-to/signatureselect-signatureunselect-ts) +* [How to unload the PDF document from the viewer?](./how-to/unload-document) diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-fonts.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-fonts.md index 80cea180e..1cfdc2985 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-fonts.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/custom-fonts.md @@ -10,6 +10,12 @@ domainurl: ##DomainURL## # Add custom fonts in PDF Viewer +The React PDF Viewer supports loading, editing, and saving custom fonts in form fields such as text boxes, list boxes, and drop-downs by using the customFonts property. Add the required TTF files to the resource URL directory used by the viewer so they can be loaded at runtime and used in forms. + +## Integrating Custom Font Collections into Form Fields in PDF Viewer + +To ensure proper rendering and saving of form fields that use custom fonts, especially when the fonts are not installed on the system, place the TTF files in the resource URL path referenced by the viewer and specify their names through the customFonts property (string array). These fonts will then be available for loading, editing, and saving form fields in the PDF. + To use custom fonts in the Syncfusion PDF Viewer, add the custom TTF files to the resource URL directory and configure the viewer to load them. Specify font file names using the `customFonts` property as an array of names. Steps to add custom fonts @@ -32,4 +38,6 @@ Steps to add custom fonts ``` {% endraw %} -These steps integrate custom fonts into PDF documents displayed in the PDF Viewer. \ No newline at end of file +These steps integrate custom fonts into PDF documents displayed in the PDF Viewer. + +> Note: If a form field (TextBox, ListBox, DropDown) using a custom font has text larger than the field’s bounds, the downloaded PDF may render incorrectly in browsers or third‑party viewers. It displays correctly in the Syncfusion PDF Viewer. To avoid this, use a font size that fits within the field or enlarge the field before saving/downloading. \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/magnification.md b/Document-Processing/PDF/PDF-Viewer/react/magnification.md index bd3724b00..0cd419cf2 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/magnification.md +++ b/Document-Processing/PDF/PDF-Viewer/react/magnification.md @@ -82,11 +82,11 @@ root.render(); The following magnification options are available in the default toolbar of PDF Viewer, -* [**ZoomIn**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/magnification/#zoomin):- Zoom in from the current zoom value of PDF pages. -* [**ZoomOut**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/magnification/#zoomout):- Zoom out from the current zoom value of PDF pages. -* [**Zoom**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/magnification/#zoomto):- Zoom to specific zoom value of PDF pages. -* [**FitPage**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/magnification/#fittopage):- Fits the page width with in the available view port size. -* [**FitWidth**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/magnification/#fittowidth):- Fits the view port width based on the page content size. +* [**ZoomIn**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/magnification/#zoomin):- Zoom in from the current zoom value of PDF pages. +* [**ZoomOut**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/magnification/#zoomout):- Zoom out from the current zoom value of PDF pages. +* [**Zoom**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/magnification/#zoomto):- Zoom to specific zoom value of PDF pages. +* [**FitPage**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/magnification/#fittopage):- Fits the page width with in the available view port size. +* [**FitWidth**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/magnification/#fittowidth):- Fits the view port width based on the page content size. ![Alt text ](./images/zoom.png) diff --git a/Document-Processing/PDF/PDF-Viewer/react/navigation.md b/Document-Processing/PDF/PDF-Viewer/react/navigation.md index b28a24d76..0780d38fd 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/navigation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/navigation.md @@ -10,382 +10,14 @@ domainurl: ##DomainURL## # Navigation in React Pdfviewer component -The PDF Viewer supports different internal and external navigations. +The React PDF Viewer supports multiple navigation options, including toolbar controls, programmatic commands, bookmarks, thumbnails, hyperlinks, and table of contents. -## Toolbar page navigation option +Available PDF Viewer navigation options: -The default toolbar of PDF Viewer contains the following navigation options - -* [**Go to page**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/navigation/#gotopage):- Navigates to the specific page of a PDF document. -* [**Show next page**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/navigation/#gotonextpage):- Navigates to the next page of PDF a document. -* [**Show previous page**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/navigation/#gotopreviouspage):- Navigates to the previous page of a PDF document. -* [**Show first page**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/navigation/#gotofirstpage):- Navigates to the first page of a PDF document. -* [**Show last page**](https://ej2.syncfusion.com/vue/documentation/api/pdfviewer/navigation/#gotolastpage):- Navigates to the last page of a PDF document. - -You can enable/disable page navigation option in PDF Viewer using the following code snippet., - -{% tabs %} -{% highlight js tabtitle="Standalone" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import './index.css'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - return (
      -
      - {/* Render the PDF Viewer */} - - - - -
      -
      ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% highlight js tabtitle="Server-Backed" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import './index.css'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - return (
      -
      - {/* Render the PDF Viewer */} - - - - -
      -
      ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% endtabs %} - -![Alt text](./images/navigation.png) - -## Bookmark navigation - -The Bookmarks saved in PDF files are loaded and made ready for easy navigation. You can enable/disable bookmark navigation by using the following code snippet., - -{% tabs %} -{% highlight js tabtitle="Standalone" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import './index.css'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - return (
      -
      - {/* Render the PDF Viewer */} - - - - -
      -
      ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% highlight js tabtitle="Server-Backed" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import './index.css'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - return (
      -
      - {/* Render the PDF Viewer */} - - - - -
      -
      ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% endtabs %} - -![Alt text](./images/bookmark.png) - -## Thumbnail navigation - -Thumbnails is the miniature representation of actual pages in PDF files. This feature displays thumbnails of the pages and allows navigation. You can enable/disable thumbnail navigation by using the following code snippet., - -{% tabs %} -{% highlight js tabtitle="Standalone" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import './index.css'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - - return (
      -
      - {/* Render the PDF Viewer */} - - - - -
      -
      ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% highlight js tabtitle="Server-Backed" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import './index.css'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - - return (
      -
      - {/* Render the PDF Viewer */} - - - - -
      -
      ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% endtabs %} - -![Alt text](./images/thumbnail.png) - -## Hyperlink navigation - -Hyperlink navigation features enables navigation to the URLs (website links) in a PDF file. - -![Alt text](./images/link.png) - -## Table of content navigation - -Table of contents navigation allows users to navigate to different parts of a PDF file that are listed in the table of contents section. - -You can enable/disable link navigation by using the following code snippet., - -{% tabs %} -{% highlight js tabtitle="Standalone" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import './index.css'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - - return (
      -
      - {/* Render the PDF Viewer */} - - - - -
      -
      ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% highlight js tabtitle="Server-Backed" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import './index.css'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - - return (
      -
      - {/* Render the PDF Viewer */} - - - - -
      -
      ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% endtabs %} - -You can change the open state of the hyperlink in the PDF Viewer by using the following code snippet, - -{% tabs %} -{% highlight js tabtitle="Standalone" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import './index.css'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - - return (
      -
      - {/* Render the PDF Viewer */} - - - - -
      -
      ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% highlight js tabtitle="Server-Backed" %} -{% raw %} - -import * as ReactDOM from 'react-dom'; -import * as React from 'react'; -import './index.css'; -import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, - ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; - -function App() { - - return (
      -
      - {/* Render the PDF Viewer */} - - - - -
      -
      ); -} -const root = ReactDOM.createRoot(document.getElementById('sample')); -root.render(); - -{% endraw %} -{% endhighlight %} -{% endtabs %} - -![Alt text](./images/toc.png) +* [**Toolbar page navigation option**](./interactive-pdf-navigation/page-navigation):- Scroll through the pages and Use the Go to page option in the built-in toolbar. +* [**Bookmark navigation**](./interactive-pdf-navigation/bookmark-navigation):- Select a bookmark in the bookmark panel. +* [**Page Thumbnail navigation**](./interactive-pdf-navigation/page-thumbnail-navigation):- Select a page in the thumbnail panel.. +* [**Hyperlink and Table of contents navigation**](./interactive-pdf-navigation/hyperlink-navigation):- Click hyperlinks or entries in the table of contents. ## See also diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf-overview.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf-overview.md index 2eb540365..d6cbef483 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf-overview.md +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf-overview.md @@ -26,3 +26,14 @@ The Organize Pages panel supports the following actions: * **Save updates**: Review changes in real time and use **Save** or **Save As** to download the revised document. After completing the changes, apply them by selecting **Save** to overwrite the current document or **Save As** to download a new copy that retains the updated page order. + +For a full guide to Organize Pages in React, see the feature landing page: [Organize pages in React PDF Viewer](./organize-pdf). + +See also: + +- [UI interactions for Organize Pages](./organize-pdf/ui-interactions-organize-page) +- [Toolbar items for Organize Pages](./organize-pdf/toolbar-organize-page) +- [Programmatic support for Organize Pages](./organize-pdf/programmatic-support-for-organize-page) +- [Organize Pages events](./organize-pdf/organize-pdf-events) +- [Organize Pages in mobile view](./organize-pdf/organize-page-mobile-view) + diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md index 9ae00b6d9..8318e4912 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md @@ -151,6 +151,6 @@ root.render(); ## Related event documentation -- Overall Viewer events: [Event](../event.md) -- Annotation events: [Annotation events](../annotations/annotation-event.md) -- Form designer events: [Form field events](../form-designer/form-field-events.md) \ No newline at end of file +- Overall Viewer events: [Event](../events) +- Annotation events: [Annotation events](../annotations/annotation-event) +- Form designer events: [Form field events](../form-designer/form-field-events) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/overview.md b/Document-Processing/PDF/PDF-Viewer/react/overview.md index a88f16b25..c016c0401 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/overview.md +++ b/Document-Processing/PDF/PDF-Viewer/react/overview.md @@ -83,7 +83,7 @@ root.render(); *[`Form Fields`](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/form-designer/create-fillable-pdf-forms/create-programmatically) - Form filling and form designing can be done. *[`Signature`](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/annotation/signature-annotation) - Hand-written and digital signatures are allowed. *[`Toolbar`](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/toolbar) - Built-in-toolbar and custom toolbars to perform user interaction of PDF Viewer functionalities. -*[`Navigation`](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/navigation) - Easy navigation with the help of bookmarks, thumbnails, hyperlinks, and table of contents. +*[`Navigation`](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/interactive-pdf-navigation/page-navigation) - Easy navigation with the help of bookmarks, thumbnails, hyperlinks, and table of contents. *[`Magnification`](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/magnification) - Fit to page, fit to width, and automatic (fits to the visible area). *[`Search`](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/text-search) - Search a text easily across the PDF document. *[`Core Interactions`](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/react/interaction-mode) - Allows scrolling, zooming, panning, selection, and page navigation. From 3c6b78c5622901766072c6aa25cf93389002ed40 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Mon, 27 Oct 2025 18:27:46 +0530 Subject: [PATCH 37/47] 984044: revert existing files --- Document-Processing-toc.html | 3 + .../PDF/PDF-Viewer/react/navigation.md | 380 +++++++++++++++++- .../PDF/PDF-Viewer/react/organize-pdf.md | 346 ++++++++++++++++ 3 files changed, 723 insertions(+), 6 deletions(-) create mode 100644 Document-Processing/PDF/PDF-Viewer/react/organize-pdf.md diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index c72b23ebb..2ce538153 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -667,6 +667,8 @@
    • To Azure Active Directory
    +
  • Toolbar
  • +
  • Navigation
  • Toolbar Customization
  • +
  • Organize Pages
  • Print
  • Download
  • Events
  • diff --git a/Document-Processing/PDF/PDF-Viewer/react/navigation.md b/Document-Processing/PDF/PDF-Viewer/react/navigation.md index 0780d38fd..14e5fb91c 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/navigation.md +++ b/Document-Processing/PDF/PDF-Viewer/react/navigation.md @@ -10,14 +10,382 @@ domainurl: ##DomainURL## # Navigation in React Pdfviewer component -The React PDF Viewer supports multiple navigation options, including toolbar controls, programmatic commands, bookmarks, thumbnails, hyperlinks, and table of contents. +The PDF Viewer supports different internal and external navigations. -Available PDF Viewer navigation options: +## Toolbar page navigation option -* [**Toolbar page navigation option**](./interactive-pdf-navigation/page-navigation):- Scroll through the pages and Use the Go to page option in the built-in toolbar. -* [**Bookmark navigation**](./interactive-pdf-navigation/bookmark-navigation):- Select a bookmark in the bookmark panel. -* [**Page Thumbnail navigation**](./interactive-pdf-navigation/page-thumbnail-navigation):- Select a page in the thumbnail panel.. -* [**Hyperlink and Table of contents navigation**](./interactive-pdf-navigation/hyperlink-navigation):- Click hyperlinks or entries in the table of contents. +The default toolbar of PDF Viewer contains the following navigation options + +* [**Go to page**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/navigation/#gotopage):- Navigates to the specific page of a PDF document. +* [**Show next page**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/navigation/#gotonextpage):- Navigates to the next page of PDF a document. +* [**Show previous page**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/navigation/#gotopreviouspage):- Navigates to the previous page of a PDF document. +* [**Show first page**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/navigation/#gotofirstpage):- Navigates to the first page of a PDF document. +* [**Show last page**](https://ej2.syncfusion.com/react/documentation/api/pdfviewer/navigation/#gotolastpage):- Navigates to the last page of a PDF document. + +You can enable/disable page navigation option in PDF Viewer using the following code snippet., + +{% tabs %} +{% highlight js tabtitle="Standalone" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
    +
    + {/* Render the PDF Viewer */} + + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
    +
    + {/* Render the PDF Viewer */} + + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% endtabs %} + +![Alt text](./images/navigation.png) + +## Bookmark navigation + +The Bookmarks saved in PDF files are loaded and made ready for easy navigation. You can enable/disable bookmark navigation by using the following code snippet., + +{% tabs %} +{% highlight js tabtitle="Standalone" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
    +
    + {/* Render the PDF Viewer */} + + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + return (
    +
    + {/* Render the PDF Viewer */} + + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% endtabs %} + +![Alt text](./images/bookmark.png) + +## Thumbnail navigation + +Thumbnails is the miniature representation of actual pages in PDF files. This feature displays thumbnails of the pages and allows navigation. You can enable/disable thumbnail navigation by using the following code snippet., + +{% tabs %} +{% highlight js tabtitle="Standalone" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + + return (
    +
    + {/* Render the PDF Viewer */} + + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + + return (
    +
    + {/* Render the PDF Viewer */} + + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% endtabs %} + +![Alt text](./images/thumbnail.png) + +## Hyperlink navigation + +Hyperlink navigation features enables navigation to the URLs (website links) in a PDF file. + +![Alt text](./images/link.png) + +## Table of content navigation + +Table of contents navigation allows users to navigate to different parts of a PDF file that are listed in the table of contents section. + +You can enable/disable link navigation by using the following code snippet., + +{% tabs %} +{% highlight js tabtitle="Standalone" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + + return (
    +
    + {/* Render the PDF Viewer */} + + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + + return (
    +
    + {/* Render the PDF Viewer */} + + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% endtabs %} + +You can change the open state of the hyperlink in the PDF Viewer by using the following code snippet, + +{% tabs %} +{% highlight js tabtitle="Standalone" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + + return (
    +
    + {/* Render the PDF Viewer */} + + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import './index.css'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, BookmarkView, + ThumbnailView, Print, TextSelection, TextSearch, Annotation, Inject } from '@syncfusion/ej2-react-pdfviewer'; + +function App() { + + return (
    +
    + {/* Render the PDF Viewer */} + + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% endtabs %} + +![Alt text](./images/toc.png) ## See also diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf.md new file mode 100644 index 000000000..f7f43882d --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf.md @@ -0,0 +1,346 @@ +--- +layout: post +title: Organize Pages in React PDF Viewer component | Syncfusion +description: Learn here all about Organize Pages in Syncfusion React PDF Viewer component of Syncfusion Essential JS 2 and more. +control: PDF Viewer +platform: document-processing +documentation: ug +domainurl: ##DomainURL## +--- + +# Organize Pages in React PDF Viewer component + +The PDF Viewer allows you to manage your PDF documents efficiently by organizing pages seamlessly. Whether you need to add new pages, remove unnecessary ones, rotate pages, move pages within the document, and copy or duplicate pages, the PDF Viewer facilitates these tasks effortlessly. + +## Getting started + +To access the organize pages feature, simply open the PDF document in the PDF Viewer and navigate to the left vertical toolbar. Look for the `Organize Pages` option to begin utilizing these capabilities. + +![Alt text](images/organize-page.png) + +The page organization support enables you to perform various actions such as rotating, rearranging, inserting, copying, and deleting pages within a PDF document using organize pages dialog. + +### Rotating PDF pages + +You can adjust the orientation of PDF pages to ensure proper alignment. The rotate icon offers the following options: + +* `Rotate clockwise`: Rotate the selected pages 90 degrees clockwise. +* `Rotate counter-clockwise`: Rotate the selected pages 90 degrees counter-clockwise. + +### Rearranging PDF pages + +You can easily change the sequence of pages within your document using the drag and drop method: + +* `Drag and drop`: Click and drag a page thumbnail to the desired position within the document, then release it to rearrange the page order. + +![Alt text](images/rotate-rearrange.gif) + +### Inserting new pages + +Effortlessly add new pages to your document with the following options: + +* `Insert blank page left`: Insert a blank page to the left of the selected page using the respective icon. +* `Insert blank page right`: Insert a blank page to the right of the selected page using the corresponding icon. + +### Deleting PDF pages + +Removing unwanted pages from your document is straight forward: + +* `Select pages to delete`: Click on the page thumbnails you wish to remove. You can select multiple pages at once. +* `Delete selected pages`: Use the delete option in the organize pages pane to remove the selected pages from the document. + +### Copying PDF pages + +Duplicate the pages within your PDF document effortlessly: + +* `Select pages to copy`: Click on the page thumbnails you wish to duplicate. Use the copy option to create duplicates. When a page is copied, the duplicate is automatically added to the right of the selected page. Multiple copies can be made using the toolbar action. + +![Alt text](images/insert-delete-copy.gif) + +### Importing a PDF Document + +Seamlessly import a PDF document into your existing document: + +* `Import PDF document`: Click the **Import Document** button to import a PDF. If a page is selected, the imported document’s thumbnail will be inserted to the right of the selected page. If multiple or no pages are selected, the thumbnail will be added as the first page. When **Save** or **Save As** is clicked, the imported PDF will be merged with the current document. You can insert a blank page to the left or right of the imported thumbnail, delete it, or drag and drop it to reposition as needed. + +![Alt text](images/import.gif) + +### Selecting all pages + +Make comprehensive adjustments by selecting all pages simultaneously. This facilitates efficient editing and formatting across the entire document. + +![Alt text](images/selectall.png) + +### Zooming Page Thumbnails + +Adjust the size of page thumbnails within the organizer panel for better visibility and precision when editing. The zoom functionality allows you to: + +* Increase or decrease the size of page thumbnails using the zoom slider +* See more details on pages when zoomed in +* View more pages simultaneously when zoomed out + +This feature is especially useful when working with documents containing complex layouts or small details that need careful examination during organization. + +![Alt text](./images/zoomOrganize.png) + +### Real-time updates + +Witness instant changes in page organization reflected within the PDF Viewer. Simply click the **Save** button to preserve your modifications. + +### SaveAs functionality + +Safeguard your edits by utilizing the **Save As** feature. This enables you to download the modified version of the PDF document for future reference, ensuring that your changes are securely stored. + +## API's supported + +**enablePageOrganizer:** This API enables or disables the page organizer feature in the PDF Viewer. By default, it is set to `true`, indicating that the page organizer is enabled. + +{% tabs %} +{% highlight js tabtitle="Standalone" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, + BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, + FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; +let pdfviewer; + +function App() { + return (
    +
    + { pdfviewer = scope; }} + id="container" + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + enablePageOrganizer={true} + style={{ 'height': '640px' }}> + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} +{% raw %} + + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, + BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, + FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; +let pdfviewer; + +function App() { + return (
    +
    + { pdfviewer = scope; }} + id="container" + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer" + enablePageOrganizer={true} + style={{ 'height': '640px' }}> + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% endtabs %} + +**isPageOrganizerOpen:** This API determines whether the page organizer dialog will be displayed automatically when a document is loaded into the PDF Viewer. By default, it is set to `false`, meaning the dialog is not displayed initially. + +{% tabs %} +{% highlight js tabtitle="Standalone" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, + BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, + FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; +let pdfviewer; + +function App() { + return (
    +
    + { pdfviewer = scope; }} + id="container" + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + isPageOrganizerOpen={true} + style={{ 'height': '640px' }}> + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} +{% raw %} + + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, + BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, + FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; +let pdfviewer; + +function App() { + return (
    +
    + { pdfviewer = scope; }} + id="container" + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer" + isPageOrganizerOpen={true} + style={{ 'height': '640px' }}> + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% endtabs %} + +**pageOrganizerSettings:** This API allows control over various page management functionalities within the PDF Viewer. It includes options to enable or disable actions such as deleting, inserting, rotating, copying, importing and rearranging pages, as well as configuring thumbnail zoom settings. By default, all these actions are enabled and standard zoom settings are applied. + +{% tabs %} +{% highlight js tabtitle="Standalone" %} +{% raw %} + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, + BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, + FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; +let pdfviewer; + +function App() { + return (
    +
    + { pdfviewer = scope; }} + id="container" + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + resourceUrl="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib" + pageOrganizerSettings = {{canDelete: true, canInsert: true, canRotate: true, canCopy: true, canRearrange: true, canImport: true, imageZoom: 1, showImageZoomingSlider: true, imageZoomMin: 1, imageZoomMax: 5}} + style={{ 'height': '640px' }}> + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% highlight js tabtitle="Server-Backed" %} +{% raw %} + + +import * as ReactDOM from 'react-dom'; +import * as React from 'react'; +import { PdfViewerComponent, Toolbar, Magnification, Navigation, LinkAnnotation, + BookmarkView, ThumbnailView, Print, TextSelection, TextSearch, Annotation, + FormFields, FormDesigner, PageOrganizer, Inject } from '@syncfusion/ej2-react-pdfviewer'; +let pdfviewer; + +function App() { + return (
    +
    + { pdfviewer = scope; }} + id="container" + documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf" + serviceUrl="https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer" + pageOrganizerSettings = {{canDelete: true, canInsert: true, canRotate: true, canCopy: true, canRearrange: true, canImport: true, imageZoom: 1, showImageZoomingSlider: true, imageZoomMin: 1, imageZoomMax: 5}} + style={{ 'height': '640px' }}> + + + +
    +
    ); +} +const root = ReactDOM.createRoot(document.getElementById('sample')); +root.render(); + +{% endraw %} +{% endhighlight %} +{% endtabs %} + +**openPageOrganizer:** This API opens the page organizer dialog within the PDF Viewer, providing access to manage PDF pages. + +``` + +``` + +```ts + +``` + +**closePageOrganizer:** This API closes the currently open page organizer dialog within the PDF Viewer, if it is present. It allows users to dismiss the dialog when done with page organization tasks. + +``` + +``` + +```ts + +``` + +## Keyboard shortcuts + +The following keyboard shortcuts are available at the organize pages dialog. + +* **Ctrl+Z** : Undo the last action performed. +* **Ctrl+Y** : Redo the action that was undone +* **Ctrl+Scroll** : Zoom in and zoom out page thumbnails for better visibility. + +![Alt text](images/undo-redo.png) + +#### Conclusion + +With the Organize Pages feature in the PDF Viewer, managing your PDF documents has never been easier. Whether you are adding new content, adjusting page orientation, moving the pages, duplicating the pages, or removing unnecessary pages, this feature provides the tools you need to streamline your document management workflow. Explore these capabilities today and take control of your PDF documents with ease! + +[View sample in GitHub](https://github.com/SyncfusionExamples/react-pdf-viewer-examples/tree/master/How%20to/Organize%20pdf) \ No newline at end of file From 9459ae0196c17e787c1947e8ab55219eabc60143 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Mon, 27 Oct 2025 18:42:45 +0530 Subject: [PATCH 38/47] 984044: spell check --- .../PDF/PDF-Viewer/react/annotation/annotation-event.md | 2 +- Document-Processing/PDF/PDF-Viewer/react/download.md | 2 +- Document-Processing/PDF/PDF-Viewer/react/feature-module.md | 2 +- .../PDF-Viewer/react/form-designer/create-programmatically.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md index 4e8f959a3..edecf4606 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotation-event.md @@ -8,7 +8,7 @@ documentation: ug domainurl: ##DomainURL## --- -# Annotations Events in React Pdf viewer control +# Annotations Events in React PDF Viewer control The PDF Viewer component triggers various events based on user interactions and changes in the component's state. These events can be used to perform actions when a specific event occurs. This section describes the events available in the PDF Viewer component. diff --git a/Document-Processing/PDF/PDF-Viewer/react/download.md b/Document-Processing/PDF/PDF-Viewer/react/download.md index 89d920f1f..aee7e65e2 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/download.md +++ b/Document-Processing/PDF/PDF-Viewer/react/download.md @@ -7,7 +7,7 @@ platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Download in React Pdf viewer control +# Download in React PDF Viewer control The PDF Viewer supports downloading the loaded PDF file. You can enable/disable the download using the following code snippet. diff --git a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md index ac8e1c76b..7e636a8bb 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md +++ b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md @@ -8,7 +8,7 @@ documentation: ug domainurl: ##DomainURL## --- -# Feature module in React Pdf viewer Control +# Feature module in React PDF Viewer Control The PDF Viewer features are segregated into individual feature-wise modules to enable selectively referencing in the application. The required modules should be injected to extend its functionality. The following are the selective modules of PDF Viewer that can be included as required: diff --git a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md index 087cc04df..e8bd923b0 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md +++ b/Document-Processing/PDF/PDF-Viewer/react/form-designer/create-programmatically.md @@ -7,7 +7,7 @@ platform: document-processing documentation: ug --- -# Create programmatically in React Pdf viewer control +# Create programmatically in React PDF Viewer control The PDF Viewer component provides options to add, edit, and delete form fields. The supported form field types are: From e42b0498f09a0fa863a8820064bbd707f7631a67 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Mon, 27 Oct 2025 22:35:26 +0530 Subject: [PATCH 39/47] 984044: CI issue --- .../user-interaction-with-form-fields.md | 2 +- .../user-interaction-with-form-fields.md | 2 +- .../annotation/annotations-in-mobile-view.md | 2 +- .../how-to/add-annotation-in-text-search.md | 6 +++--- .../PDF-Viewer/react/images/ink-annotation.png | Bin 0 -> 47150 bytes 5 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 Document-Processing/PDF/PDF-Viewer/react/images/ink-annotation.png diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md index ed485563d..9bdd0bfa0 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md @@ -9,7 +9,7 @@ documentation: ug --- -# User interaction with form fields +# Form Field Interaction in ASP.NET Core PDF Viewer The PDF viewer control provides the option for interaction with Form Fields such as Drag and resize. you can draw a Form Field dynamically by clicking the Form Field icon on the toolbar and draw it in the PDF document. The Form Fields type supported by the PDF Viewer Control are: diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md index c0a903c7f..d6dc1a69e 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md @@ -9,7 +9,7 @@ documentation: ug --- -# User interaction with form fields +# Working with Form Fields in ASP.NET MVC PDF Viewer The PDF viewer control provides the option for interaction with Form Fields such as Drag and resize. you can draw a Form Field dynamically by clicking the Form Field icon on the toolbar and draw it in the PDF document. The Form Fields type supported by the PDF Viewer Control are: diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md index 95f063dc6..6df7ec4d5 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md @@ -81,7 +81,7 @@ domainurl: ##DomainURL## **Step 2:** The ink annotation appears on the page. -![Ink annotation drawn on the page](../how-to/images/ink-annotation.png) +![Ink annotation drawn on the page](../images/ink-annotation.png) ## Change annotation properties (before adding) diff --git a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md index b5508b277..27933637d 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md +++ b/Document-Processing/PDF/PDF-Viewer/react/how-to/add-annotation-in-text-search.md @@ -1,13 +1,13 @@ --- layout: post -title: Add Rectangle Annotation via Text Search in React PDF Viewer -description: Learn to add rectangle annotations using text search bounds in the React PDF Viewer component, including initialization and search controls. +title: Add Rectangle Annotation via Text Search in Syncfusion React PDF Viewer +description: Discover how to add rectangle annotations via text search in the Syncfusion React PDF Viewer for a seamless mobile experience. control: PDF Viewer platform: document-processing documentation: ug --- -# Programmatically Add Rectangle Annotations Based on Text Search in PDF Viewer +# Add Rectangle Annotations via Text Search in PDF Viewer A concise guide to adding rectangle annotations at highlighted text search results in the React PDF Viewer to visually emphasize matches and improve readability. diff --git a/Document-Processing/PDF/PDF-Viewer/react/images/ink-annotation.png b/Document-Processing/PDF/PDF-Viewer/react/images/ink-annotation.png new file mode 100644 index 0000000000000000000000000000000000000000..163a1130ef1b5908bd366a9f244620587439323a GIT binary patch literal 47150 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 _jQBk`Ju& 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 buYJwtFFD84CYTS?fj`Fj=6c0Cb`k#vD+@?; literal 0 HcmV?d00001 From d5e10cd146722b950d9bb783ec03fc8306a56346 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Tue, 28 Oct 2025 09:09:08 +0530 Subject: [PATCH 40/47] 984044: CI failure --- .../formdesigner/user-interaction-with-form-fields.md | 3 +-- .../formdesigner/user-interaction-with-form-fields.md | 3 +-- .../PDF-Viewer/react/annotation/annotations-in-mobile-view.md | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md index 9bdd0bfa0..8ec4c4bc3 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md @@ -1,10 +1,9 @@ --- layout: post -title: User Interaction With Form Fields in ASP.NET Core Pdfviewer Component +title: User Interaction With Form Fields in Syncfusion ASP.NET Core PDF Viewer Component description: Learn here all about User Interaction With Form Fields in Syncfusion ASP.NET Core Pdfviewer component of Syncfusion Essential JS 2 and more. platform: document-processing control: User Interaction With Form Fields -publishingplatform: ASP.NET Core documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md index d6dc1a69e..2ae196522 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md @@ -1,10 +1,9 @@ --- layout: post -title: User Interaction With Form Fields in ASP.NET MVC Pdfviewer Component +title: User Interaction With Form Fields in Syncfusion ASP.NET MVC PDF Viewer Component description: Learn here all about User Interaction With Form Fields in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. platform: document-processing control: User Interaction With Form Fields -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md index 6df7ec4d5..deb9a7eb2 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md +++ b/Document-Processing/PDF/PDF-Viewer/react/annotation/annotations-in-mobile-view.md @@ -1,7 +1,7 @@ --- layout: post title: Annotations mobileView in React PDF Viewer control | Syncfusion -description: Learn how to use annotations in mobile view with the Syncfusion React PDF Viewer (Essential JS 2). +description: Learn to add rectangle annotations via text search in Syncfusion React PDF Viewer for enhanced mobile usability. platform: document-processing control: PDF Viewer documentation: ug From 7695455621367f81c36d796857ae508722828343 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Tue, 28 Oct 2025 09:50:35 +0530 Subject: [PATCH 41/47] 984044: CI mvc core --- .../formdesigner/user-interaction-with-form-fields.md | 2 +- .../formdesigner/user-interaction-with-form-fields.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md index 8ec4c4bc3..cec033fcf 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md @@ -1,6 +1,6 @@ --- layout: post -title: User Interaction With Form Fields in Syncfusion ASP.NET Core PDF Viewer Component +title: Interact with Form Fields in Syncfusion ASP.NET Core PDF Viewer description: Learn here all about User Interaction With Form Fields in Syncfusion ASP.NET Core Pdfviewer component of Syncfusion Essential JS 2 and more. platform: document-processing control: User Interaction With Form Fields diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md index 2ae196522..876d9e1ea 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md @@ -1,6 +1,6 @@ --- layout: post -title: User Interaction With Form Fields in Syncfusion ASP.NET MVC PDF Viewer Component +title: Form Field Interaction in Syncfusion ASP.NET MVC PDF Viewer description: Learn here all about User Interaction With Form Fields in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. platform: document-processing control: User Interaction With Form Fields From 99a22b67a53748c3e55389297522871878b84a39 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Tue, 28 Oct 2025 10:01:22 +0530 Subject: [PATCH 42/47] 984044: unwanted tag removed --- Document-Processing-toc.html | 1 - 1 file changed, 1 deletion(-) diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index 2ce538153..ea97131a8 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -715,7 +715,6 @@

  • Form Field events
  • Custom fonts
  • -
  • Form Filling
  • Organize Pages From 362dc8b52157de45c4b73d4f1fbe471f370fa953 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Tue, 28 Oct 2025 11:30:57 +0530 Subject: [PATCH 43/47] 984044: CI error --- Document-Processing-toc.html | 6 +- .../programmatically-work-with-form-field.md | 112 ------------- .../user-interaction-with-form-fields.md | 111 ------------- .../programmatically-work-with-form-field.md | 151 ------------------ .../user-interaction-with-form-fields.md | 98 ------------ .../programmatically-work-with-form-field.md | 126 --------------- .../user-interaction-with-form-fields.md | 89 ----------- .../PDF/PDF-Viewer/react/events.md | 2 +- .../PDF/PDF-Viewer/react/feature-module.md | 2 +- .../PDF/PDF-Viewer/react/form-filling.md | 2 +- .../react/organize-pdf/organize-pdf-events.md | 2 +- 11 files changed, 7 insertions(+), 694 deletions(-) delete mode 100644 Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md delete mode 100644 Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md delete mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/programmatically-work-with-form-field.md delete mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md delete mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/programmatically-work-with-form-field.md delete mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index ea97131a8..832666f55 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -690,7 +690,7 @@
  • Magnification
  • Accessibility
  • Text Search
  • -
  • Annotation +
  • Annotations
  • Interaction Mode
  • diff --git a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md b/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md deleted file mode 100644 index dd6c5e100..000000000 --- a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/programmatically-work-with-form-field.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -layout: post -title: Programmatically work with form field in Angular Pdfviewer component | Syncfusion -description: Learn here all about Programmatically work with form field in Syncfusion Angular Pdfviewer component of Syncfusion Essential JS 2 and more. -platform: document-processing -control: Programmatically work with form field -documentation: ug -domainurl: ##DomainURL## ---- - -# Programmatically work with form field - -The PDF Viewer control provides the option to add, edit and delete the Form Fields. The Form Fields type supported by the PDF Viewer Control are: - - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField - -## Add a form field to PDF document programmatically - -Using addFormField method, the form fields can be added to the PDF document programmatically. We need to pass two parameters in this method. They are Form Field Type and Properties of Form Field Type. To add form field programmatically, Use the following code. - -{% tabs %} -{% highlight ts tabtitle="app.component.ts" %} -{% include code-snippet/pdfviewer/angular/addformfield-cs2/src/app.component.ts %} -{% endhighlight %} - -{% highlight ts tabtitle="main.ts" %} -{% include code-snippet/pdfviewer/angular/addformfield-cs2/src/main.ts %} -{% endhighlight %} -{% endtabs %} - -{% previewsample "Document-Processing/samples/pdfviewer/angular/addformfield-cs2/index.html" %} - -## Edit/Update form field programmatically - -Using updateFormField method, Form Field can be updated programmatically. We should get the Form Field object/Id from FormFieldCollections property that you would like to edit and pass it as a parameter to updateFormField method. The second parameter should be the properties that you would like to update for Form Field programmatically. We have updated the value and background Color properties of Textbox Form Field. - -{% tabs %} -{% highlight ts tabtitle="app.component.ts" %} -{% include code-snippet/pdfviewer/angular/updateformfield-cs2/src/app.component.ts %} -{% endhighlight %} - -{% highlight ts tabtitle="main.ts" %} -{% include code-snippet/pdfviewer/angular/updateformfield-cs2/src/main.ts %} -{% endhighlight %} -{% endtabs %} - -{% previewsample "Document-Processing/samples/pdfviewer/angular/updateformfield-cs2/index.html" %} - -## Delete form field programmatically - -Using deleteFormField method, the form field can be deleted programmatically. We should retrieve the Form Field object/Id from FormFieldCollections property that you would like to delete and pass it as a parameter to deleteFormField method. To delete a Form Field programmatically, use the following code. - -{% tabs %} -{% highlight ts tabtitle="app.component.ts" %} -{% include code-snippet/pdfviewer/angular/deleteformfield-cs2/src/app.component.ts %} -{% endhighlight %} - -{% highlight ts tabtitle="main.ts" %} -{% include code-snippet/pdfviewer/angular/deleteformfield-cs2/src/main.ts %} -{% endhighlight %} -{% endtabs %} - -{% previewsample "Document-Processing/samples/pdfviewer/angular/deleteformfield-cs2/index.html" %} - -## Saving the form fields - -When the download icon is selected on the toolbar, the Form Fields will be saved in the PDF document and this action will not affect the original document. Refer the below GIF for further reference. - -![Alt text](../images/saveformfield.gif) - -You can invoke download action using following code snippet. - -```html - - -``` - -## Printing the form fields - -When the print icon is selected on the toolbar, the PDF document will be printed along with the Form Fields added to the pages and this action will not affect the original document. Refer the below GIF for further reference. - -![Alt text](../images/printformfield.gif) - -You can invoke print action using the following code snippet., - -```html - - -``` - -## Open the existing PDF document - -We can open the already saved PDF document contains Form Fields in it by clicking the open icon in the toolbar. Refer the below GIF for further reference. - -![Alt text](../images/openexistingpdf.gif) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md deleted file mode 100644 index 5d19a7fa9..000000000 --- a/Document-Processing/PDF/PDF-Viewer/angular/formdesigner/user-interaction-with-form-fields.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -layout: post -title: User interaction in Angular Pdfviewer component | Syncfusion -description: Learn here all about User interaction with form fields in Syncfusion Angular Pdfviewer component of Syncfusion Essential JS 2 and more. -platform: document-processing -control: User interaction with form fields -documentation: ug -domainurl: ##DomainURL## ---- - -# User interaction with form fields - -The PDF viewer control provides the option for interaction with Form Fields such as Drag and resize. you can draw a Form Field dynamically by clicking the Form Field icon on the toolbar and draw it in the PDF document. The Form Fields type supported by the PDF Viewer Control are: - - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField - -## Enable or Disable form designer toolbar - -We should inject FormDesigner module and set enableFormDesignerToolbar as true to enable the Form designer icon on the toolbar. By default, enableFormDesignerToolbar is set as true. Use the following code to inject FormDesigner module and to enable the enableFormDesignerToolbar property. - -```html -import { ViewChild } from '@angular/core'; -import { Component, OnInit } from '@angular/core'; -import { PdfViewerComponent, LinkAnnotationService, BookmarkViewService, - MagnificationService, ThumbnailViewService, ToolbarService, - NavigationService, TextSearchService, TextSelectionService, - PrintService, AnnotationService, FormDesignerService, - FormFieldsService - } from '@syncfusion/ej2-angular-pdfviewer'; - -@Component({ - selector: 'app-root', - // Specifies the template string for the PDF Viewer component. - template: `
    - - -
    `, - providers: [ LinkAnnotationService, BookmarkViewService, MagnificationService, - ThumbnailViewService, ToolbarService, NavigationService, - TextSearchService, TextSelectionService, PrintService, - AnnotationService, FormDesignerService, FormFieldsService] -}) -export class AppComponent implements OnInit { - @ViewChild('pdfviewer') - public pdfviewerControl: PdfViewerComponent; - public service: string = 'https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer'; - public document: string = 'FormDesigner.pdf'; - ngOnInit(): void { - } -} -``` - -## Add the form field dynamically - -Click the Form Field icon on the toolbar and then click on to the PDF document to draw a Form Field. Refer the below GIF for further reference. - -![Alt text](../images/addformfield.gif) - -## Drag the form field - -We provide options to drag the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. - -![Alt text](../images/dragformfield.gif) - -## Resize the form field - -We provide options to resize the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. - -![Alt text](../images/resizeformfield.gif) - -## Edit or Update the form field dynamically - -The properties of the Form Fields can be edited using the Form Field Properties window. It can be opened by selecting the Properties option in the context menu that appears on the right by clicking the Form Field object. Refer the below image for the properties available to customize the appearance of the Form Field. - -![Alt text](../images/generalproperties.png) - -![Alt text](../images/appearanceproperties.png) - -![Alt text](../images/dropdownproperties.png) - -## Clipboard operation with form field - -The PDF Viewer control supports the clipboard operations such as cut, copy and paste for Form Fields. You can right click on the Form Field object to view the context menu and select to the clipboard options that you would like to perform. Refer the below image for the options in the context menu. - -![Alt text](../images/clipboardformfield.png) - -## Undo and Redo - -We provided support to undo/redo the Form Field actions that are performed at runtime. Use the following code example to perform undo/redo actions. - -```html - - -``` diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/programmatically-work-with-form-field.md b/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/programmatically-work-with-form-field.md deleted file mode 100644 index ad3cb3e52..000000000 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/programmatically-work-with-form-field.md +++ /dev/null @@ -1,151 +0,0 @@ ---- -layout: post -title: Programmatically Work With Form Field in ASP.NET Core Pdfviewer Component -description: Learn here all about Programmatically Work With Form Field in Syncfusion ASP.NET Core Pdfviewer component of Syncfusion Essential JS 2 and more. -platform: document-processing -control: Programmatically Work With Form Field -publishingplatform: ASP.NET Core -documentation: ug ---- - - -# Programmatically work with form field - -The PDF Viewer control provides the option to add, edit and delete the Form Fields. The Form Fields type supported by the PDF Viewer Control are: - - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField - -## Add a form field to PDF document programmatically - -Using addFormField method, the form fields can be added to the PDF document programmatically. We need to pass two parameters in this method. They are Form Field Type and Properties of Form Field Type. To add form field programmatically, Use the following code. - -```html -
    - - -
    - - -``` - -## Edit/Update form field programmatically - -Using updateFormField method, Form Field can be updated programmatically. We should get the Form Field object/Id from FormFieldCollections property that you would like to edit and pass it as a parameter to updateFormField method. The second parameter should be the properties that you would like to update for Form Field programmatically. We have updated the value and background Color properties of Textbox Form Field. - -```html -
    - - -
    - - -``` - -## Delete form field programmatically - -Using deleteFormField method, the form field can be deleted programmatically. We should retrieve the Form Field object/Id from FormFieldCollections property that you would like to delete and pass it as a parameter to deleteFormField method. To delete a Form Field programmatically, use the following code. - -```html -
    - - -
    - - -``` - -## Saving the form fields - -When the download icon is selected on the toolbar, the Form Fields will be saved in the PDF document and this action will not affect the original document. Refer the below GIF for further reference. - -![Alt text](../images/saveformfield.gif) - -You can invoke download action using following code snippet. - -```html -
    - - -
    - - -``` - -## Printing the form fields - -When the print icon is selected on the toolbar, the PDF document will be printed along with the Form Fields added to the pages and this action will not affect the original document. Refer the below GIF for further reference. - -![Alt text](../images/printformfield.gif) - -You can invoke print action using the following code snippet., - -```html -
    - - -
    - - -``` - -## Open the existing PDF document - -We can open the already saved PDF document contains Form Fields in it by clicking the open icon in the toolbar. Refer the below GIF for further reference. - -![Alt text](../images/openexistingpdf.gif) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md deleted file mode 100644 index cec033fcf..000000000 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-core/formdesigner/user-interaction-with-form-fields.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -layout: post -title: Interact with Form Fields in Syncfusion ASP.NET Core PDF Viewer -description: Learn here all about User Interaction With Form Fields in Syncfusion ASP.NET Core Pdfviewer component of Syncfusion Essential JS 2 and more. -platform: document-processing -control: User Interaction With Form Fields -documentation: ug ---- - - -# Form Field Interaction in ASP.NET Core PDF Viewer - -The PDF viewer control provides the option for interaction with Form Fields such as Drag and resize. you can draw a Form Field dynamically by clicking the Form Field icon on the toolbar and draw it in the PDF document. The Form Fields type supported by the PDF Viewer Control are: - - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField - -## Enable or Disable form designer toolbar - -We should inject FormDesigner module and set enableFormDesignerToolbar as true to enable the Form designer icon on the toolbar. By default, enableFormDesignerToolbar is set as true. Use the following code to inject FormDesigner module and to enable the enableFormDesignerToolbar property. - -```html -
    - - -
    -``` - -## Add the form field dynamically - -Click the Form Field icon on the toolbar and then click on to the PDF document to draw a Form Field. Refer the below GIF for further reference. - -![Alt text](../images/addformfield.gif) - -## Drag the form field - -We provide options to drag the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. - -![Alt text](../images/dragformfield.gif) - -## Resize the form field - -We provide options to resize the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. - -![Alt text](../images/resizeformfield.gif) - -## Edit or Update the form field dynamically - -The properties of the Form Fields can be edited using the Form Field Properties window. It can be opened by selecting the Properties option in the context menu that appears on the right by clicking the Form Field object. Refer the below image for the properties available to customize the appearance of the Form Field. - -![Alt text](../images/generalproperties.png) - -![Alt text](../images/appearanceproperties.png) - -![Alt text](../images/dropdownproperties.png) - -## Clipboard operation with form field - -The PDF Viewer control supports the clipboard operations such as cut, copy and paste for Form Fields. You can right click on the Form Field object to view the context menu and select to the clipboard options that you would like to perform. Refer the below image for the options in the context menu. - -![Alt text](../images/clipboardformfield.png) - -## Undo and Redo - -We provided support to undo/redo the Form Field actions that are performed at runtime. Use the following code example to perform undo/redo actions. - -```html - - -
    - - -
    - -``` \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/programmatically-work-with-form-field.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/programmatically-work-with-form-field.md deleted file mode 100644 index 0c6d7d883..000000000 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/programmatically-work-with-form-field.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -layout: post -title: Programmatically Work With Form Field in ASP.NET MVC Pdfviewer Component -description: Learn here all about Programmatically Work With Form Field in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. -platform: document-processing -control: Programmatically Work With Form Field -publishingplatform: ASP.NET MVC -documentation: ug ---- - - -# Programmatically work with form field - -The PDF Viewer control provides the option to add, edit and delete the Form Fields. The Form Fields type supported by the PDF Viewer Control are: - - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField - -## Add a form field to PDF document programmatically - -Using addFormField method, the form fields can be added to the PDF document programmatically. We need to pass two parameters in this method. They are Form Field Type and Properties of Form Field Type. To add form field programmatically, Use the following code. - -```html - -
    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("FormDesigner.pdf").DocumentLoad("documentLoad").DownloadEnd("documentLoad").Render() -
    - -``` - -## Edit/Update form field programmatically - -Using updateFormField method, Form Field can be updated programmatically. We should get the Form Field object/Id from FormFieldCollections property that you would like to edit and pass it as a parameter to updateFormField method. The second parameter should be the properties that you would like to update for Form Field programmatically. We have updated the value and background Color properties of Textbox Form Field. - -```html - -
    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("FormDesigner.pdf").DocumentLoad("documentLoad").DownloadEnd("documentLoad").Render() -
    - -``` - -## Delete form field programmatically - -Using deleteFormField method, the form field can be deleted programmatically. We should retrieve the Form Field object/Id from FormFieldCollections property that you would like to delete and pass it as a parameter to deleteFormField method. To delete a Form Field programmatically, use the following code. - -```html - -
    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("FormDesigner.pdf").DocumentLoad("documentLoad").DownloadEnd("documentLoad").Render() -
    - -``` - -## Saving the form fields - -When the download icon is selected on the toolbar, the Form Fields will be saved in the PDF document and this action will not affect the original document. Refer the below GIF for further reference. - -![Alt text](../images/saveformfield.gif) - -You can invoke download action using following code snippet. - -```html -
    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableDownload(true).DocumentPath("Hive_Succinctly.pdf").Render() -
    - - -``` - -## Printing the form fields - -When the print icon is selected on the toolbar, the PDF document will be printed along with the Form Fields added to the pages and this action will not affect the original document. Refer the below GIF for further reference. - -![Alt text](../images/printformfield.gif) - -You can invoke print action using the following code snippet., - -```html -
    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnablePrint(true).DocumentPath("Hive_Succinctly.pdf").Render() -
    - - -``` - -## Open the existing PDF document - -We can open the already saved PDF document contains Form Fields in it by clicking the open icon in the toolbar. Refer the below GIF for further reference. - -![Alt text](../images/openexistingpdf.gif) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md deleted file mode 100644 index 876d9e1ea..000000000 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -layout: post -title: Form Field Interaction in Syncfusion ASP.NET MVC PDF Viewer -description: Learn here all about User Interaction With Form Fields in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. -platform: document-processing -control: User Interaction With Form Fields -documentation: ug ---- - - -# Working with Form Fields in ASP.NET MVC PDF Viewer - -The PDF viewer control provides the option for interaction with Form Fields such as Drag and resize. you can draw a Form Field dynamically by clicking the Form Field icon on the toolbar and draw it in the PDF document. The Form Fields type supported by the PDF Viewer Control are: - - * Textbox - * Password - * CheckBox - * RadioButton - * ListBox - * DropDown - * SignatureField - * InitialField - -## Enable or Disable form designer toolbar - -We should inject FormDesigner module and set enableFormDesignerToolbar as true to enable the Form designer icon on the toolbar. By default, enableFormDesignerToolbar is set as true. Use the following code to inject FormDesigner module and to enable the enableFormDesignerToolbar property. - -```html -
    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableFormDesignerToolbar(true).DocumentPath("Hive_Succinctly.pdf").Render() -
    - -``` - -## Add the form field dynamically - -Click the Form Field icon on the toolbar and then click on to the PDF document to draw a Form Field. Refer the below GIF for further reference. - -![Alt text](../images/addformfield.gif) - -## Drag the form field - -We provide options to drag the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. - -![Alt text](../images/dragformfield.gif) - -## Resize the form field - -We provide options to resize the Form Field which is currently selected in the PDF document. Refer the below GIF for further reference. - -![Alt text](../images/resizeformfield.gif) - -## Edit or Update the form field dynamically - -The properties of the Form Fields can be edited using the Form Field Properties window. It can be opened by selecting the Properties option in the context menu that appears on the right by clicking the Form Field object. Refer the below image for the properties available to customize the appearance of the Form Field. - -![Alt text](../images/generalproperties.png) - -![Alt text](../images/appearanceproperties.png) - -![Alt text](../images/dropdownproperties.png) - -## Clipboard operation with form field - -The PDF Viewer control supports the clipboard operations such as cut, copy and paste for Form Fields. You can right click on the Form Field object to view the context menu and select to the clipboard options that you would like to perform. Refer the below image for the options in the context menu. - -![Alt text](../images/clipboardformfield.png) - -## Undo and Redo - -We provided support to undo/redo the Form Field actions that are performed at runtime. Use the following code example to perform undo/redo actions. - -```html - - -
    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("Hive_Succinctly.pdf").Render() -
    - -``` \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/react/events.md b/Document-Processing/PDF/PDF-Viewer/react/events.md index 7024bb78d..d6fece65f 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/events.md +++ b/Document-Processing/PDF/PDF-Viewer/react/events.md @@ -1864,6 +1864,6 @@ root.render(); See also: -- [Annotation events](./annotations/annotation-event) +- [Annotation events](./annotation/annotation-event) - [Form field events](./form-designer/form-field-events) - [Organize PDF events](./organize-pdf/organize-pdf-events) diff --git a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md index 7e636a8bb..28e4638d0 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md +++ b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md @@ -23,7 +23,7 @@ The available PDF Viewer modules are: * [**TextSelection**](./textselection): Select and copy text from the document. * [**TextSearch**](./text-search): Search for text across the document. * [**Print**](./print): Print the entire document or specific pages directly from the browser. -* [**Annotation**](./annotations/text-markup-annotation): Add and edit annotations. +* [**Annotation**](./annotation/text-markup-annotation): Add and edit annotations. * [**FormFields**](./form-designer/create-programmatically): Work with form fields in the document. * [**FormDesigner**](./form-designer/create-programmatically): Add or edit form fields in the document. diff --git a/Document-Processing/PDF/PDF-Viewer/react/form-filling.md b/Document-Processing/PDF/PDF-Viewer/react/form-filling.md index ea421b2eb..c50071a9d 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/form-filling.md +++ b/Document-Processing/PDF/PDF-Viewer/react/form-filling.md @@ -95,5 +95,5 @@ For more information, see the [Form fields documentation](https://help.syncfusio ## See also -* [Handwritten signature in React PDF Viewer](./annotations/signature-annotation) +* [Handwritten signature in React PDF Viewer](./annotation/signature-annotation) * [Form Designer events](./form-designer/form-field-events) diff --git a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md index 8318e4912..e0dc71fe0 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md +++ b/Document-Processing/PDF/PDF-Viewer/react/organize-pdf/organize-pdf-events.md @@ -152,5 +152,5 @@ root.render(); ## Related event documentation - Overall Viewer events: [Event](../events) -- Annotation events: [Annotation events](../annotations/annotation-event) +- Annotation events: [Annotation events](../annotation/annotation-event) - Form designer events: [Form field events](../form-designer/form-field-events) \ No newline at end of file From 326bb591b92ce7adab48e9223e904d0eb8643524 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Tue, 28 Oct 2025 11:55:22 +0530 Subject: [PATCH 44/47] 984044: naming change --- Document-Processing-toc.html | 3 ++- Document-Processing/PDF/PDF-Viewer/react/feature-module.md | 2 +- ...{table-of-content-navigation.md => hyperlink-navigation.md} | 0 3 files changed, 3 insertions(+), 2 deletions(-) rename Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/{table-of-content-navigation.md => hyperlink-navigation.md} (100%) diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index 38731ea08..58a7e133b 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -667,6 +667,7 @@
  • To Azure Active Directory
  • +
  • Mobile Toolbar Interface
  • Toolbar
  • Navigation
  • Toolbar Customization @@ -731,7 +732,7 @@
  • Print
  • Download
  • Events
  • -
  • Text Selection
  • +
  • Text Selection
  • Globalization
  • Accessibility
  • How to diff --git a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md index 28e4638d0..e6f2a2406 100644 --- a/Document-Processing/PDF/PDF-Viewer/react/feature-module.md +++ b/Document-Processing/PDF/PDF-Viewer/react/feature-module.md @@ -17,7 +17,7 @@ The available PDF Viewer modules are: * [**Toolbar**](./toolbar-customization/annotation-toolbar-customization): Built-in toolbar for user interaction. * [**Magnification**](./magnification): Perform zoom operations for a better viewing experience. * [**Navigation**](./interactive-pdf-navigation/page-navigation): Navigate across pages. -* [**LinkAnnotation**](./interactive-pdf-navigation/table-of-content-navigation): Navigate within the document or to external destinations via hyperlinks. +* [**LinkAnnotation**](./interactive-pdf-navigation/hyperlink-navigation): Navigate within the document or to external destinations via hyperlinks. * [**ThumbnailView**](./interactive-pdf-navigation/page-thumbnail-navigation): Navigate within the document using page thumbnails. * [**BookmarkView**](./interactive-pdf-navigation/bookmark-navigation): Navigate using document bookmarks (table of contents). * [**TextSelection**](./textselection): Select and copy text from the document. diff --git a/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/table-of-content-navigation.md b/Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/hyperlink-navigation.md similarity index 100% rename from Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/table-of-content-navigation.md rename to Document-Processing/PDF/PDF-Viewer/react/interactive-pdf-navigation/hyperlink-navigation.md From 9ca8b364cea50e6087896f0b16ce0ab55f4ad386 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Tue, 28 Oct 2025 11:56:42 +0530 Subject: [PATCH 45/47] 984044: commit --- Document-Processing-toc.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index 58a7e133b..a4453f5d1 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -667,8 +667,8 @@
  • To Azure Active Directory
  • -
  • Mobile Toolbar Interface
  • Toolbar
  • +
  • Mobile Toolbar Interface
  • Navigation
  • Toolbar Customization
      From 56c1611e22e5b703217eea9a1830f24ae3dd11cc Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Tue, 28 Oct 2025 13:32:10 +0530 Subject: [PATCH 46/47] 984044: core file form field --- .../PDF-Viewer/asp-net-core/form-designer/form-field-events.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md b/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md index af0410090..9be77ea98 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-core/form-designer/form-field-events.md @@ -7,7 +7,7 @@ control: Form Field Events documentation: ug --- -# User Interaction with Form Fields in ASP.NET Core +# PDF Viewer Form Field events in ASP.NET CORE The PDF Viewer control provides the support to different Form Field events. The Form Field events supported by the PDF Viewer Control are: From 6286ddb75af20b759d2c9b1c0552135e99227271 Mon Sep 17 00:00:00 2001 From: SivaSelvan-SF Date: Tue, 28 Oct 2025 18:15:38 +0530 Subject: [PATCH 47/47] 984044: revert annotation name --- Document-Processing-toc.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index 642c709c6..50caf492c 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -691,7 +691,7 @@
    • Magnification
    • Accessibility
    • Text Search
    • -
    • Annotations +
    • Annotation
  • H{oM3{;5)bqRYs# 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