From 8b641905c90b66c787eaf22f55a03b1dc5caa6f0 Mon Sep 17 00:00:00 2001 From: sathiyaseelanksf3503 Date: Tue, 21 Oct 2025 18:35:19 +0530 Subject: [PATCH 01/14] 987332: Update Annotation and Form designer --- .../annotation/annotation-event.md | 781 ++++++++++++++++++ .../annotation/annotations-in-mobile-view.md | 122 +++ .../asp-net-mvc/annotation/comments.md | 155 ++-- .../annotation/free-text-annotation.md | 105 +-- .../asp-net-mvc/annotation/ink-annotation.md | 89 +- .../annotation/line-angle-constraints.md | 43 +- .../annotation/measurement-annotation.md | 67 +- .../annotation/shape-annotation.md | 54 +- .../signature-annotation.md} | 68 +- .../annotation/stamp-annotation.md | 59 +- .../annotation/sticky-notes-annotation.md | 73 +- .../annotation/text-markup-annotation.md | 245 +++--- .../form-designer/create-programmatically.md | 165 ++-- .../create-with-user-interface-interaction.md | 59 +- .../form-designer/form-field-events.md | 64 +- .../asp-net-mvc/images/add-revised.png | Bin 0 -> 28372 bytes .../asp-net-mvc/images/add-shapes.png | Bin 0 -> 19221 bytes .../asp-net-mvc/images/add-signature.png | Bin 0 -> 22529 bytes .../asp-net-mvc/images/add-sticky-notes.png | Bin 0 -> 20021 bytes .../asp-net-mvc/images/add-text-markup.png | Bin 0 -> 23517 bytes .../asp-net-mvc/images/adding-signature.png | Bin 0 -> 19302 bytes .../after-enabling-annotation-toolbar.png | Bin 0 -> 18960 bytes .../asp-net-mvc/images/change-property.png | Bin 0 -> 23044 bytes .../images/close-comment-panel.png | Bin 0 -> 6322 bytes .../asp-net-mvc/images/comment-panel.png | Bin 0 -> 18581 bytes .../asp-net-mvc/images/delete-icon.png | Bin 0 -> 23763 bytes .../asp-net-mvc/images/edit-annotation.png | Bin 0 -> 16388 bytes .../asp-net-mvc/images/ink-annotation.png | Bin 0 -> 28262 bytes .../asp-net-mvc/images/open-comment.png | Bin 0 -> 23349 bytes .../asp-net-mvc/images/open-fillcolor.png | Bin 0 -> 21372 bytes .../asp-net-mvc/images/open-ink.png | Bin 0 -> 18662 bytes .../asp-net-mvc/images/open-radius.png | Bin 0 -> 19925 bytes .../asp-net-mvc/images/open-stamp.png | Bin 0 -> 28981 bytes .../asp-net-mvc/images/radius-annotation.png | Bin 0 -> 22784 bytes .../asp-net-mvc/images/select-text.png | Bin 0 -> 23051 bytes .../images/sticky-notes-in-page.png | Bin 0 -> 20085 bytes 36 files changed, 1567 insertions(+), 582 deletions(-) create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotations-in-mobile-view.md rename Document-Processing/PDF/PDF-Viewer/asp-net-mvc/{hand-written-signature.md => annotation/signature-annotation.md} (95%) create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/add-revised.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/add-shapes.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/add-signature.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/add-sticky-notes.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/add-text-markup.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/adding-signature.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/after-enabling-annotation-toolbar.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/change-property.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/close-comment-panel.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/comment-panel.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/delete-icon.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/edit-annotation.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/ink-annotation.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/open-comment.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/open-fillcolor.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/open-ink.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/open-radius.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/open-stamp.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/radius-annotation.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/select-text.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/sticky-notes-in-page.png diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md new file mode 100644 index 000000000..9bfb2792c --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md @@ -0,0 +1,781 @@ +--- +title: Annotations Events in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about Annotations Events in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Annotations Events in ASP.NET MVC 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://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationAdd) 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/javascript/documentation/api/pdfviewer/annotationAddEventArgs/). It provides properties such as `annotationId`, `pageNumber`, `annotationType`, and `bounds`. + +The following example illustrates how to handle the `annotationAdd` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationAdd("annotationAdd").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationAdd("annotationAdd").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### annotationDoubleClick + +The [annotationDoubleClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationDoubleClick) event is triggered when an annotation is double-clicked. + +#### Event Arguments + +For event data, see [AnnotationDoubleClickEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/annotationDoubleClickEventArgs/). + +The following example illustrates how to handle the `annotationDoubleClick` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationDoubleClick("annotationDoubleClicked").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationDoubleClick("annotationDoubleClicked").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### annotationMouseLeave + +The [annotationMouseLeave](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationMouseLeave) 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/javascript/documentation/api/pdfviewer/annotationMouseLeaveEventArgs/). + +The following example illustrates how to handle the `annotationMouseLeave` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationMouseLeave("AnnotationMouseLeaved").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationMouseLeave("AnnotationMouseLeaved").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### annotationMouseover + +The [annotationMouseover](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationMouseover) event is triggered when the mouse is moved over an annotation object. + +#### Event Arguments + +For event data, see [AnnotationMouseOverEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/annotationMouseOverEventArgs/). + +The following example illustrates how to handle the `annotationMouseover` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationMouseover("AnnotationMouseovered").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationMouseover("AnnotationMouseovered").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### annotationMove + +The [annotationMove](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationMove) 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/javascript/documentation/api/pdfviewer/annotationMoveEventArgs/). + +The following example illustrates how to handle the `annotationMove` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationMove("annotationMoved").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationMove("annotationMoved").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### annotationMoving + +The [annotationMoving](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationMoving) event is triggered while an annotation is being moved. + +#### Event Arguments + +For event data, see [AnnotationMovingEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/annotationMovingEventArgs/). + +The following example illustrates how to handle the `annotationMoving` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationMoving("annotationMoving").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationMoving("annotationMoving").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### annotationPropertiesChange + +The [annotationPropertiesChange](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationPropertiesChange) 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/javascript/documentation/api/pdfviewer/annotationPropertiesChangeEventArgs/). It provides properties such as `annotationId`, `pageNumber`, and `action`. + +The following example illustrates how to handle the `annotationPropertiesChange` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationPropertiesChange("annotationPropertiesChanged").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationPropertiesChange("annotationPropertiesChanged").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### annotationRemove + +The [annotationRemove](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationRemove) 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/javascript/documentation/api/pdfviewer/annotationRemoveEventArgs/). It provides properties such as `annotationId` and `pageNumber`. + +The following example illustrates how to handle the `annotationRemove` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationRemove("annotationRemoved").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationRemove("annotationRemoved").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### annotationResize + +The [annotationResize](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationResize) event is triggered when an annotation is resized on a PDF document page. + +#### Event Arguments + +For event data, see [AnnotationResizeEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/annotationResizeEventArgs/). + +The following example illustrates how to handle the `annotationResize` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationResize("annotationResized").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationResize("annotationResized").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### annotationSelect + +The [annotationSelect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationSelect) 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/javascript/documentation/api/pdfviewer/annotationSelectEventArgs/). + +The following example illustrates how to handle the `annotationSelect` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationSelect("annotationSelected").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationSelect("annotationSelected").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### annotationUnselect + +The [annotationUnselect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationUnSelect) 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/javascript/documentation/api/pdfviewer/annotationUnSelectEventArgs/). + +The following example illustrates how to handle the `annotationUnselect` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationUnSelect("annotationUnselected").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationUnSelect("annotationUnselected").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### beforeAddFreeText + +The [beforeAddFreeText](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_BeforeAddFreeText) event is triggered before adding a text in the freeText annotation. + +#### Event Arguments + +For event data, see [BeforeAddFreeTextEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/beforeAddFreeTextEventArgs/). + +The following example illustrates how to handle the `beforeAddFreeText` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").BeforeAddFreeText("beforeAddedFreeText").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").BeforeAddFreeText("beforeAddedFreeText").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +## Signature-related events + +### addSignature + +The [addSignature](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AddSignature) 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/javascript/documentation/api/pdfviewer/addSignatureEventArgs/). It provides properties such as `pageNumber`. + +The following example illustrates how to handle the `addSignature` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AddSignature("addSignature").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AddSignature("addSignature").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### removeSignature + +The [removeSignature](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_RemoveSignature) 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/javascript/documentation/api/pdfviewer/removeSignatureEventArgs/). It provides properties such as `pageNumber`. + +The following example illustrates how to handle the `removeSignature` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").RemoveSignature("removeSignature").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").RemoveSignature("removeSignature").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### resizeSignature + +The [resizeSignature](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ResizeSignature) 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/javascript/documentation/api/pdfviewer/resizeSignatureEventArgs/). + +The following example illustrates how to handle the `resizeSignature` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResizeSignature("resizeSignature").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResizeSignature("resizeSignature").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### signaturePropertiesChange + +The [signaturePropertiesChange](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_SignaturePropertiesChange) 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/javascript/documentation/api/pdfviewer/signaturePropertiesChangeEventArgs/). + +The following example illustrates how to handle the `signaturePropertiesChange` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignaturePropertiesChange("signaturePropertiesChanged").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignaturePropertiesChange("signaturePropertiesChanged").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### signatureSelect + +The [signatureSelect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_SignatureSelect) 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/javascript/documentation/api/pdfviewer/signatureSelectEventArgs/). + +The following example illustrates how to handle the `signatureSelect` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignatureSelect("signatureSelected").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignatureSelect("signatureSelected").Render() +
+ + + +{% endhighlight %} +{% endtabs %} + +### signatureUnselect + +The [signatureUnselect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_SignatureUnselect) 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/javascript/documentation/api/pdfviewer/signatureUnSelectEventArgs/). + +The following example illustrates how to handle the `signatureUnselect` event. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignatureUnselect("signatureUnselected").Render() +
+ + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignatureUnselect("signatureUnselected").Render() +
+ + + +{% endhighlight %} +{% endtabs %} \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotations-in-mobile-view.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotations-in-mobile-view.md new file mode 100644 index 000000000..08c1f3306 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotations-in-mobile-view.md @@ -0,0 +1,122 @@ +--- +layout: post +title: Annotations in mobile view in ASP.NET MVC Pdf viewer | Syncfusion +description: Learn here all about Annotations in mobile view in Syncfusion ASP.NET MVC Pdf viewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: Annotations in mobile view +publishingplatform: ASP.NET MVC +documentation: ug +--- +# Annotations in mobile view in ASP.NET MVC Pdf viewer control + +## To Open the Annotation Toolbar + +**Step 1:** To enable the annotation toolbar, click the editAnnotation toolbar. + +![Alt text](../images/edit-annotation.png) + +**Step 2:** After enabling the annotation toolbar. + +![Alt text](../images/after-enabling-annotation-toolbar.png) + +## To add sticky notes annotation + +**Step 1:** click sticky notes icon and then click in the page where you want to add this. + +![Alt text](../images/add-sticky-notes.png) + +**Step 2:** Click in the page to add the sticky notes annotation. + +![Alt text](../images/sticky-notes-in-page.png) + +## To add text markup annotation + +**Step 1:** click any one of the text markup icon, then select the text you want to mark, then touch the selected text to apply the markup annotation. + +![Alt text](../images/select-text.png) + +**Step 2:** Add the text markup annotation in the PDF page + +![Alt text](../images/add-text-markup.png) + +## To add shape and measure annotations + +**Step 1:** click the shape/measure icon in the toolbar. It will show the toolbar with shape/measure types. + +![Alt text](../images/add-shapes.png) + +**Step 2:** Click the shape/measure type and add annotation to the page. + +![Alt text](../images/open-radius.png) + +**Step 3:** Add the annotation in the PDF page. + +![Alt text](../images/radius-annotation.png) + +## To add the stamp annotation + +**Step 1:** click the stamp icon and select the stamp type from the menu items. + +![Alt text](../images/open-stamp.png) + +**Step 2:** Add the stamp annotation in the page. + +![Alt text](../images/add-revised.png) + +## To add signature + +**Step 1:** click the signature icon. This will open the signature canvas to draw signature. After drawn the sign, should click the create button and touch the viewer to add the signature. + +![Alt text](../images/add-signature.png) + +**Step 2:** Add the signature in the page. + +![Alt text](../images/adding-signature.png) + +## To add ink annotation + +**Step 1:** Click the ink icon tool and draw in the page. + +![Alt text](../images/open-ink.png) + +**Step 2:** Add the ink annotation in the page. + +![Alt text](../images/ink-annotation.png) + +## Change Annotation Change (Before adding) + +**Step 1:** We can change the properties before adding the annotation. + +**Step 2:** Click the annotation icon, this will show the toolbar with corresponding properties. We can change the property and add the annotation in the page. + +![Alt text](../images/open-fillcolor.png) + +## Change Annotation Property (After Adding) + +**Step 1:** We can change the annotation property after adding the annotation. + +**Step 2:** Select the added annotation, it will show the corresponding property tool. This will help us to change the property of the annotation. + +![Alt text](../images/change-property.png) + +## Delete Annotation + +**Step 1:** To delete the annotation, first select the annotation, it will show the property toolbar. In the property tool there is an icon to delete the annotation. + +![Alt text](../images/delete-icon.png) + +## Open Comment Panel + +**Step 1:** We can open the comment panel through the icon in the property tool or through the annotation toolbar. + +![Alt text](../images/open-comment.png) + +**Step 1:** After opening the comment panel + +![Alt text](../images/comment-panel.png) + +## Close the comment panel + +**Step 1:** To close the comment panel, click the close button. + +![Alt text](../images/close-comment-panel.png) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/comments.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/comments.md index e16a93b43..28a0bc3a9 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/comments.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/comments.md @@ -1,17 +1,16 @@ --- layout: post -title: Comments in ASP.NET MVC PDF Viewer Component | Syncfusion -description: Learn here all about Comments in Syncfusion ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Comments in ASP.NET MVC PDF Viewer control | Syncfusion +description: Learn about comments, replies, and status in the Syncfusion ASP.NET MVC PDF Viewer control (Essential JS 2). platform: document-processing -control: Comments +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- +# Comments in ASP.NET MVC PDF Viewer control -# Comments in the ASP.NET MVC PDF Viewer component - -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 @@ -21,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) +![Comment 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 in the PDF document using the comment panel. ### Comment panel @@ -34,78 +33,142 @@ 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. - -![CommentEdit](../images/commentsdelete.png) - -N>The annotation will be deleted on deleting the comment using comment panel. \ No newline at end of file +* Select the annotation comment in the comment panel. +* Click More options in the comment or reply container. +* Select Delete from the context menu. + +![Delete comments or replies](../images/commentsdelete.png) + +>Deleting the root comment from the comment panel also deletes the associated annotation. + +## 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. + +{% tabs %} +{% highlight html tabtitle="Standalone" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
+ + + +{% endhighlight %} + +{% highlight html tabtitle="Server-Backed" %} + +
+ + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
+ + + +{% endhighlight %} +{% endtabs %} \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/free-text-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/free-text-annotation.md index ab019e708..ec3fa3bde 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/free-text-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/free-text-annotation.md @@ -1,30 +1,30 @@ --- layout: post -title: Free Text Annotation in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Free Text Annotation in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Free text annotation in EJ2 ASP.NET MVC PDF Viewer | Syncfusion +description: Learn about free text annotations in the Syncfusion ASP.NET MVC PDF Viewer (Essential JS 2): add, edit, delete, and default settings. platform: document-processing -control: Free Text Annotation +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Free Text Annotation in the ASP.NET MVC PDF Viewer component +# Free text annotation in ASP.NET MVC PDF Viewer control -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. +Free text 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 **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 in ASP.NET MVC PDF Viewer](../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 html tabtitle="Standalone" %} @@ -61,11 +61,11 @@ Refer to the following code sample to switch to the Free Text annotation mode. {% endhighlight %} {% endtabs %} -## Adding a free text annotation programmatically to the PDF document +## Add a free text annotation programmatically to the PDF document -The PDF Viewer library allows you to add the free text annotation in the PDF Viewer control programmatically using the **addAnnotation()** method. +The PDF Viewer library allows adding a free text annotation programmatically using the [addAnnotation()](https://ej2.syncfusion.com/documentation/api/pdfviewer/annotation/#annotation) method. -Here is an example of how you can use the **addAnnotation()** method to move the free text annotation programmatically: +Here is an example of adding a free text annotation programmatically using addAnnotation(): {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -132,11 +132,11 @@ Here is an example of how you can use the **addAnnotation()** method to move the {% 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 html tabtitle="Standalone" %} @@ -189,70 +189,71 @@ Here is an example of how you can use the **editAnnotation()** method to change {% 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 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 html tabtitle="Standalone" %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/ink-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/ink-annotation.md index 332311f80..914ee7d1c 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/ink-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/ink-annotation.md @@ -1,30 +1,30 @@ --- layout: post -title: Ink Annotation in ASP.NET MVC PDF Viewer Component | Syncfusion -description: Learn here all about Ink Annotation in Syncfusion ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Ink annotation in ASP.NET MVC PDF Viewer control | Syncfusion +description: Learn about ink annotations in the Syncfusion ASP.NET MVC PDF Viewer (Essential JS 2): add, edit, delete, and default settings. platform: document-processing -control: Ink Annotation +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Ink Annotation in the ASP.NET MVC PDF Viewer component +# Ink annotation in ASP.NET MVC PDF Viewer control -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 html tabtitle="Standalone" %} @@ -59,11 +59,11 @@ Refer to the following code sample to switch to the ink annotation mode. {% 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()** method. +The PDF Viewer library allows adding an ink annotation programmatically using the **addAnnotation()** 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 html tabtitle="Standalone" %} @@ -112,21 +112,18 @@ Here's a example of how you can utilize the **addAnnotation()** method to includ {% 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 html tabtitle="Standalone" %}
- - + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render()
{% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %} -
@Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render()
- {% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %} @@ -70,10 +70,10 @@ Refer to the following code sample to switch to the highlight mode. {% endhighlight %} {% endtabs %} -Refer to the following code sample to switch back to normal mode from the highlight mode. +Refer to the following code sample to switch back to normal mode from highlight mode. {% tabs %} -{% highlight html tabtitle="Standalone" %} +{% highlight cshtml tabtitle="Standalone" %} @@ -95,7 +95,7 @@ Refer to the following code sample to switch back to normal mode from the highli {% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %} @@ -119,11 +119,11 @@ Refer to the following code sample to switch back to normal mode from the highli {% 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()** method. +Programmatically add highlights using the **addAnnotation()** method. -Here's an example of how you can use the **addAnnotation()** method to apply highlighting programmatically: +Here is an example showing how to add highlights programmatically using addAnnotation(): {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -162,32 +162,31 @@ Here's an example of how you can use the **addAnnotation()** method to apply hig {% endhighlight %} {% endtabs %} +## Underline text -## Underline a 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 the **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) +![Underline from context menu](../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) +![Underline button](../images/underline_button.png) In the pan mode, if the underline mode is entered, the PDF Viewer control will switch to text select mode to enable the text selection for underlining the text. -Refer to the following code sample to switch to the underline mode. +Refer to the following code sample to switch to underline mode. {% tabs %} -{% highlight html tabtitle="Standalone" %} +{% highlight cshtml tabtitle="Standalone" %} @@ -202,7 +201,7 @@ Refer to the following code sample to switch to the underline mode. {% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %} @@ -219,10 +218,10 @@ Refer to the following code sample to switch to the underline mode. {% endhighlight %} {% endtabs %} -Refer to the following code sample to switch back to normal mode from the underline mode. +Refer to the following code sample to switch back to normal mode from underline mode. {% tabs %} -{% highlight html tabtitle="Standalone" %} +{% highlight cshtml tabtitle="Standalone" %} @@ -244,7 +243,7 @@ Refer to the following code sample to switch back to normal mode from the underl {% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %} @@ -268,11 +267,11 @@ Refer to the following code sample to switch back to normal mode from the underl {% 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()** method. +Programmatically add underlines using the **addAnnotation()** method. -Here's an example of how you can use the **addAnnotation()** method to apply Underline programmatically: +Example: {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -311,32 +310,31 @@ Here's an example of how you can use the **addAnnotation()** method to apply Und {% 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 the **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) +![Strikethrough from context menu](../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) +![Strikethrough button](../images/strikethrough_button.png) In the pan mode, if the strikethrough mode is entered, the PDF Viewer control will switch to text select mode to enable the text selection for striking through the text. -Refer to the following code sample to switch to the strikethrough mode. +Refer to the following code sample to switch to strikethrough mode. {% tabs %} -{% highlight html tabtitle="Standalone" %} - +{% highlight cshtml tabtitle="Standalone" %} @@ -351,7 +349,7 @@ Refer to the following code sample to switch to the strikethrough mode. {% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %} @@ -369,10 +367,10 @@ Refer to the following code sample to switch to the strikethrough mode. {% endhighlight %} {% endtabs %} -Refer to the following code sample to switch back to normal mode from the strikethrough mode. +Refer to the following code sample to switch back to normal mode from strikethrough mode. {% tabs %} -{% highlight html tabtitle="Standalone" %} +{% highlight cshtml tabtitle="Standalone" %} @@ -394,7 +392,7 @@ Refer to the following code sample to switch back to normal mode from the strike {% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %} @@ -418,11 +416,11 @@ Refer to the following code sample to switch back to normal mode from the strike {% 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()** method. +Programmatically add strikethrough using the **addAnnotation()** method. -Here's an example of how you can use the **addAnnotation()** method to apply Strikethrough programmatically: +Here is an example showing how to add strikethrough programmatically using addAnnotation(): {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -461,31 +459,31 @@ Here's an example of how you can use the **addAnnotation()** method to apply Str {% endhighlight %} {% endtabs %} -## Squiggly a text +## Add squiggly to text -There are two ways to add a squiggly annotation to 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 the **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) +![Squiggly from context menu](../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) +![Squiggly button](../images/squiggly_button.png) In the pan mode, if the squiggly mode is entered, the PDF Viewer control will switch to text select mode to enable the text selection for adding squiggly to the text. -Refer to the following code sample to switch to the squiggly mode. +Refer to the following code sample to switch to squiggly mode. {% tabs %} -{% highlight html tabtitle="Standalone" %} +{% highlight cshtml tabtitle="Standalone" %} @@ -501,7 +499,7 @@ Refer to the following code sample to switch to the squiggly mode. {% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %} @@ -519,10 +517,10 @@ Refer to the following code sample to switch to the squiggly mode. {% endhighlight %} {% endtabs %} -Refer to the following code sample to switch back to normal mode from the squiggly mode. +Refer to the following code sample to switch back to normal mode from squiggly mode. {% tabs %} -{% highlight html tabtitle="Standalone" %} +{% highlight cshtml tabtitle="Standalone" %} @@ -544,7 +542,7 @@ Refer to the following code sample to switch back to normal mode from the squigg {% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %} @@ -568,11 +566,11 @@ Refer to the following code sample to switch back to normal mode from the squigg {% 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()** method. +Programmatically add squiggly using the **addAnnotation()** method. -Here's an example of how you can use the **addAnnotation()** method to apply Squiggly programmatically: +Example: {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -611,54 +609,53 @@ Here's an example of how you can use the **addAnnotation()** method to apply Squ {% endhighlight %} {% endtabs %} - -## Deleting a text markup annotation +## Delete a text markup annotation The selected annotation can be deleted in the following ways: 1. Using the Delete key - * Select the annotation to be deleted. - * Click the Delete key in the keyboard. The selected annotation will be deleted. + * Select the annotation to delete. + * Press the Delete key. 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 the **Delete Annotation** button in the annotation toolbar. The selected annotation is removed. -![Alt text](../images/delete_button.png) +![Delete annotation](../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. +The color and the opacity of the text markup annotation can be edited using the Edit Color and Edit Opacity tools 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) +![Edit color](../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) +![Edit opacity](../images/edit_opacity.png) -## Setting default properties during the control initialization +## Set default properties during control initialization -The properties of the text markup annotation can be set before creating the control using the highlightSettings, underlineSettings, strikethroughSettings and squigglySettings. +Set default properties before creating the control using highlightSettings, underlineSettings, strikethroughSettings, and squigglySettings. -N>After editing the default color and opacity using the Edit Color tool and Edit Opacity tool, they will be changed to the selected values. +N> After editing the default color and opacity using the Edit Color and Edit Opacity tools, the values update to the selected settings. Refer to the following code sample to set the default annotation settings. {% tabs %} -{% highlight html tabtitle="Standalone" %} +{% highlight cshtml tabtitle="Standalone" %}
@Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").HighlightSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerHighlightSettings{Author = "Guest User", Color = "#ffff00", Opacity = 0.9 }).UnderlineSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerUnderlineSettings{ Author = "Guest User", Color = "#00ffff", Opacity = 0.9 }).StrikethroughSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerStrikethroughSettings{ Author = "Guest User", Color = "#ff00ff", Opacity = 0.9, }).SquigglySettings(new Syncfusion.EJ2.PdfViewer.PdfViewerSquigglySettings{ Author = "Guest User", Color = "#0000ff", Opacity = 0.9 }).Render()
{% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %}
@Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").HighlightSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerHighlightSettings{Author = "Guest User", Color = "#ffff00", Opacity = 0.9 }).UnderlineSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerUnderlineSettings{ Author = "Guest User", Color = "#00ffff", Opacity = 0.9 }).StrikethroughSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerStrikethroughSettings{ Author = "Guest User", Color = "#ff00ff", Opacity = 0.9, }).SquigglySettings(new Syncfusion.EJ2.PdfViewer.PdfViewerSquigglySettings{ Author = "Guest User", Color = "#0000ff", Opacity = 0.9 })Render() @@ -667,25 +664,25 @@ Refer to the following code sample to set the default annotation settings. {% 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 the 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. -The undo and redo actions can be done by the following ways: +Undo and redo actions can be performed in the following ways: -1. Using the keyboard shortcuts: - After performing a text markup annotation action, you can undo it by using the Ctrl + Z shortcut and redo by using the Ctrl + Y shortcut. -2. Using toolbar: - The undo and redo can be done using the **Undo** tool and **Redo** tool provided in the toolbar. +1. Using keyboard shortcuts: + 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 sample for calling undo and redo actions from the client-side. +Refer to the following code sample to call undo and redo actions from the client side. {% tabs %} -{% highlight html tabtitle="Standalone" %} +{% highlight cshtml tabtitle="Standalone" %} @@ -707,7 +704,7 @@ Refer to the following code sample for calling undo and redo actions from the cl {% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %} @@ -731,31 +728,31 @@ Refer to the following code sample for calling undo and redo actions from the cl {% 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 sample for disabling the feature is as follows. +Disable text markup annotations using the enableTextMarkupAnnotation property. {% tabs %} -{% highlight html tabtitle="Standalone" %} +{% highlight cshtml tabtitle="Standalone" %}
@Html.EJS().PdfViewer("pdfviewer").EnableTextMarkupAnnotation(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render()
{% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} +{% highlight cshtml tabtitle="Server-Backed" %}
@Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).EnableTextMarkupAnnotation(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render()
{% endhighlight %} -{% endtabs %} \ No newline at end of file +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md index 1d01a9c59..510df3433 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md @@ -1,29 +1,29 @@ --- layout: post -title: Create Programmatically in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Create Programmatically in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Programmatically Add Fields in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to add, update, delete, save, print, validate, and import/export form fields in the Syncfusion ASP.NET MVC PDF Viewer component. platform: document-processing -control: Create Programmatically +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Create form fields programmatically +# Create form fields programmatically in ASP.NET MVC PDF Viewer -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 a field on document load. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -57,7 +57,7 @@ Using addFormField method, the form fields can be added to the PDF document prog ## 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 html tabtitle="Standalone" %} @@ -95,7 +95,7 @@ Using updateFormField method, Form Field can be updated programmatically. We sho ## 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 html tabtitle="Standalone" %} @@ -131,13 +131,13 @@ Using deleteFormField method, the form field can be deleted programmatically. We {% endhighlight %} {% endtabs %} -## Saving the form fields +## Save 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 html tabtitle="Standalone" %} @@ -156,6 +156,7 @@ You can invoke download action using following code snippet. ``` {% endhighlight %} {% highlight html tabtitle="Server-Backed" %} + ```html
@Html.EJS().PdfViewer("pdfviewer").DocumentLoad("download").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableDownload(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() @@ -171,13 +172,13 @@ You can invoke download action using following code snippet. {% endhighlight %} {% endtabs %} -## Printing the form fields +## Print 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 print action using the following code snippet., +You can invoke the print action using the following code snippet: {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -214,17 +215,17 @@ You can invoke print action using the following code snippet., {% endhighlight %} {% endtabs %} -## Open the existing PDF document +## Open an 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 html tabtitle="Standalone" %} @@ -257,20 +258,20 @@ Add the following code snippet to validate the form fields, ## 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 `importFormFields`, `exportFormFields`, and `exportFormFieldsAsObject` methods. +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 Using the `exportFormFields` method, the form field data can be exported in the specified data format. This method accepts two parameters: -* The first one must be the destination path for the exported data. If the 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 first parameter is the destination path for the exported data. If the path is not specified, a location is requested during export. +- The second parameter specifies the format type for the form data. -The following code explains how to export the form field data as FDF. +The following code exports and imports form field data as FDF. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -333,7 +334,7 @@ The following code explains how to export the form field data as FDF. ### Export and import as XFDF -The following code explains how to export the form field data as XFDF. +The following code exports and imports form field data as XFDF. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -392,7 +393,7 @@ The following code explains how to export the form field data as XFDF. ### Export and import as JSON -The following code explains how to export the form field data as JSON. +The following code exports and imports form field data as JSON. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -453,9 +454,9 @@ The following code explains how to export the form field data as JSON. ### 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. +The following example 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. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -556,22 +557,22 @@ The following code shows how to export the form field data as an object and impo {% endhighlight %} {% endtabs %} -## Form Field Properties +## 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. @@ -632,7 +633,7 @@ The following code example explains how to update the signature field properties {% endhighlight %} {% endtabs %} -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. -![Signature Field Settings](../images/signature_field.png) +![Signature field settings in the PDF Viewer](../images/signature_field.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. -![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. +Use the `updateFormField` method to modify form fields 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. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -793,8 +794,7 @@ The following code example explains how to update the Textbox field properties o {% endhighlight %} {% endtabs %} - -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. -![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. +Use the `updateFormField` method to modify form fields 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. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -927,8 +927,7 @@ The following code example explains how to update the Password field properties {% endhighlight %} {% endtabs %} - -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. -![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. +Use the `updateFormField` method to modify form fields 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. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -1045,8 +1044,7 @@ The following code example explains how to update the CheckBox field properties {% endhighlight %} {% endtabs %} - -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. -![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. +Use the `updateFormField` method to modify form fields 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. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -1155,8 +1153,7 @@ The following code example explains how to update the RadioButton field properti {% endhighlight %} {% endtabs %} - -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. -![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. +Use the `updateFormField` method to modify form fields 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. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -1285,8 +1282,7 @@ The following code example explains how to update the ListBox field properties o {% endhighlight %} {% endtabs %} - -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. -![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. +Use the `updateFormField` method to modify form fields 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. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -1430,8 +1426,7 @@ The following code example explains how to update the DropDown field properties {% endhighlight %} {% endtabs %} - -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. -![DropDownBox 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/asp-net-mvc/form-designer/create-with-user-interface-interaction.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-with-user-interface-interaction.md index 61d3ee786..d063e32a9 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-with-user-interface-interaction.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-with-user-interface-interaction.md @@ -1,34 +1,34 @@ --- layout: post -title: User Interface Interaction in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn how User Interface Interaction in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Design form fields in the ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to add, drag, resize, edit, and manage form fields using the UI in the Syncfusion ASP.NET MVC PDF Viewer component. platform: document-processing -control: Create With User Interface Interaction +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- +# Design form fields with UI interaction in ASP.NET MVC PDF Viewer -# Create form fields with UI interaction +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: -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 +- 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. +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 html tabtitle="Standalone" %} ```html +
@Html.EJS().PdfViewer("pdfviewer").EnableFormDesignerToolbar(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render()
@@ -37,6 +37,7 @@ We should inject FormDesigner module and set enableFormDesignerToolbar as true t {% endhighlight %} {% highlight html tabtitle="Server-Backed" %} ```html +
@Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableFormDesignerToolbar(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render()
@@ -47,41 +48,41 @@ We should inject FormDesigner module and set enableFormDesignerToolbar as true t ## 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 html tabtitle="Standalone" %} @@ -122,4 +123,4 @@ We provided support to undo/redo the Form Field actions that are performed at ru ``` {% endhighlight %} -{% endtabs %} \ No newline at end of file +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/form-field-events.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/form-field-events.md index 8dc096f03..6cefb2697 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/form-field-events.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/form-field-events.md @@ -1,36 +1,36 @@ --- layout: post -title: Form Field Events in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about different form field event in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Form field events in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn about form field events supported in the Syncfusion ASP.NET MVC PDF Viewer component and how to handle them. platform: document-processing -control: Form Field Events +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# PDF Viewer Form Field events +# Form field events in ASP.NET MVC PDF Viewer -The PDF Viewer control provides the support to different Form Field events. The Form Field events supported by the PDF Viewer Control are: +The PDF Viewer component provides support for various form field events. The following events are available: -| Form Field events | Description | +| Form field events | Description | |---|---| -| formFieldAdd | Event trigger when a form field is added.| -| formFieldClick | Events trigger when the form field is selected.| -| formFieldDoubleClick | Events trigger when the form field is double-clicked.| -| formFieldFocusOut | Events trigger when focus out from the form fields.| -| formFieldMouseLeave | Events trigger when the mouse cursor leaves the form field.| -| formFieldMouseOver | Events trigger when the mouse cursor is over a form field.| -| formFieldMove | Events trigger when a form field is moved.| -| formFieldPropertiesChange | Events trigger when a property of form field is changed.| -| formFieldRemove | Events trigger when a form field is removed.| -| formFieldResize | Events trigger when a form field is resized.| -| formFieldSelect | Events trigger when a form field is selected.| -| formFieldUnselect | Events trigger when a form field is unselected.| -| validateFormFields | Events trigger when validation is failed.| +| formFieldAdd | Triggered when a form field is added. | +| formFieldClick | Triggered when a form field is clicked. | +| formFieldDoubleClick | Triggered when a form field is double-clicked. | +| formFieldFocusOut | Triggered when focus moves out of a form field. | +| formFieldMouseLeave | Triggered when the mouse cursor leaves a form field. | +| formFieldMouseOver | Triggered when the mouse cursor is over a form field. | +| formFieldMove | Triggered when a form field is moved. | +| formFieldPropertiesChange | Triggered when a form field property changes. | +| formFieldRemove | Triggered when a form field is removed. | +| formFieldResize | Triggered when a form field is resized. | +| formFieldSelect | Triggered when a form field is selected. | +| formFieldUnselect | Triggered when a form field is unselected. | +| validateFormFields | Triggered when validation fails. | ## formFieldAdd event -The [formFieldAdd](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldAdd) event is triggered when a new form field is added, either programmatically or through user interaction. The event arguments provide the necessary information about the form field addition. +The [formFieldAdd](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldAdd) event is triggered when a new form field is added, either programmatically or through user interaction. The event arguments provide details about the added form field. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -65,7 +65,7 @@ The [formFieldAdd](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.p ## formFieldClick event -The [formFieldClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldClick) event is triggered when a form field is clicked. The event arguments provide the necessary information about the form field click event. +The [formFieldClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldClick) event is triggered when a form field is clicked. The event arguments provide details about the clicked form field. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -100,7 +100,7 @@ The [formFieldClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2 ## formFieldDoubleClick event -The [formFieldDoubleClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldDoubleClick/) event is triggered when a form field is double-clicked. The event arguments provide the necessary information about the form field double-click event. +The [formFieldDoubleClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldDoubleClick) event is triggered when a form field is double-clicked. The event arguments provide details about the double-clicked form field. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -135,7 +135,7 @@ The [formFieldDoubleClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusi ## formFieldFocusOut event -The [formFieldFocusOut](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldFocusOut/) event is triggered when a form field loses focus. The event arguments provide the necessary information about the form field focus out event. +The [formFieldFocusOut](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldFocusOut) event is triggered when a form field loses focus. The event arguments provide details about the field that lost focus. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -170,7 +170,7 @@ The [formFieldFocusOut](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion. ## formFieldMouseLeave event -The [formFieldMouseLeave](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldMouseLeave/) event is triggered when the mouse leaves a form field. The event arguments provide the necessary information about the form field mouse leave event. +The [formFieldMouseLeave](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldMouseLeave) event is triggered when the mouse leaves a form field. The event arguments provide details about the mouse leave action. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -205,7 +205,7 @@ The [formFieldMouseLeave](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusio ## formFieldMouseOver event -The [formFieldMouseOver](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldMouseover/) event is triggered when the mouse hovers over a form field. The event arguments provide the necessary information about the form field mouse over event. +The [formFieldMouseOver](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldMouseover) event is triggered when the mouse hovers over a form field. The event arguments provide details about the mouse over action. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -245,7 +245,7 @@ The [formFieldMouseOver](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion ## formFieldMove event -The [formFieldMove](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldMove/) event is triggered when the mouse moves inside a form field. The event arguments provide the necessary information about the form field mouse move event. +The [formFieldMove](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldMove) event is triggered when a form field is moved. The event arguments provide details about the movement. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -285,7 +285,7 @@ The [formFieldMove](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2. ## formFieldPropertiesChange event -The [formFieldPropertiesChange](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldPropertiesChange/) event is triggered when the properties of a form field are changed. The event arguments provide the necessary information about which property of the form field has been changed. +The [formFieldPropertiesChange](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldPropertiesChange) event is triggered when form field properties change. The event arguments indicate which property changed. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -359,7 +359,7 @@ The [formFieldPropertiesChange](https://help.syncfusion.com/cr/aspnetmvc-js2/syn ## formFieldRemove event -The [formFieldRemove](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldRemove) event is triggered when a form field is removed from the PDF. The event arguments provide the necessary information about which form field has been removed. +The [formFieldRemove](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldRemove) event is triggered when a form field is removed from the PDF. The event arguments provide details about the removed field. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -395,7 +395,7 @@ The [formFieldRemove](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej ## formFieldResize event -The [formFieldResize](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldResize) events are triggered when a form field in a PDF is resized. These events provide the relevant details about the specific form field that has been resized. +The [formFieldResize](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldResize) event is triggered when a form field is resized. The event arguments include current and previous positions. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -435,7 +435,7 @@ The [formFieldResize](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej ## formFieldSelect event -The [formFieldSelect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldSelect/) events are triggered when a form field in a PDF is selected. These events provide the necessary details about the specific form field that has been selected. +The [formFieldSelect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldSelect) event is triggered when a form field is selected. The event arguments provide details about the selected field. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -471,7 +471,7 @@ The [formFieldSelect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej ## formFieldUnselect event -The [formFieldUnselect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldUnselect/) events are triggered when a form field in a PDF is unselected. These events provide the necessary details about the specific form field that has been unselected. +The [formFieldUnselect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_FormFieldUnselect) event is triggered when a form field is unselected. The event arguments provide details about the unselected field. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -507,7 +507,7 @@ The [formFieldUnselect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion. ## validateFormFields event -The [ValidateFormFields](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ValidateFormFields/) events are triggered when a required form field is left unfilled before downloading the PDF. These events provide the necessary information for validating which form fields are incomplete. +The [validateFormFields](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ValidateFormFields) event is triggered when required form fields are left unfilled before downloading or printing the PDF. The event arguments include details about the incomplete fields. {% tabs %} {% highlight html tabtitle="Standalone" %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/add-revised.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/add-revised.png new file mode 100644 index 0000000000000000000000000000000000000000..0e0a24bae4e96bcc1d49cbc24e6a5614715fcd57 GIT binary patch literal 28372 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 z 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 Z{6E|4jzqM+(`f(z002ovPDHLkV1iy09;pBT literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/add-signature.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/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/asp-net-mvc/images/add-sticky-notes.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/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/asp-net-mvc/images/adding-signature.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/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/asp-net-mvc/images/after-enabling-annotation-toolbar.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/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/asp-net-mvc/images/change-property.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/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/asp-net-mvc/images/ink-annotation.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/ink-annotation.png new file mode 100644 index 0000000000000000000000000000000000000000..0699edb195c0bffc1572f9242a31b4c51ad912ad GIT binary patch literal 28262 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/open-fillcolor.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/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/asp-net-mvc/images/open-ink.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/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/asp-net-mvc/images/open-radius.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/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/asp-net-mvc/images/select-text.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/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/asp-net-mvc/images/sticky-notes-in-page.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/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 13f869371c9688d06535334eefea70350a421182 Mon Sep 17 00:00:00 2001 From: sathiyaseelanksf3503 Date: Tue, 21 Oct 2025 19:51:43 +0530 Subject: [PATCH 02/14] 987332: Update Open File --- .../open-pdf-file/from-amazon-s3.md | 26 ++++++++-------- .../from-azure-active-directory.md | 30 +++++++++---------- .../open-pdf-file/from-azure-blob-storage.md | 24 +++++++-------- .../from-box-cloud-file-storage.md | 22 +++++++------- .../from-google-cloud-storage.md | 22 +++++++------- .../open-pdf-file/from-google-drive.md | 26 ++++++++-------- 6 files changed, 77 insertions(+), 73 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-amazon-s3.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-amazon-s3.md index 96f4cbcb2..c1a403609 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-amazon-s3.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-amazon-s3.md @@ -1,28 +1,28 @@ --- layout: post -title: AWS S3 in ASP.NET MVC Syncfusion PDF Viewer Component -description: Learn here all about how to Open PDF files from AWS S3 in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Open PDF from AWS S3 in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to load PDFs from AWS S3 in the Syncfusion ASP.NET MVC PDF Viewer component using standalone and server-backed approaches. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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 ASP.NET MVC 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 AWS S3 account -Set up an AWS S3 account by following the instructions on the official AWS site: [AWS Management Console](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html). Create an S3 bucket and generate access keys while ensuring secure storage of credentials. + Set up an AWS S3 account by following the instructions on the official AWS site: [AWS Management Console](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html). Create an S3 bucket and generate access keys while ensuring secure storage of credentials. **Step 2:** Create PDF Viewer Sample in ASP.NET MVC -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to create a simple PDF Viewer sample in ASP.NET MVC. **Step 3:** Modify the `~/Views/Shared/_Layout.cshtml` File in the Project @@ -88,9 +88,9 @@ N> The **AWSSDK.S3** NuGet package must be installed in your application to use [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 AWS S3 account @@ -98,7 +98,7 @@ To load a PDF file from AWS S3 in a PDF Viewer, you can follow the steps below **Step 2:** Create PDF Viewer Sample in ASP.NET MVC -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to create a simple PDF Viewer sample in ASP.NET MVC. **Step 3:** Modify the `HomeController.cs` File in the Project @@ -158,9 +158,9 @@ using Amazon.S3.Model; 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 -**Step 4:** Set the PDF Viewer Properties in ASP.NET MVC PDF viewer component +**Step 4:** Configure the PDF Viewer component -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 azure container to the documentPath property. +Set the `documentPath` property of the PDF Viewer to the PDF file name to load from AWS S3. Ensure the document name matches an object in your bucket. ```csharp diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-azure-active-directory.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-azure-active-directory.md index 0043eab99..ab5a0eb01 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-azure-active-directory.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-azure-active-directory.md @@ -1,24 +1,24 @@ --- layout: post -title: Open PDF from AAD in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about How to Open Pdf From AAD in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Open PDF from Azure Active Directory in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to load and save PDFs using Azure Active Directory (AAD) with the Syncfusion ASP.NET MVC PDF Viewer component. platform: document-processing -control: Open PDF from AAD +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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 ASP.NET MVC 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 +40,7 @@ The Syncfusion PDF Viewer allows you to load and save PDF files directly from Az --- -### **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 +50,7 @@ The Syncfusion PDF Viewer allows you to load and save PDF files directly from Az --- -### **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 +65,7 @@ The Syncfusion PDF Viewer allows you to load and save PDF files directly from Az ![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,8 +76,8 @@ The Syncfusion PDF Viewer allows you to load and save PDF files directly from Az ![upload-pdf](../images/upload-pdf.png) --- -### **Step 5: ASP.NET MVC PDF Viewer Control Configuration** -1. Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed) to create a simple PDF Viewer sample. +### Step 5: Server-side configuration +1. Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample. 2. Add the following code snippet in `HomeController.cs`. @@ -135,8 +135,8 @@ public async Task SaveToAAD(jsonObjects responseData) {% endhighlight %} {% endtabs %} -3. Configure Server-Side Code: - - Open the server-side application (e.g., ASP.NET Core) and configure the following details in the `PdfViewerController` file: +3. Configure server-side code: + - Open the server-side application (e.g., ASP.NET MVC) and configure the following details in the `PdfViewerController` file: - `tenantId` (your Azure AD tenant ID), - `clientId` (your registered application client ID), - `clientSecret` (your registered application client secret), diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-azure-blob-storage.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-azure-blob-storage.md index 901a4ed67..9e060bcbb 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-azure-blob-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-azure-blob-storage.md @@ -1,20 +1,20 @@ --- layout: post -title: Open PDF from Azure Blob Storage in ASP.NET MVC PdfViewer | Syncfusion -description: Learn here all about how to Open PDF files from Azure Blob Storage in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Open PDF from Azure Blob Storage in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to load PDFs from Azure Blob Storage in the Syncfusion ASP.NET MVC PDF Viewer component using standalone and server-backed approaches. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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. +The ASP.NET MVC PDF Viewer component supports loading PDF files from Azure Blob Storage 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 Azure Blob Storage in a PDF Viewer, you can follow the steps below +Follow these steps to load a PDF from Azure Blob Storage in the standalone PDF Viewer. **Step 1:** Create the Azure Blob Storage account @@ -22,7 +22,7 @@ Log in to the Azure Portal. Create a new Storage Account with preferred settings **Step 2:** Create PDF Viewer Sample in ASP.NET MVC -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample in ASP.NET MVC. **Step 3:** Modify the `Views/Home/index.cshtml` File in the Project @@ -97,9 +97,9 @@ 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 the Azure Blob Storage account @@ -107,7 +107,7 @@ Log in to the Azure Portal. Create a new Storage Account with preferred settings **Step 2:** Create PDF Viewer Sample in ASP.NET MVC -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample in ASP.NET MVC. **Step 3:** Modify the `HomeController.cs` File in the Project @@ -164,9 +164,9 @@ public ActionResult Load(jsonObjects 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 -**Step 4:** Set the PDF Viewer Properties in ASP.NET MVC PDF viewer component +**Step 4:** Configure the PDF Viewer component -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 container to the documentPath property. +Set the `documentPath` property of the PDF Viewer to the PDF file name to load from Azure Blob Storage. Ensure the document name exists in your Azure container. ```csharp diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-box-cloud-file-storage.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-box-cloud-file-storage.md index 1afcf8be5..eda1c9290 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-box-cloud-file-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-box-cloud-file-storage.md @@ -1,28 +1,28 @@ --- layout: post -title: Box cloud file storage in ASP.NET MVC PDF Viewer Component -description: Learn here all about how to Open PDF files from Box cloud file storage in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Open PDF from Box cloud storage in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to load PDFs from Box cloud storage in the Syncfusion ASP.NET MVC PDF Viewer component using a server-backed approach. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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. -**Step 2:** Create PDF Viewer Sample in ASP.NET MVC +**Step 2:** Create a PDF Viewer sample in ASP.NET MVC -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample in ASP.NET MVC. -**Step 3:** Modify the `HomeController.cs` File in the Project +**Step 3:** Modify the `HomeController.cs` file in the project -1. Import the required namespaces at the top of the file. +1. Import the required namespaces at the top of the file: ```csharp using Box.V2; @@ -87,9 +87,9 @@ using Box.V2.Models; 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. -**Step 4:** Set the PDF Viewer Properties in ASP.NET MVC PDF viewer component +**Step 4:** Configure the PDF Viewer component -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 azure container to the documentPath property. +Set the [serviceUrl](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_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. ```csharp diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-google-cloud-storage.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-google-cloud-storage.md index 8119bdb3e..61d947e08 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-google-cloud-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-google-cloud-storage.md @@ -1,26 +1,26 @@ --- layout: post -title: Google Cloud Storage in ASP.NET MVC PDF Viewer Component -description: Learn here all about how to Open PDF files from Google Cloud Storage in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Open PDF from Google Cloud Storage in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to load PDFs from Google Cloud Storage in the Syncfusion ASP.NET MVC PDF Viewer component using a server-backed approach. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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 Service Account +**Step 1:** Create a Service Account Open the Google Cloud Console. Navigate to `IAM & Admin` > `Service accounts`. Click `Create Service Account`.` Enter a name, assign roles (e.g., Storage Object Admin), and create a key in JSON format. Download the key file securely. Utilize the downloaded key file in your applications or services for authentication and access to the Google Cloud Storage bucket. For additional details, refer to the [official documentation](https://cloud.google.com/iam/docs/service-accounts-create). -**Step 2:** Create PDF Viewer Sample in ASP.NET MVC +**Step 2:** Create a PDF Viewer sample in ASP.NET MVC -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample in ASP.NET MVC -**Step 3:** Modify the `HomeController.cs` File in the Project +**Step 3:** Modify the `HomeController.cs` file in the project 1. Import the required namespaces at the top of the file. @@ -30,6 +30,7 @@ using Google.Cloud.Storage.V1; using Google.Apis.Auth.OAuth2; ``` + 2. Add the following private fields and constructor parameters to the `HomeController.cs` class, In the constructor, assign the values from the configuration to the corresponding fields ```csharp @@ -49,6 +50,7 @@ using Google.Apis.Auth.OAuth2; } ``` + 3. Modify the `Load()` method to load the PDF files from Google Cloud Storage bucket. ```csharp @@ -88,9 +90,9 @@ N> Replace **Your Bucket name from Google Cloud Storage** with the actual name o 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. -**Step 4:** Set the PDF Viewer Properties in ASP.NET MVC PDF viewer component +**Step 4:** Configure the PDF Viewer component -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 azure container to the documentPath property. +Set the `documentPath` property of the PDF Viewer to the PDF file name to load from Google Cloud Storage. Ensure the document name exists in your bucket. ```csharp diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-google-drive.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-google-drive.md index ccdde3ea4..18cb8c099 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-google-drive.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/open-pdf-file/from-google-drive.md @@ -1,26 +1,26 @@ --- layout: post -title: AWS S3 in ASP.NET MVC PDF Viewer Component -description: Learn here all about how to Open PDF files from AWS S3 in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Open PDF from Google Drive in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to load PDFs from Google Drive in the Syncfusion ASP.NET MVC PDF Viewer component using a server-backed approach. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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 +**Step 1:** Set up 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 PDF Viewer Sample in ASP.NET MVC +**Step 2:** Create a PDF Viewer sample in ASP.NET MVC -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample in ASP.NET MVC. -**Step 3:** Modify the `HomeController.cs` File in the Project +**Step 3:** Modify the `HomeController.cs` file in the project 1. Import the required namespaces at the top of the file. @@ -32,7 +32,7 @@ using Google.Apis.Services; using Google.Apis.Util.Store; ``` -2. Modify the `Load()` method to load the PDF files from Google Drive. +2. Modify the `Load()` method to load the PDF files from Google drive. ```csharp @@ -117,11 +117,13 @@ private readonly string tokenjson = "Path to create token.json file"; } ``` -N> Replace **Your Google Drive Folder ID**, **Your Application name**, **tokenPath** and **Your Path to the OAuth 2.0 Client IDs json file** with your actual Google drive folder ID , Your name for your application, Path to the token file to generate and the path for the JSON file. +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. -**Step 4:** Set the PDF Viewer Properties in ASP.NET MVC PDF viewer component +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`. -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 azure container to the documentPath property. +**Step 4:** Configure the PDF Viewer component + +Set the [serviceUrl](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_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. ```csharp From 878e19ea5c9dd91c928fa6d29e92cfaa15ce0154 Mon Sep 17 00:00:00 2001 From: sathiyaseelanksf3503 Date: Tue, 21 Oct 2025 21:48:31 +0530 Subject: [PATCH 03/14] 987332: Updated save and trouble shooting --- .../asp-net-mvc/save-pdf-file/to-amazon-s3.md | 44 +++---- .../to-azure-active-directory.md | 109 +++++++++--------- .../save-pdf-file/to-azure-blob-storage.md | 56 +++++---- .../to-box-cloud-file-storage.md | 34 +++--- .../save-pdf-file/to-google-cloud-storage.md | 38 +++--- .../save-pdf-file/to-google-drive.md | 32 ++--- .../document-loading-issues.md | 24 ++-- 7 files changed, 167 insertions(+), 170 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-amazon-s3.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-amazon-s3.md index 13d2b68c7..6911966c7 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-amazon-s3.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-amazon-s3.md @@ -1,30 +1,30 @@ --- layout: post -title: AWS S3 in ASP.NET MVC Syncfusion PDF Viewer Component -description: Learn here all about how to Save PDF files from AWS S3 in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Save PDF files to AWS S3 in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to save PDF files to AWS S3 using the Syncfusion ASP.NET MVC PDF Viewer component in standalone and server-backed configurations. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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 ASP.NET MVC 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 +## Using the standalone PDF Viewer -To save a PDF file to AWS S3 bucket, you can follow the steps below +To save a PDF file to AWS S3, follow these steps: -**Step 1:** Create AWS S3 account +**Step 1:** Create an AWS S3 account Set up an AWS S3 account by following the instructions on the official AWS site: [AWS Management Console](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html). Create an S3 bucket and generate access keys while ensuring secure storage of credentials. -**Step 2:** Create PDF Viewer Sample in ASP.NET MVC +**Step 2:** Create a PDF Viewer sample in ASP.NET MVC -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to create a simple PDF Viewer sample in ASP.NET MVC. -**Step 3:** Modify the `~/Views/Shared/_Layout.cshtml` File in the Project +**Step 3:** Modify the `~/Views/Shared/_Layout.cshtml` file in the project 1. Add the required scripts using CDN inside the `` of `~/Views/Shared/_Layout.cshtml` file as follows, @@ -39,7 +39,7 @@ Follow instructions provided in the Syncfusion® @@ -123,19 +123,19 @@ N> The **AWSSDK.S3** NuGet package must be installed in your application to use [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 save a PDF file to AWS S3 bucket, you can follow the steps below +To save a PDF file to AWS S3, follow these steps: -**Step 1:** Create AWS S3 account +**Step 1:** Create an AWS S3 account Set up an AWS S3 account by following the instructions on the official AWS site: [AWS Management Console](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html). Create an S3 bucket and generate access keys while ensuring secure storage of credentials. -**Step 2:** Create PDF Viewer Sample in ASP.NET MVC +**Step 2:** Create a PDF Viewer sample in ASP.NET MVC -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample in ASP.NET MVC. -**Step 3:** Modify the `HomeController.cs` File in the Project +**Step 3:** Modify the `HomeController.cs` file in the project 1. Import the required namespaces at the top of the file. @@ -143,10 +143,10 @@ Follow instructions provided in the Syncfusion® 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 -**Step 4:** Set the PDF Viewer Properties in ASP.NET MVC PDF viewer component +**Step 4:** Configure the PDF Viewer component -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 azure container to the documentPath property. +Set the [serviceUrl](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ServiceUrl) property of the PDF Viewer component 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. ```csharp diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-azure-active-directory.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-azure-active-directory.md index e6b5a960c..f945f5eb7 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-azure-active-directory.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-azure-active-directory.md @@ -1,85 +1,103 @@ --- layout: post -title: Save PDF To AAD in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about How to Save Pdf To AAD in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Save PDF files to Azure Active Directory (AAD) in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to load and save PDF files with Azure Active Directory (AAD) using the Syncfusion ASP.NET MVC PDF Viewer component and a server-backed web service. platform: document-processing -control: Save PDF To AAD +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Save PDF To Azure Active Directory in Viewer +# Save PDF files to Azure Active Directory (AAD) ### **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 ASP.NET MVC 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** +### **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. - Click **Add**. - Copy the client secret value immediately, as it will be hidden later. Store it securely. - ![client-secret](../../images/client-secret.png) - ---- + ![client-secret](../images/client-secret.png) -### **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.). - ![storage-account](../../images/storage-account.png) - ---- + ![storage-account](../images/storage-account.png) -### **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. - Select your application and click **Select**. - Click **Review + assign** to finalize the role assignment. - ![add-role](../../images/add-role.png) ---- + ![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) ---- + ![upload-pdf](../images/upload-pdf.png) + +### **Step 5: Server-side configuration** + +1. **Configure server-side code**: + - Open the server-side application (e.g., ASP.NET MVC) and configure the following details in the `PdfViewerController` file: + - `tenantId` (your Azure AD tenant ID), + - `clientId` (your registered application client ID), + - `clientSecret` (your registered application client secret), + - `blobServiceEndpoint` (your storage account blob service URL), + - `containerName` (your container name in Azure Blob Storage). -### **Step 5: ASP.NET MVC PDF Viewer Control Configuration** -1. Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed) to create a simple PDF Viewer sample. +2. **Run the web service**: + - After configuring the necessary details, run the web service to make it accessible. -2. Add the following code snippet in `HomeController.cs`. +### **Client-side configuration** + +1. **Run the ASP.NET MVC sample**: + - Start the ASP.NET MVC (Razor) sample that includes the Syncfusion PDF Viewer. + +2. **Load a PDF from AAD**: + - When the user clicks the **Load from AAD** button, the client-side JavaScript 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 the PDF in the PDF Viewer**: + - Once the Base64 string is received, the PDF Viewer will load the PDF using the `viewer.load()` method. + +### **Save the PDF document 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. + - 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** {% tabs %} {% highlight c# tabtitle="~/HomeController.cs" %} @@ -135,15 +153,7 @@ public async Task SaveToAAD(jsonObjects responseData) {% endhighlight %} {% endtabs %} -3. 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), - - `clientSecret` (your registered application client secret), - - `blobServiceEndpoint` (your storage account blob service URL), - - `containerName` (your container name in Azure Blob Storage). - -4. Add the following code snippet in `Index.cshtml`. +### **Client-side code snippets** {% tabs %} {% highlight c# tabtitle="~/Index.cshtml" %} @@ -196,15 +206,4 @@ public async Task SaveToAAD(jsonObjects responseData) {% endhighlight %} {% endtabs %} -5. Run the Application - - Build and run your MVC application. The PDF Viewer will be displayed with Load from AAD and Save to AAD buttons. - -6. Load PDF from AAD - - Click the Load from AAD button. - - The server fetches the PDF from Azure Blob Storage and loads it into the Syncfusion PDF Viewer. - -7. Save PDF to AAD - - Click the Save to AAD button. - - The server uploads the modified PDF back to Azure Blob Storage. - -[View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-aad). \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-aad). diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-azure-blob-storage.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-azure-blob-storage.md index 316ae40c8..ec169e88d 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-azure-blob-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-azure-blob-storage.md @@ -1,39 +1,39 @@ --- layout: post -title: Save PDF to Azure Blob Storage in ASP.NET MVC PdfViewer | Syncfusion -description: Save PDF files to Azure Blob Storage in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Save PDF files to Azure Blob Storage in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to save PDF files to Azure Blob Storage using the Syncfusion ASP.NET MVC PDF Viewer component in standalone and server-backed configurations. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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 ASP.NET MVC 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 the Azure Blob Storage account +**Step 1:** Create the Azure Blob Storage account. Log in to the Azure Portal. Create a new Storage Account with preferred settings. Note access keys during the setup. Within the Storage Account, create a Blob Container following the steps in this [link](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-create?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&tabs=azure-portal). -**Step 2:** Create PDF Viewer Sample in ASP.NET MVC +**Step 2:** Create an ASP.NET MVC PDF Viewer sample -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow the instructions in this Getting Started [guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample in ASP.NET MVC. This sets up the basic structure of the PDF Viewer application. -**Step 3:** Modify the `HomeController.cs` File in the Project +**Step 3:** Modify the `HomeController.cs` file in the project -1. Import the required namespaces at the top of the file. +1. Import the required namespaces at the top of the file: ```csharp using System.IO; using Azure.Storage.Blobs; ``` -2. Add `Upload()` method to save the downloaded PDF files to Azure Blob Storage container. +2. Add the following private fields to the `HomeController.cs` class, and assign the values to the corresponding fields. Then, add the `Upload()` handler to upload the saved PDF to an Azure Blob Storage container. ```csharp private readonly string ConnectionString = "Your Connection string from Azure"; @@ -75,11 +75,9 @@ public class UploadFileRequest } ``` -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. - -**Step 4:** Set the PDF Viewer Properties in ASP.NET MVC PDF viewer component +N> Replace the placeholders with the actual Azure Storage connection string and container name. -1. 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 in Azure Blob Storage. ```csharp
    @@ -114,7 +112,7 @@ function toolbarClick(args) { ``` -2. Retrieve the PDF viewer instance and save the current PDF as a Blob. Next, read the Blob as an ArrayBuffer and convert it to a Base64 string using arrayBufferToBase64 method. Finally, upload the Base64 string to Azure Blob Storage using the `HomeController`. +4. Retrieve the PDF Viewer instance and save the current PDF as a Blob. Then, read the Blob as an ArrayBuffer, convert it to a Base64 string using the `arrayBufferToBase64` method, and upload the Base64 string to Azure Blob Storage using the `HomeController.cs` handler. ```csharp function saveDocument() { @@ -163,25 +161,25 @@ function arrayBufferToBase64(buffer) { } ``` -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 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%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 +To save a PDF file to Azure Blob Storage, follow these steps: **Step 1:** Create the Azure Blob Storage account Log in to the Azure Portal. Create a new Storage Account with preferred settings. Note access keys during the setup. Within the Storage Account, create a Blob Container following the steps in this [link](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-create?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&tabs=azure-portal). -**Step 2:** Create PDF Viewer Sample in ASP.NET MVC +**Step 2:** Create an ASP.NET MVC PDF Viewer sample -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow the instructions in this Getting Started [guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample in ASP.NET MVC. -**Step 3:** Modify the `HomeController.cs` File in the Project +**Step 3:** Modify the `HomeController.cs` file in the project -1. Import the required namespaces at the top of the file. +1. Import the required namespaces at the top of the file: ```csharp using System.IO; @@ -189,7 +187,7 @@ using Azure.Storage.Blobs; using Azure.Storage.Blobs.Specialized; ``` -3. Modify the `Download()` method to save the downloaded PDF files to Azure Blob Storage container +2. Modify the `Download()` method to save the downloaded PDF files to the Azure Blob Storage container. ```csharp @@ -230,11 +228,11 @@ public ActionResult Download(jsonObjects 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 4:** Set the PDF Viewer Properties in ASP.NET MVC PDF viewer component +**Step 3:** Set the PDF Viewer properties in the ASP.NET MVC PDF Viewer component -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 container to the documentPath property. +Set the `documentPath` property of the PDF Viewer component to the desired PDF file name that you wish to load from Azure Blob Storage. Ensure that the document exists in the target container. ```csharp @@ -250,6 +248,6 @@ Set the `documentPath` property of the PDF viewer component to the desired name ``` -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 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 +[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). diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-box-cloud-file-storage.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-box-cloud-file-storage.md index ff269c908..6f1ea7361 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-box-cloud-file-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-box-cloud-file-storage.md @@ -1,28 +1,28 @@ --- layout: post -title: Box cloud file storage in ASP.NET MVC PDF Viewer Component -description: Save PDF files to Box cloud file storage in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Save PDF files to Box cloud storage in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to save PDF files to Box cloud storage using the Syncfusion ASP.NET MVC PDF Viewer component with a server-backed web service. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Save PDF file to Box cloud file storage +# Save PDF files to Box cloud storage -To save a PDF file to Box cloud file storage, you can follow the steps below +To save a PDF file to Box cloud storage using the ASP.NET MVC PDF Viewer, follow the steps below. This approach uses a server-backed web service. -**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. +Go to the [Box Developer Console](https://developer.box.com/), sign in or create a new account, and create a new Box application. This application provides the required credentials (Client ID and Client Secret) to authenticate and access the Box APIs. Box supports `OAuth 2.0 authentication`. -**Step 2:** Create PDF Viewer Sample in ASP.NET MVC +**Step 2:** Create an ASP.NET MVC PDF Viewer sample -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow the instructions in this Getting Started [guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample in ASP.NET MVC. This sets up the basic structure of the application. -**Step 3:** Modify the `HomeController.cs` File in the Project +**Step 3:** Modify the `HomeController.cs` file in the project -1. Import the required namespaces at the top of the file. +1. Import the required namespaces at the top of the file: ```csharp using Box.V2; @@ -31,7 +31,7 @@ using Box.V2.Config; using Box.V2.Models; ``` -3. Modify the `Download()` method to save the downloaded PDF files to Box cloud file storage folder. +2. Modify the `Download()` method to save the downloaded PDF files to the Box cloud storage folder. ```csharp @@ -71,11 +71,11 @@ public async Task Download(jsonObjects jsonObject) ``` -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 access token and the target folder ID. Use valid Box API credentials for Client ID and Client Secret. -**Step 4:** Set the PDF Viewer Properties in ASP.NET MVC PDF viewer component +**Step 4:** Set the PDF Viewer properties in the ASP.NET MVC PDF Viewer component -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 azure container to the documentPath property. +Set the `documentPath` property of the PDF Viewer component to the desired PDF file name that you wish to load from Box cloud storage. Ensure that the document exists in the target Box folder. ```csharp @@ -91,8 +91,8 @@ Set the `documentPath` property of the PDF viewer component to the desired name ``` -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 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 +[View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-box-cloud-file-storage) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-google-cloud-storage.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-google-cloud-storage.md index e9305b5ff..94937875c 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-google-cloud-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-google-cloud-storage.md @@ -1,36 +1,36 @@ --- layout: post -title: Google Cloud Storage in ASP.NET MVC PDF Viewer Component -description: Save PDF files to Google Cloud Storage in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Save PDF files to Google Cloud Storage in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to save PDF files to Google Cloud Storage using the Syncfusion ASP.NET MVC PDF Viewer component with a server-backed web service. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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 +To save a PDF file to Google Cloud Storage using the ASP.NET MVC PDF Viewer, follow the steps below. This approach uses a server-backed web service. -**Step 1** Create a Service Account +**Step 1:** Create a service account -Open the Google Cloud Console. Navigate to `IAM & Admin` > `Service accounts`. Click `Create Service Account`.` Enter a name, assign roles (e.g., Storage Object Admin), and create a key in JSON format. Download the key file securely. Utilize the downloaded key file in your applications or services for authentication and access to the Google Cloud Storage bucket. For additional details, refer to the [official documentation](https://cloud.google.com/iam/docs/service-accounts-create). +Open the Google Cloud Console and navigate to `IAM & Admin` > `Service accounts`. Click `Create Service Account`, enter a name, assign roles (for example, Storage Object Admin), and create a key in JSON format. Download the key file securely and use it in your application for authentication and access to the Google Cloud Storage bucket. For more details, see the [official documentation](https://cloud.google.com/iam/docs/service-accounts-create) -**Step 2:** Create PDF Viewer Sample in ASP.NET MVC +**Step 2:** Create an ASP.NET MVC PDF Viewer sample -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow the instructions in this Getting Started [guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample in ASP.NET MVC. -**Step 3:** Modify the `HomeController.cs` File in the Project +**Step 3:** Modify the `HomeController.cs` file in the project -1. Import the required namespaces at the top of the file. +1. Import the required namespaces at the top of the file: ```csharp using System.IO; using Google.Cloud.Storage.V1; using Google.Apis.Auth.OAuth2; - ``` -2. Add the following private fields and constructor parameters to the `HomeController.cs` class, In the constructor, assign the values from the configuration to the corresponding fields + +2. Add the following private fields and constructor parameters to the `HomeController.cs` class. In the constructor, assign the values from the configuration to the corresponding fields. ```csharp @@ -50,7 +50,7 @@ using Google.Apis.Auth.OAuth2; ``` -3. Modify the `Download()` method to save the downloaded PDF files to Google Cloud Storage bucket +3. Modify the `Download()` method to save the downloaded PDF files to the Google Cloud Storage bucket. ```csharp @@ -75,13 +75,13 @@ using Google.Apis.Auth.OAuth2; } ``` -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 4:** Set the PDF Viewer Properties in ASP.NET MVC PDF viewer component +**Step 5:** Set the PDF Viewer properties in the ASP.NET MVC PDF Viewer component -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 azure container to the documentPath property. +Set the `documentPath` property of the PDF Viewer component to the desired PDF file name that you wish to load from Google Cloud Storage. Ensure that the document exists in the target bucket. ```csharp @@ -97,6 +97,6 @@ Set the `documentPath` property of the PDF viewer component to the desired name ``` -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 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 +[View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-google-cloud-storage) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-google-drive.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-google-drive.md index efbc4d179..b38863904 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-google-drive.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/save-pdf-file/to-google-drive.md @@ -1,28 +1,28 @@ --- layout: post -title: Google Drive in ASP.NET MVC PDF Viewer Component -description: Save PDF files to Google Drive in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Save PDF files to Google Drive in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to save PDF files to Google Drive using the Syncfusion ASP.NET MVC PDF Viewer component with a server-backed web service. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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 +To save a PDF file to Google Drive using the ASP.NET MVC PDF Viewer, follow the steps below. This approach uses a server-backed web service. -**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). +Create a project in the Google Cloud Console and enable the Google Drive API. Obtain the necessary credentials to access the API. For more information, see the official [guide](https://developers.google.com/drive/api/guides/enable-sdk) -**Step 2:** Create PDF Viewer Sample in ASP.NET MVC +**Step 2:** Create an ASP.NET MVC PDF Viewer sample -Follow instructions provided in the Syncfusion® PDF Viewer Getting Started [Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/-with-server-backed#integrate-pdf-viewer-into-an-aspnet-mvc-application) to create a simple PDF Viewer sample in ASP.NET MVC. +Follow the instructions in this [Getting Started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started-with-server-backed) to create a simple PDF Viewer sample in ASP.NET MVC. -**Step 3:** Modify the `HomeController.cs` File in the Project +**Step 3:** Modify the `HomeController.cs` file in the project -1. Import the required namespaces at the top of the file. +1. Import the required namespaces at the top of the file: ```csharp using System.IO; @@ -32,7 +32,7 @@ using Google.Apis.Services; using Google.Apis.Util.Store; ``` -3. Modify the `Download()` method to save the downloaded PDF files to Google Drive bucket +2. Modify the `Download()` method to save the downloaded PDF files to the Google Drive folder. ```csharp @@ -100,11 +100,11 @@ using Google.Apis.Util.Store; ``` -N> Replace **Your Google Drive Folder ID**, **Your Application name**, **tokenPath** and **Your Path to the OAuth 2.0 Client IDs json file** with your actual Google drive folder ID , Your name for your application, Path to the token file to generate 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. 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`. -**Step 4:** Set the PDF Viewer Properties in ASP.NET MVC PDF viewer component +**Step 4:** Set the PDF Viewer properties in the ASP.NET MVC PDF Viewer component -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 azure container to the documentPath property. +Set the `documentPath` property of the PDF Viewer component to the desired PDF file name that you wish to load from Google Drive. Ensure that the document exists in the target folder. ```csharp @@ -120,6 +120,6 @@ Set the `documentPath` property of the PDF viewer component to the desired name ``` -N> The **Google.Apis.Drive.v3** 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 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 +[View sample in GitHub](https://github.com/SyncfusionExamples/open-save-pdf-documents-in-google-drive) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/troubleshooting/document-loading-issues.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/troubleshooting/document-loading-issues.md index 389771f2c..5cbf5b8e3 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/troubleshooting/document-loading-issues.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/troubleshooting/document-loading-issues.md @@ -1,7 +1,7 @@ --- layout: post -title: Document Loading Issues in Version 23.1 or Newer ASP.NET MVC Pdfviewer Component -description: Learn here all about troubleshooting Document Loading Issues in Version 23.1 or newer in ASP.NET MVC Pdfviewer of Syncfusion Essential JS 2 and more. +title: Fix document loading issues in v23.1 for the ASP.NET MVC 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 ASP.NET MVC PDF Viewer. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC @@ -10,9 +10,9 @@ 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. ```html @@ -30,18 +30,18 @@ If you're experiencing problems with your document not rendering in the viewer, ``` -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. **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. +3. Check network connectivity. The viewer cannot fetch the document without a stable connection. -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. +4. Inspect console errors. Use browser developer tools to identify issues. -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. +5. Validate the initialization order. Initialize the viewer, call `dataBind()`, then call `load()`. -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. +6. Update to the latest viewer version. Issues may be 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. +7. Configure CORS correctly for cross-domain documents. -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. +8. Review Content Security Policy (CSP) settings. Ensure external resources are permitted. See the [Content Security Policy troubleshooting guide](https://ej2.syncfusion.com/javascript/documentation/common/troubleshoot/content-security-policy) for details. -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. From f36999c5a3af512fee6fd0f55a6be5cdf2ea4c20 Mon Sep 17 00:00:00 2001 From: sathiyaseelanksf3503 Date: Wed, 22 Oct 2025 16:19:44 +0530 Subject: [PATCH 04/14] 987332: Revamped common files --- .../PDF-Viewer/asp-net-mvc/accessibility.md | 136 ++++---- .../PDF/PDF-Viewer/asp-net-mvc/download.md | 32 +- .../PDF-Viewer/asp-net-mvc/feature-module.md | 42 +-- .../PDF-Viewer/asp-net-mvc/form-filling.md | 62 ++-- .../getting-started-with-server-backed.md | 56 +-- .../PDF-Viewer/asp-net-mvc/getting-started.md | 42 +-- .../PDF-Viewer/asp-net-mvc/globalization.md | 17 +- .../asp-net-mvc/interaction-mode.md | 24 +- .../PDF-Viewer/asp-net-mvc/magnification.md | 26 +- .../PDF-Viewer/asp-net-mvc/mobile-toolbar.md | 59 ++-- .../PDF/PDF-Viewer/asp-net-mvc/navigation.md | 58 ++-- .../PDF-Viewer/asp-net-mvc/open-pdf-file.md | 48 ++- .../PDF-Viewer/asp-net-mvc/organize-pdf.md | 320 +----------------- .../PDF/PDF-Viewer/asp-net-mvc/overview.md | 34 +- .../PDF/PDF-Viewer/asp-net-mvc/print.md | 192 ++++++++++- .../PDF-Viewer/asp-net-mvc/server-actions.md | 75 ++-- .../PDF/PDF-Viewer/asp-net-mvc/text-search.md | 260 +++++++++++++- .../PDF-Viewer/asp-net-mvc/text-selection.md | 103 ++++++ .../PDF/PDF-Viewer/asp-net-mvc/toolbar.md | 156 ++++++--- 19 files changed, 1014 insertions(+), 728 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md index 12bf9449d..6e02515f9 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md @@ -1,30 +1,29 @@ --- layout: post title: Accessibility with EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about accessibility in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +description: Learn here all about accessibility in ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- +# Accessibility in Syncfusion PDF Viewer component -# Accessibility in Syncfusion® PDF Viewer components +The PDF Viewer component adheres to accessibility guidelines and standards, including [ADA](https://www.ada.gov/), [Section 508](https://www.section508.gov/), and [WCAG 2.2](https://www.w3.org/TR/WCAG22/). It also integrates [WCAG roles](https://www.w3.org/TR/wai-aria/#roles) commonly used for accessibility evaluation. -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. +Below is an outline of the accessibility compliance for the PDF Viewer component: | Accessibility Criteria | Compatibility | -| -- | -- | -| [WCAG 2.2 Support]| Yes | -| [Section 508 Support] | Yes | -| [Screen Reader Support]| Yes | -| [Right-To-Left Support]| Yes | -| [Color Contrast] | Yes | -| [Mobile Device Support]| Intermediate | -| [Keyboard Navigation Support]| Yes | -| [Accessibility Checker Validation] | Yes | -| [Axe-core Accessibility Validation]| Yes | +| --- | --- | +| WCAG 2.2 Support | Yes | +| Section 508 Support | Yes | +| Screen Reader Support | Yes | +| Right-To-Left Support | Yes | +| Color Contrast | Yes | +| Mobile Device Support | Intermediate | +| Keyboard Navigation Support | Yes | +| Accessibility Checker Validation | Yes | +| Axe-core Accessibility Validation | Yes | ``` -N>The icons are embedded in the font file used in above code snippet. +N> The icons are embedded in the font file used in the previous code snippet. -**Step 6:** Add the following scripts for performing user interaction in PDF Viewer in code behind +**Step 5:** Add the following scripts to perform user interactions in the PDF Viewer: ```html + +``` + +Ensure that the controller action returns the PDF file or document token expected by the viewer and that the response respects authentication requirements. Dispose of the dynamically created viewer when it is no longer needed to release resources. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md index 2129d5df0..24807df7b 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md @@ -1,23 +1,24 @@ --- layout: post -title: Access File Name in ASP.NET MVC Pdfviewer Component -description: Learn here all about Access File Name in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Access or Change File Name in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to access the loaded PDF filename and change the download filename using the DocumentLoad and DownloadEnd events in the Syncfusion ASP.NET MVC PDF Viewer. platform: document-processing -control: Access File Name +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- +# Access or change the PDF filename -# Access file name +The Syncfusion ASP.NET MVC PDF Viewer allows you to access the filename of the loaded PDF document, and to customize the filename used when the document is downloaded. This is achieved using the `DocumentLoad` and `DownloadEnd` events. -The PDF Viewer server library allows you to can access the filename of the loaded PDF document using the **documentLoad** and **downloadEnd** event. Using these events, we can access the filename while loading and downloading the PDF document. +The following steps demonstrate how to access and modify the filename in the PDF Viewer: -The following steps are used to access the file name of loaded PDF document in PDF viewer control, +**Step 1:** Create an ASP.NET MVC PDF Viewer sample by following the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/). -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create simple PDF Viewer sample. +**Step 2:** Access and change the filename using the code snippets below. -**Step 2:** Access file name using below code snippet, +In the `DocumentLoad` or `DownloadEnd` event handler, you can access the original filename from `args.fileName`. To change the filename for download, set the `viewer.downloadFileName` property. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -55,4 +56,4 @@ The following steps are used to access the file name of loaded PDF document in P {% endhighlight %} {% endtabs %} -Download the sample [how to access file name](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE-609765609) \ No newline at end of file +Download the sample [how to access file name](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE-609765609) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md index ccfa35601..84bc350cc 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md @@ -1,26 +1,21 @@ --- layout: post -title: Add Annotation in Text Search in ASP.NET MVC | Syncfusion -description: Learn how to add rectangle annotations using search text bounds in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Add Rectangle Annotation via Text Search in ASP.NET MVC | Syncfusion +description: Learn to add rectangle annotations using text search bounds in the Syncfusion ASP.NET MVC PDF Viewer component, including initialization and search controls. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- -# 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 ASP.NET MVC 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 PDF Viewer Getting Started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to create a simple ASP.NET MVC PDF Viewer sample. -**Step 1:** Set Up the PDF Viewer in Your ASP.NET MVC Project - -Follow the steps provided in the [Syncfusion PDF Viewer Getting Started Guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create 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:** Configure the PDF Viewer to add rectangle annotations based on the bounds of highlighted search text. ```cs @using Syncfusion.EJ2 @@ -82,6 +77,8 @@ Follow the steps provided in the [Syncfusion PDF Viewer Getting Started Guide](h ``` -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. +**Step 3:** Handle the `textSearchHighlight` event to add a rectangle annotation for each highlighted match. The `handleTextSearchHighlight` callback in the script adds the annotation by using the bounds returned from the search event. + +Following these steps enables the PDF Viewer to add rectangle annotations at search result locations, improving the visibility of matches in your ASP.NET mvc application. -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-save-button.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-save-button.md index 4bed9a4e8..fce055887 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-save-button.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-save-button.md @@ -1,23 +1,21 @@ --- layout: post -title: Add Save Button in Built-In Toolbar | Syncfusion -description: Learn here all about adding save button in built-in Toolbar in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Add Save Button to Toolbar in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to add, show, hide, enable, and disable a custom Save button in the built-in toolbar of the Syncfusion ASP.NET MVC PDF Viewer component. platform: document-processing -control: Add Save Button -publishingplatform: ASP.NET MVC +control: PDF Viewer documentation: ug --- +# Add a Save button to the built-in toolbar -# Add Save Button in Built-In Toolbar +PDF Viewer supports customizing toolbar items, including adding, showing, hiding, enabling, and disabling items. -PDF Viewer allows you to customize(add, show, hide, enable, and disable) existing items in a toolbar. +- Save button: Define the `Save` button using **CustomToolbarItemModel** and include it alongside existing items via [**ToolbarSettings**](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html). Handle clicks in the toolbarClick event. -* Save button - New `save` button-item can be defined by **CustomToolbarItemModel** and with existing items in [**ToolbarSettings**](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html) property. `Save' button-item click action can be defined in `toolbarclick`. +- Show or hide: Show or hide the `Save` button using [**ToolbarSettings**](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html). Predefined toolbar items are listed under [`ToolbarItem`](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html#Syncfusion_EJ2_PdfViewer_PdfViewerToolbarSettings_ToolbarItems). -* Show, Hide - `Save` button-item can be shown or hidden using the [`ToolbarSettings`](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html) property. Pre-defined toolbar items are available with [`ToolbarItem`](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html#Syncfusion_EJ2_PdfViewer_PdfViewerToolbarSettings_ToolbarItems) . - -* Enable, Disable - `save` button-item can be enabled or disable using `enabletoolbaritem`. +- Enable or disable: Enable or disable the `Save` button using `enableToolbarItem`. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -99,34 +97,33 @@ PDF Viewer allows you to customize(add, show, hide, enable, and disable) existin {% endhighlight %} {% endtabs %} -N> 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 toolbar 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 `save`button-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 the Syncfusion® PDF Viewer. When configuring the toolbar using the `ToolbarSettings` property, include these properties to customize appearance and behavior. -N> When customizing toolbar items, 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/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/capture-page-number.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/capture-page-number.md new file mode 100644 index 000000000..209e404bc --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/capture-page-number.md @@ -0,0 +1,58 @@ +--- +layout: post +title: Capture current page number in ASP.NET MVC PDF Viewer | Syncfusion +description: Discover how to read the current page number in the Syncfusion ASP.NET MVC PDF Viewer using built-in properties. +platform: document-processing +control: PDF Viewer +documentation: ug +--- + +# Capture the current page number being viewed + +The PDF Viewer server library allows you to capture the page number that is currently visible when a PDF document is loaded. Use the [**currentPageNumber**](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_CurrentPageNumber) property to obtain the page that is in view. + +The following steps outline how to capture the current page number. + +**Step 1:** Follow the steps in the [Getting Started with ASP.NET MVC PDF Viewer guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to configure a simple PDF Viewer sample, including the required script and style references. + +**Step 2:** Place the following markup and script in the Razor view after the PDF Viewer component renders to capture the current page number on demand. + + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +The script retrieves the PDF Viewer instance from the page, reads the `currentPageNumber` property, and surfaces the value in an alert dialog when the button is clicked. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/close-comment-panel.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/close-comment-panel.md index a009357d8..b4babf8fc 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/close-comment-panel.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/close-comment-panel.md @@ -1,23 +1,24 @@ --- layout: post -title: Close Comment Panel in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Close Comment Panel in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Close Comment Panel Programmatically in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to programmatically close the comment panel in the Syncfusion ASP.NET MVC PDF Viewer using JavaScript to enhance UI control or user experience. platform: document-processing -control: Close Comment Panel -publishingplatform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC documentation: ug --- +# Close the comment panel programmatically -# Close the comment panel +The Syncfusion ASP.NET MVC PDF Viewer allows you to programmatically close the comment panel using a JavaScript function. This can be useful for customizing the user interface, responding to specific user actions, or enhancing accessibility by providing alternative controls. -The PDF Viewer server library allows you to close the comment panel programmatically using the external button event. +N> The comment panel must already be open for this action to have an effect. -The following steps are used to close the comment panel programmatically in PDF Viewer, +To close the comment panel programmatically, follow these steps: -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create simple PDF Viewer sample. +**Step 1:** Create an ASP.NET MVC PDF Viewer sample by following the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/). -**Step 2:** Add the following code snippet to close the comment panel using button click event +**Step 2:** Add a button and the following JavaScript code to your Razor view (e.g., `Index.cshtml`) to close the comment panel on click: ```html @@ -32,4 +33,4 @@ The following steps are used to close the comment panel programmatically in PDF ``` -Download the sample [how to close comment panel](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE1299715828) \ No newline at end of file +Download the sample [how to close comment panel](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE1299715828) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/configure-annotation-selector-setting.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/configure-annotation-selector-setting.md index 6243dd591..5131d3571 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/configure-annotation-selector-setting.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/configure-annotation-selector-setting.md @@ -1,7 +1,7 @@ --- layout: post -title: Annotation Selector Setting in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Configuring AnnotationSelector setting in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Configure annotation selector settings in Syncfusion ASP.NET MVC PDF Viewer +description: Learn how to customize annotation selector settings in the Syncfusion ASP.NET MVC PDF Viewer component for Essential JS 2. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC @@ -12,11 +12,11 @@ documentation: ug ### Annotation Selector Settings -The [**annotationSelectorSettings**](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerAnnotationSelectorSettings.html) property allows you to customize the appearance and behavior of the annotation selector in the UI. The AnnotationSelectorSettings 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 [**annotationSelectorSettings**](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerAnnotationSelectorSettings.html) property customizes the appearance and behavior of the annotation selector in the UI. These settings control border colors, sizes, and handle styles so users can differentiate selected annotations and adjust them precisely during review workflows. ### How to Configure Annotation Selector Settings -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/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/asp-net-mvc/getting-started) to create simple PDF Viewer sample and include the required EJ2 script and style assets in the layout or view. **Step 2:** Set Up PDF Viewer in Your View: Add the following code snippet to your view (e.g., Index.cshtml) @@ -35,7 +35,7 @@ The [**annotationSelectorSettings**](https://help.syncfusion.com/cr/aspnetmvc-js
    ``` -**Step 3:** Add JavaScript for Annotation Selector Settings: Below the PDF Viewer in your view, include the following script to configure the annotationSelectorSettings +**Step 3:** Add JavaScript for Annotation Selector Settings: Below the PDF Viewer in your view, include the following script to configure the annotationSelectorSettings. ``` ``` + #### Key properties include: * **selectionBorderColor**: Sets the color for the border around selected annotations. @@ -75,4 +76,4 @@ The [**annotationSelectorSettings**](https://help.syncfusion.com/cr/aspnetmvc-js * **resizerCursorType**: Sets the cursor style when hovering over the resizer, improving user interaction. -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/control-annotation-visibility.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/control-annotation-visibility.md index 7437877a3..01188aa70 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/control-annotation-visibility.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/control-annotation-visibility.md @@ -1,28 +1,24 @@ --- layout: post -title: Annotations Visibility in EJ2 ASP.NET MVC PdfViewer | Syncfusion -description: Learn how to Control PDF Annotations Visibility in the Syncfusion ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Control annotation visibility in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to control the visibility of PDF annotations in the ASP.NET MVC PDF Viewer, ensuring annotations appear only in the viewer as needed. platform: document-processing -control: Control PDF Annotations Visibility +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Control PDF Annotations Visibility in PDF Viewer +# Control annotation visibility in the ASP.NET MVC PDF Viewer -### Overview +A concise guide to controlling annotation visibility so that annotations remain visible in the Syncfusion PDF Viewer while being hidden in the downloaded PDF. -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. +## Steps to control annotation visibility -### How to Control Annotation Visibility +**Step 1:** Follow the steps provided in the [Syncfusion ASP.NET MVC PDF Viewer getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to create a simple PDF Viewer sample. -**Step 1:** Set Up the PdfViewer in Your ASP.NET MVC Project +**Step 2:** Add buttons for annotation modification and downloading. - Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. - -**Step 2:** Set Up Your ASP.NET MVC Component - -Create an ASP.NET MVC component and update the template to include a button that triggers the download operation. Additionally, create a function to save the document with the PDF annotation flag set to `noView`. +Define the viewer markup and include a button that triggers the download workflow. The following Razor code also wires up helper functions that update annotation flags before saving the document. {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -93,6 +89,16 @@ Create an ASP.NET MVC component and update the template to include a button that {% 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. +**Step 3:** Add annotations to the PDF document. + +The `documentLoaded` function in the script above programmatically inserts highlight, underline, and strikethrough annotations. Extend this logic to include any additional annotations you require. + +**Step 4:** Add event listeners for button clicks. + +The button defined in the markup triggers the `save` function, allowing you to adjust annotation visibility before downloading the PDF. + +**Step 5:** Modify annotation flags. + +Inside the `save` function, the script iterates through each annotation and applies the `noView` flag so the annotations remain hidden in the downloaded file while still appearing in the viewer. -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md index 3cca2bf3e..d407896fb 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/convert-pdf-library-bounds-to-pdf-viewer-bounds.md @@ -1,32 +1,30 @@ --- layout: post -title: Converting Library Bounds in EJ2 ASP.NET MVC PdfViewer | Syncfusion -description: Learn how to convert Library bounds into Viewer bounds in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Convert PDF Library bounds to PDF Viewer bounds in ASP.NET MVC | Syncfusion +description: Learn how to convert PDF Library bounds into PDF Viewer bounds when exporting annotations, ensuring accurate placement in the ASP.NET MVC PDF Viewer. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Converting PDF Library Bounds to PDF Viewer Bounds +# Convert PDF Library bounds to PDF Viewer bounds in ASP.NET MVC -### 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 the Blob URL to an 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 that can be processed for annotation bounds. {% tabs %} {% highlight html tabtitle="Server-Backed" %} @@ -110,8 +108,8 @@ This function fetches the blob data and converts it into a JSON object. {% endhighlight %} {% endtabs %} -### 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. +## Conclusion -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +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/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-context-menu.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-context-menu.md index f0ce40b78..c5d70acca 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-context-menu.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-context-menu.md @@ -1,20 +1,20 @@ --- layout: post -title: Customize context menu with EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Customize context menu in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Customize the context menu in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to add and customize custom context menu options in the Syncfusion ASP.NET MVC PDF Viewer using addCustomMenu, customContextMenuSelect, and related events. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Customize context menu +# Customize the context menu in the ASP.NET MVC 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()` method. Define actions for custom items with the `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. ``` ``` -### Customize custom option in context menu +## Customize the default vs custom menu -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. +Toggle the display of the default context menu. When the `addCustomMenu` parameter is `true`, the default menu is hidden; when it is `false`, default menu items are displayed alongside custom items. ``` ``` -#### Customize added context menu items +### Show or hide custom items before opening -The following code shows how to hide/show added custom option in context menu using the `customContextMenuBeforeOpen()` method. +Use the `customContextMenuBeforeOpen()` method to hide or show custom options dynamically. ``` ``` -The following is the output of custom context menu with customization. +## Sample: Custom context menu output + +The following sample illustrates the customized context menu. ``` diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-font-signature-field.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-font-signature-field.md index d6b8e78bc..523ccfe49 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-font-signature-field.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-font-signature-field.md @@ -1,22 +1,24 @@ --- layout: post -title: How to change the font family in Syncfusion ASP .MVC. -description: Learn how to change the font family in Form Field's Type Signature in Syncfusion ASP .MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Change font family in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to change the font family for form field type signatures and initials in the Syncfusion ASP.NET MVC PDF Viewer using typeSignatureFonts and typeInitialFonts. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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 -The Syncfusion® PDF Viewer provides the ability to change the font family for Signature and Initial Field using `typeSignatureFonts` and `typeInitialFonts` 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. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. +### Signature field property -**Step 2:** Insert the following code snippet to implement the functionality for using custom fonts in Signature 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/asp-net-mvc/getting-started) to create a simple PDF Viewer sample. + +**Step 2:** Use the following code to apply custom fonts to the Signature field. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -47,8 +49,9 @@ The Syncfusion® PDF Viewer provides the abi {% endhighlight %} {% endtabs %} -### Initial Field property -Insert the following code snippet to implement the functionality for using custom fonts in Initial field. +### Initial field property + +Use the following code to apply custom fonts to the Initial field. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -79,4 +82,4 @@ Insert the following code snippet to implement the functionality for using custo {% 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. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-fonts.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-fonts.md index fde16344b..7de673a26 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-fonts.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/custom-fonts.md @@ -1,47 +1,44 @@ --- 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 ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Add custom fonts in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to add and load custom TTF fonts for documents displayed in the Syncfusion ASP.NET MVC PDF Viewer using the customFonts property. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# How to add custom fonts to the PDF viewer used in the PDF document +# Add custom fonts in the ASP.NET MVC 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 ASP.NET MVC 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. + +{% tabs %} +{% highlight html tabtitle="Standalone" %} ```html -
    - -
    +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CustomFonts(["arialbd.ttf", "arial.ttf", "BKANT.TTF", "calibri.ttf", "GARA.TTF", "GARAIT.TTF", "msgothic.ttc", "trebuc.ttf", "wingding.ttf"]).Render()
    - +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +```html + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CustomFonts(["arialbd.ttf", "arial.ttf", "BKANT.TTF", "calibri.ttf", "GARA.TTF", "GARAIT.TTF", "msgothic.ttc", "trebuc.ttf", "wingding.ttf"]).Render() +
    ``` +{% endhighlight %} +{% endtabs %} -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. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/customize-text-search-color.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/customize-text-search-color.md new file mode 100644 index 000000000..1dc2d753d --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/customize-text-search-color.md @@ -0,0 +1,101 @@ +--- +layout: post +title: Customize text search color in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about Customize text search color in Syncfusion ASP.NET MVC Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: Customize text search color +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Customize text search color in ASP.NET MVC Pdfviewer control + +To change the text search color in the Syncfusion PDF viewer, you can use the **searchColor** property of the searchModule object. This property accepts a string value that represents the color in hexadecimal format. + +```ts + +viewer.textSearchColorSettings.searchColor = "#FF0000"; + +``` + +This will set the text search color to red. You can use any valid hexadecimal color code to set the text search color to the desired color. + +You can also use the **searchHighlightColor** property of the searchModule object to change the highlight color of the search results. This property also accepts a string value in hexadecimal format. + +```ts + +viewer.textSearchColorSettings.searchHighlightColor = "#0000FF"; + +``` + +This will set the highlight color of the search results to blue. + +* [**searchColor**](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerTextSearchColorSettings.html#Syncfusion_EJ2_PdfViewer_PdfViewerTextSearchColorSettings_SearchColor) +* [**searchHighlightColor**](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerTextSearchColorSettings.html#Syncfusion_EJ2_PdfViewer_PdfViewerTextSearchColorSettings_SearchHighlightColor) + +Here is an example of how you can use the searchHighlightColor property and searchColor property: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + + + + + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnableTextSearch(true).TextSearchColorSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerTextSearchColorSettings { SearchColor = "#FF0000", SearchHighlightColor = "#0000FF" }).Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnableTextSearch(true).TextSearchColorSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerTextSearchColorSettings { SearchColor = "#FF0000", SearchHighlightColor = "#0000FF" }).Render() +
    + + + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/default-width-height.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/default-width-height.md index caf51a75b..af524b843 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/default-width-height.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/default-width-height.md @@ -1,16 +1,18 @@ --- layout: post -title: How to change default size in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn how to change the default width and height in the ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Set Width and Height of ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to set the width and height of the Syncfusion ASP.NET MVC PDF Viewer component to control its dimensions in your web application. platform: document-processing -control: How to change the default width and height -publishingplatform: document-processing -documentation: UG +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug --- -# How to change the default width and height +# Set width and height of PDF Viewer -To change the default width and height of the Syncfusion® PDF Viewer, modify the `Width` and `Height` properties of the PDFViewer control. +To control the dimensions of the Syncfusion ASP.NET MVC PDF Viewer, you can modify its `Width` and `Height` properties. + +To change the width and height of the PDF Viewer, update the `Width` and `Height` properties of the `PdfViewer` control as follows: ```html
    @@ -19,6 +21,7 @@ To change the default width and height of the SyncfusiondeleteAnnotationbyId + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/delete-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/delete-annotation.md index af549c8ab..00195aa59 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/delete-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/delete-annotation.md @@ -1,22 +1,22 @@ --- layout: post -title: Delete Annotation in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Delete Annotation in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Delete Specific Annotation in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to programmatically delete a specific annotation by its ID in the Syncfusion ASP.NET MVC PDF Viewer. platform: document-processing -control: Delete Annotation -publishingplatform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC documentation: ug --- -# Delete a specific annotation using deleteAnnotationById +# Delete a specific annotation by ID -The PDF Viewer server 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. +The Syncfusion ASP.NET MVC PDF Viewer allows you to programmatically delete a specific annotation from a PDF document using the `deleteAnnotationById()` method. This method is useful for removing annotations based on user interaction, specific application logic, or cleanup tasks. -The following steps are used to delete a specific annotation from PDF Document. +To delete a specific annotation, follow these steps: -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create simple PDF Viewer sample. +**Step 1:** Create an ASP.NET MVC PDF Viewer sample by following the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/). -**Step 2:** Use the following code snippet to delete a specific annotation using `deleteAnnotationById()` method. +**Step 2:** Use the following code snippet to add a button and a JavaScript function to your Razor view (e.g., `Index.cshtml`) that will delete a specific annotation. The example assumes you have an annotation loaded and its ID can be accessed dynamically. ```html @@ -31,4 +31,4 @@ The following steps are used to delete a specific annotation from PDF Document. ``` -Download the sample [how to delete a specific annotation using deleteAnnotationById](https://www.syncfusion.com/downloads/support/directtrac/general/ze/EJ2MvcSample357842164.zip) \ No newline at end of file +Download the sample [how to delete a specific annotation using deleteAnnotationById](https://www.syncfusion.com/downloads/support/directtrac/general/ze/EJ2MvcSample357842164.zip) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/disable-context-menu.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/disable-context-menu.md new file mode 100644 index 000000000..671f46a93 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/disable-context-menu.md @@ -0,0 +1,34 @@ +--- +layout: post +title: Disable context menu in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about Disable context menu in Syncfusion ASP.NET MVC Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: Disable context menu +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Disable context menu in ASP.NET MVC Pdfviewer control + +To disable the context menu in the Syncfusion PDF viewer control, you can use the [**ContextMenuOption**](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ContextMenuOption) property as `'None'` to hide all context menu options. Default value of the **ContextMenuOption** is `'RightClick'`. + +Here is an example of how you can use the **ContextMenuOption** to disable context menu in the PDF Viewer: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ContextMenuOption(Syncfusion.EJ2.PdfViewer.ContextMenuAction.None).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ContextMenuOption(Syncfusion.EJ2.PdfViewer.ContextMenuAction.None).Render() +
    + +{% endhighlight %} +{% endtabs %} + +This will hide the context menu and prevent the user from right-clicking on the PDF viewer. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/disable-tile-rendering.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/disable-tile-rendering.md new file mode 100644 index 000000000..c146505e9 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/disable-tile-rendering.md @@ -0,0 +1,36 @@ +--- +layout: post +title: Disable tile rendering in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about Disable tile rendering in Syncfusion ASP.NET MVC Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: Disable tile rendering +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Disable tile rendering in ASP.NET MVC Pdfviewer control + +To disable the tile rendering feature in the Syncfusion PDF viewer control, you can use the **enableTileRendering** property. This property allows you to enable or disable the tile rendering feature, which is used to improve the performance of the PDF viewer when displaying large documents. + +To disable the tile rendering feature, you can set the **enableTileRendering** property to `false`. + +By default, the tile rendering feature is enabled in the PDF viewer. Disabling it may improve the performance of the PDF viewer when displaying small documents, but it may also reduce the performance when displaying large documents. + +Here is an example of how you can use the **enableTileRendering** property: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TileRenderingSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerTileRenderingSettings { EnableTileRendering = false }).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TileRenderingSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerTileRenderingSettings { EnableTileRendering = false }).Render() +
    + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/display-document-without-downloading.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/display-document-without-downloading.md new file mode 100644 index 000000000..581f8a57f --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/display-document-without-downloading.md @@ -0,0 +1,74 @@ +--- +layout: post +title: Display PDFs without downloading in ASP.NET MVC PDF Viewer +description: Learn how to display PDF documents without triggering downloads by using the Syncfusion ASP.NET MVC PDF Viewer. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Display document without downloading + +The PDF Viewer server library allows the control to reload a PDF from memory so users can view the file without downloading it to the local device by calling the **load** method. + +Use the following steps to display the document in the viewer without initiating a browser download. + +**Step 1:** Follow the steps in the [Getting Started with ASP.NET MVC PDF Viewer guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to create a sample and reference the required EJ2 scripts, styles, and (if needed) the server controller. + +**Step 2:** Use the following code snippet to reload the document from the saved blob. Place the script after the PDF Viewer markup so it runs once the viewer instance is available. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +Both **Standalone** and **Server-Backed** examples share the same client logic; configure the `serviceUrl` in the server-backed scenario so the viewer can delegate processing to the ASP.NET MVC controller. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/download-start-event.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/download-start-event.md index d7895bae2..f0344ba64 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/download-start-event.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/download-start-event.md @@ -1,20 +1,22 @@ --- layout: post -title: Controlling File Downloads in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here how to Controlling File Downloads in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Control file downloads in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to intercept and control file downloads in the Syncfusion ASP.NET MVC PDF Viewer using the downloadStart event. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Controlling File Downloads in Syncfusion® PDF Viewer +# Control file downloads in the ASP.NET MVC 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. +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. -### Using the downloadStart Event +By default, `args.cancel` is `false`, so the download proceeds unless explicitly canceled. -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. +## Flexibility + +Leverage the [`downloadStart`](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_DownloadStart) event to apply custom rules for allowing or preventing downloads based on application needs. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -54,10 +56,3 @@ function downloadStart(args) { {% 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. - -### Enhanced 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 diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/enable-local-storage.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/enable-local-storage.md index 846b262ec..cb264de2d 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/enable-local-storage.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/enable-local-storage.md @@ -1,20 +1,20 @@ --- layout: post -title: Managing Local Storage in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn how to manage local storage in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Manage local storage in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to control session-specific data storage in the Syncfusion ASP.NET MVC PDF Viewer using the enableLocalStorage property. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Managing Local Storage in Syncfusion PDF Viewer +# Manage local storage in the ASP.NET MVC 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 html tabtitle="Standalone" %} @@ -41,14 +41,10 @@ Set the `enableLocalStorage` property to manage whether the PDF Viewer uses sess {% 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. +- 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. -### 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. - -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/enable-resize.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/enable-resize.md new file mode 100644 index 000000000..ce93a4378 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/enable-resize.md @@ -0,0 +1,32 @@ +--- +layout: post +title: Enable resize in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about Enable resize in Syncfusion ASP.NET MVC Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: Enable resize +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Enable resize in ASP.NET MVC Pdfviewer control + +To enable the resizer for the text markup annotation in Syncfusion PDF viewer, you can use the [**enableTextMarkupResizer**](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_EnableTextMarkupResizer) property. Default value of the property is false. + +Here is an example of how you can enable the resizer for the text markup annotation: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnableTextMarkupResizer(true).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnableTextMarkupResizer(true).Render() +
    + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/enable-text-selection.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/enable-text-selection.md index 495a076e0..31e90a0d7 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/enable-text-selection.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/enable-text-selection.md @@ -1,20 +1,20 @@ --- layout: post -title: Enable or Disable Text Selection in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about enabling text selection in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Enable or disable text selection in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to enable or disable text selection in the Syncfusion ASP.NET MVC PDF Viewer using the enableTextSelection property. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Enable or Disable Text Selection in Syncfusion PDF Viewer +# Enable or disable text selection in the ASP.NET MVC 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. By default, text selection is enabled, but you can disable it as shown in the following example: +Set initial behavior when instantiating the PDF Viewer. Text selection is enabled by default, but you can disable it as shown below. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -37,9 +37,9 @@ You can set the initial text selection behavior when initializing the PDF Viewer {% 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 controls. The following example demonstrates how to toggle text selection with button clicks. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -76,17 +76,17 @@ You can change the text selection behavior at runtime using buttons, menu option {% 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. - **Controlled Access**: Implement conditional text selection depending on user permissions or document sections. -## 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. N> When text selection is disabled, users will not be able to select or copy text from the document, which can be useful for protecting document content in certain scenarios. -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/export-as-image-standalone.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/export-as-image-standalone.md index 8cdc3dc45..129d588df 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/export-as-image-standalone.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/export-as-image-standalone.md @@ -1,22 +1,22 @@ --- layout: post -title: Export As Image in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Export As Image in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Export PDF pages as images in Syncfusion ASP.NET MVC PDF Viewer +description: Learn how to export PDF pages as Base64-encoded images by using the Syncfusion ASP.NET MVC PDF Viewer component. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Export As Image from PDF document +# Export PDF pages as images -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. +The PDF Viewer library enables exporting individual pages as Base64-encoded image strings by using the **exportAsImage()** method and exporting page ranges as Base64-encoded image strings by using the **exportAsImages()** method. -The following steps are used to exportAsImage. +Follow these steps to export PDF pages as images. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. +**Step 1:** Follow the steps in the [Getting Started with ASP.NET MVC PDF Viewer guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to create a sample and reference the required EJ2 script and style resources. -**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:** Add the following code to enable exporting a specified page or a range of pages as Base64-encoded image strings. Place the script after the viewer markup so it executes once the PDF Viewer instance is available. {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -41,7 +41,7 @@ The following steps are used to exportAsImage. {% endhighlight %} {% endtabs %} -Similarly, to code snippet for exports the specified page as a Base64-encoded image string, allowing for custom image size: +Use the following code snippet to export a specified page as a Base64-encoded image string while supplying a custom image size: {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -67,7 +67,7 @@ Similarly, to code snippet for exports the specified page as a Base64-encoded im {% endhighlight %} {% endtabs %} -Similarly, to code snippet for exports the range of pages as Base64-encoded image strings: +Use this code snippet to export a range of pages as Base64-encoded image strings: {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -92,7 +92,7 @@ Similarly, to code snippet for exports the range of pages as Base64-encoded imag {% endhighlight %} {% endtabs %} -Similarly, to code snippet for exports the range of pages as Base64-encoded image strings, allowing for custom image size: +Use this code snippet to export a range of pages as Base64-encoded image strings while specifying a custom image size: {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -118,4 +118,4 @@ Similarly, to code snippet for exports the range of pages as Base64-encoded imag {% endhighlight %} {% endtabs %} -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 +By following these steps, you can integrate the export-as-image APIs into the EJ2 PDF Viewer. Store the generated Base64 data securely and consider optimizing image size when working with large documents. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/export-as-image.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/export-as-image.md index 6c3ea4251..de0b0c98b 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/export-as-image.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/export-as-image.md @@ -1,18 +1,24 @@ --- layout: post -title: Export As Image in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn how to export as image in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Export pages as images in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to export pages as Base64-encoded images in the Syncfusion ASP.NET MVC PDF Viewer using the ExportAsImage method family. platform: document-processing -control: Export As Image -publishingplatform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC documentation: ug --- -# Exporting PDFs as raster images +# Export pages as images in the ASP.NET MVC PDF Viewer -The PDF Viewer server library allows the PDF document pages to be exported as raster images. Exporting can be done using the ExportAsImage() method. This option helps to convert a PDF into an image. The APIs available to export the PDF document pages as images are listed as follows: +Export individual pages or a range of pages from a PDF document as raster images using the `ExportAsImage` APIs. These helpers convert pages to bitmaps that you can save, process, or serve for download. -## ExportAsImage(int pageindex) +## Steps to export pages as images + +**Step 1:** Follow the steps in the [Syncfusion ASP.NET MVC PDF Viewer getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to create a simple PDF Viewer application. + +**Step 2:** Choose the appropriate `ExportAsImage` overload to export pages with the required DPI, size, or range settings. The following examples demonstrate each option. + +### Export a single page Exports the specified page as image using the Pdfium rendering engine. @@ -29,7 +35,7 @@ bitmapimage.Save(@"currentDirectory/../../../../Images/" + "bitmapImage.png"); ``` -## ExportAsImage(int pageIndex, float dpiX, float dpiY) +### Export a page with custom DPI Exports the specified page as image with respect to the specified DPI values. @@ -46,7 +52,7 @@ bitmapimage.Save(@"currentDirectory/../../../../Images/" + "bitmapImage.png"); ``` -## ExportAsImage(int pageIndex, SizeF customSize, bool keepAspectRatio) +### Export a page with custom size Exports the specified page as image with respect to the specified custom size. @@ -63,7 +69,7 @@ bitmapimage.Save(@"currentDirectory/../../../../Images/" + "bitmapImage.png"); ``` -## ExportAsImage(int pageIndex, SizeF customSize, float dpiX, float dpiY, bool keepAspectRatio) +### Export a page with custom size and DPI Exports the specified page as image with respect to the custom size and the specified DPI values. @@ -81,7 +87,7 @@ bitmapimage.Save(@"currentDirectory/../../../../Images/" + "bitmapImage.png"); ``` -## ExportAsImage(int startIndex, int endIndex) +### Export a range of pages Exports the specified pages as images using the Pdfium rendering engine. @@ -101,7 +107,7 @@ for (int i =0; i < pdfExportImage.PageCount; i++) ``` -## ExportAsImage(int startIndex, int endIndex, float dpiX, float dpiY) +### Export a range with custom DPI Exports the specified pages as images with respect to the specified DPI values. @@ -121,7 +127,7 @@ for (int i =0; i < pdfExportImage.PageCount; i++) ``` -## ExportAsImage(int startIndex, int endIndex, SizeF customSize, bool keepAspectRatio) +### Export a range with custom size Exports the specified pages as images with respect to the specified custom size. @@ -141,7 +147,7 @@ for (int i =0; i < pdfExportImage.PageCount; i++) ``` -## ExportAsImage(int startIndex, int endIndex, SizeF customSize, float dpiX, float dpiY, bool keepAspectRatio) +### Export a range with custom size and DPI Exports the specified pages as images with respect to the custom size and the specified DPI values. @@ -161,4 +167,4 @@ for (int i = 0; i < pdfExportImage.PageCount; i++) ``` -N> Ensure the provided document path and output image saved locations in your application level. \ No newline at end of file +N> Ensure the provided document path and the output image save locations are updated to match your application. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-completed.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-completed.md index c4477ada2..036114b59 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-completed.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-completed.md @@ -1,18 +1,18 @@ --- layout: post -title: extractTextCompleted Event in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about extractTextCompleted Event in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Use extractTextCompleted in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to use the extractTextCompleted event and isExtractText property in the Syncfusion ASP.NET MVC PDF Viewer to extract text and bounds. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Extract text using extractTextCompleted Event +# Use extractTextCompleted to extract text in ASP.NET MVC 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** property and [**extractTextCompleted**](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.PdfViewer.PdfViewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ExtractTextCompleted) event. `extractTextCompleted` event Triggers when an text extraction is completed in the PDF Viewer. +Use the **isExtractText** property and the [**extractTextCompleted**](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.PdfViewer.PdfViewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ExtractTextCompleted) event to extract page text along with bounds. -Here is an example of how you can use the extractTextCompleted event: +The following example shows how to enable text extraction and handle the completion event: {% tabs %} {% highlight cshtml tabtitle="Standalone" %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-option.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-option.md index 479daa43f..f1110007e 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-option.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-option.md @@ -1,16 +1,16 @@ --- layout: post -title: Extract text Option in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Extract text Option in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Configure extractTextOption in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to use the extractTextOption property in the Syncfusion ASP.NET MVC PDF Viewer to control text extraction and memory usage. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Extract Text Option in Syncfusion PDF Viewer +# Configure extractTextOption in the ASP.NET MVC 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: @@ -24,8 +24,6 @@ The `extractTextOption` property in the Syncfusion PdfViewer control allows you The following example demonstrates how to configure the `extractTextOption` property to control the level of text extraction: - - {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -51,15 +49,15 @@ The following example demonstrates how to configure the `extractTextOption` prop {% endhighlight %} {% endtabs %} -### Description of Each Option -**extractTextOption.TextAndBounds (default):** This option returns both plain text and its positional data (bounds). Use this option when you need to access both the content of the PDF and its layout for further processing or analysis. +### Description of each option +**extractTextOption.TextAndBounds (default):** Returns both plain text and positional data (bounds). Use this option when you need both the content of the PDF and its layout for further processing. -**extractTextOption.TextOnly:** This option returns only the plain text from the PDF. No positional or layout data is included. Note that when using this option, text search functionality will be disabled. In such cases, it is recommended to use findTextAsync for text searching. +**extractTextOption.TextOnly:** Returns only the plain text from the PDF. No positional data is included. Text search functionality is disabled when using this option; use `findTextAsync` for searching. -**extractTextOption.BoundsOnly:** This option returns only the layout information (bounds) of the text, excluding the actual content. It is useful when the focus is on the position of text elements rather than the text itself. +**extractTextOption.BoundsOnly:** Returns only layout information (bounds) of the text, excluding the actual content. Useful when focusing on text positions rather than the text itself. -**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. +**extractTextOption.None:** Does not extract or return any text or layout information. Use this setting to optimize memory usage when text extraction is unnecessary. This setting applies to 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/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-using-text-collection.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-using-text-collection.md index ceaab1b87..c3741616a 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-using-text-collection.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text-using-text-collection.md @@ -1,24 +1,33 @@ --- layout: post -title: Extract Text Using Text Collection in Syncfusion ASP.NET MVC Pdfviewer Component -description: Learn here all about Extract Text Using Text Collection in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Extract text using TextLineCollection in Syncfusion ASP.NET MVC PDF Viewer +description: Learn how to extract text with bounds from PDF pages by using the TextLineCollection API in the Syncfusion ASP.NET MVC PDF Viewer. platform: document-processing -control: Extract Text Using Text Collection +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Extract Text using TextLineCollection +# Extract text using TextLineCollection -The PDF Viewer server library allows you to extract the text from a page along with the bounds using TextLineCollection. Text extracting can be done using the **ExtractText()** method. +The PDF Viewer server library can extract text and its bounding information from a PDF page by using the **ExtractText()** method. The `TextLineCollection` output contains each line of text along with coordinates that help map the content back to the page. -Add the following dependency to your application using the `NuGet Package Manager`. -* Syncfusion.EJ2.PdfViewer.AspNet.Mvc5 +## Prerequisites -N>From Volume 2 2019 release Syncfusion.Pdf.AspNet.Mvc5 and Syncfusion.Compression.Base packages are added as dependency for PDF Viewer control. Ensure the dependency packages are referred in your application properly. +Add the following dependency to your application by using the NuGet Package Manager: -The following code snippet explains how to extract the text from a page using TextLineCollection. +* Syncfusion.EJ2.PdfViewer.AspNet.Core + +N> From the Volume 2 2019 release, the Syncfusion.Pdf.Net.Core and Syncfusion.Compression.Net.Core packages are added as dependencies for the PDF Viewer control. Ensure these packages are referenced correctly in your project. + +## Steps to extract text from a PDF page + +1. Load the PDF document into a `PdfLoadedDocument` instance. +2. Retrieve the target page as a `PdfLoadedPage` object. +3. Call `ExtractText` to obtain the text and the corresponding `TextLineCollection`. + +The following code snippet demonstrates the extraction workflow: ```cs @@ -34,6 +43,6 @@ var text = page.ExtractText(out TextLineCollection textLineCollection); ``` -Find the sample [How to extract text using TextLineCollection](https://www.syncfusion.com/downloads/support/directtrac/general/ze/Wordbound1901545288.zip) +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/Load%20N%20no%20of%20pages) -N>Ensure the provided document path and output text saved locations in your application level. \ No newline at end of file +N> Ensure the document path and any output locations are valid for the hosting environment, and dispose of the `PdfLoadedDocument` after extraction to release file handles. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text.md index a96d0a2df..5f9670c2b 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/extract-text.md @@ -1,22 +1,22 @@ --- layout: post -title: Extract Text in Syncfusion ASP.NET MVC Pdfviewer Component -description: Learn here all about Extract Text in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Use extractText in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to use the extractText method in the Syncfusion ASP.NET MVC PDF Viewer to extract text and bounds from one or more pages. platform: document-processing -control: Extract Text +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Extract Text from PDF document -## Extract Text in server backed mode. +# Extract text using extractText in the ASP.NET MVC PDF Viewer -The PDF Viewer server library allows you to extract the text from a page along with the bounds. Text extracting can be done using the ExtractText() method. Add the following dependency to your application using the `NuGet Package Manager`. -* Syncfusion.EJ2.PdfViewer.AspNet.Mvc5 +The `ExtractText` APIs let you retrieve text from one or more pages, returning either plain text or text with bounds for each element. Use them on the server or in the standalone viewer depending on your scenario. -N>From Volume 2 2019 release Syncfusion.Pdf.AspNet.Mvc5 and Syncfusion.Compression.Base packages are added as dependency for PDF Viewer control. Ensure the dependency packages are referred in your application properly. +N>From Volume 2 2019 release Syncfusion.Pdf.Net.Core and Syncfusion.Compression.Net.Core packages are added as dependency for PDF Viewer control. Ensure the dependency packages are referred in your application properly. -The following code snippet explains how to extract the text from a page. +## Extract text on the server (optional) + +The server-side `ExtractText()` method returns text along with bounds so you can process it outside the viewer. ```cs @@ -31,38 +31,32 @@ System.IO.File.WriteAllText("../../Data/data.txt", text); ``` -Sample: -[https://www.syncfusion.com/downloads/support/directtrac/general/ze/ExtractText853154752](https://www.syncfusion.com/downloads/support/directtrac/general/ze/ExtractText853154752) - -N>Ensure the provided document path and output text saved locations in your application level. - -## Extract Text Method in standalone mode +[Download ExtractText sample](https://www.syncfusion.com/downloads/support/directtrac/general/ze/ExtractText853154752) -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. +N> Ensure the document path and output locations are updated for your application. -### 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 (standalone mode) -#### Parameters: -**startIndex:** The starting page index for text extraction (0-based index). +The viewer’s `extractText` method retrieves text from a single page or a range of pages. Use the optional arguments to choose between plain text (`TextOnly`) and detailed text data (`TextAndBounds`). -**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. +### Parameters +- **startIndex:** The starting page index (0-based). -**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. +- **endIndex or isOptions:** Either the ending page index for multi-page extraction or an option for single-page extraction. -***TextOnly:*** Extracts only the plain text content without bounds or additional information. +- **options (optional):** Additional settings such as `'TextOnly'` or `'TextAndBounds'`. -***TextAndBounds:*** Extracts text content along with its bounds (coordinates) within the PDF. +- **TextOnly:** Extracts only the plain text content without bounds or additional information. -#### Returns: -The method returns a Promise that resolves to an object containing two properties: +- **TextAndBounds:** Extracts text content along with its bounds (coordinates) within the PDF. -**textData:** An array of TextDataSettingsModel objects, each representing the details of the extracted text (including bounds, page text, etc.). +### Returns +A Promise that resolves with: +- **textData:** An array of `TextDataSettingsModel` entries containing detailed text information, including bounds. -**pageText:** A concatenated string of plain text extracted from the specified page(s). +- **pageText:** A concatenated string of text from the requested page range. -### Usage of extractText in Syncfusion PdfViewer Control -Here is an example that demonstrates how to use the extractText method: +### Usage example {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -103,9 +97,9 @@ Here is an example that demonstrates how to use the extractText method: {% 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. +### Explanation +- **Single page extraction:** Extracts text from page 1 (`startIndex = 1`) using the `'TextOnly'` option. -**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. +- **Multiple page extraction:** Extracts text from pages 0–2 (`startIndex = 0`, `endIndex = 2`) using the `'TextOnly'` option. -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/find-text-async.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/find-text-async.md index 5f70bb052..ae1aa0076 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/find-text-async.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/find-text-async.md @@ -1,19 +1,18 @@ --- layout: post -title: Find Text Async in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn about the `findTextAsync` in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Use findTextAsync in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to search text asynchronously with findTextAsync in the Syncfusion ASP.NET MVC PDF Viewer and retrieve match bounds. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Find Text using findTextAsync Method in Syncfusion PdfViewer +# Find text with findTextAsync in the ASP.NET MVC 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. - -Here is an example of how you can use the **findTextAsync** method: +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 to use `findTextAsync`: {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -53,40 +52,26 @@ Here is an example of how you can use the **findTextAsync** method: {% endhighlight %} {% endtabs %} -### 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: - -**text (string | string[]):** +### Description -The text or an array of texts you want to search for in the document. +The `findTextAsync` method performs an asynchronous text search within a PDF document. You can search for a single string or multiple strings while controlling case sensitivity. By default, the search runs across all pages. Specify the optional `pageIndex` argument to limit the search to a single page. -**matchCase (boolean):** +### Parameters -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. +- **text (string | string[]):** String or array of strings to search for. -**pageIndex (optional, number):** +- **matchCase (boolean):** Whether the search is case-sensitive. `true` matches exact case; `false` ignores case. -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. +- **pageIndex (optional, number):** Zero-based page index to search. If omitted, searches all pages. -### 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. +- **findTextAsync('pdf', false)**: Searches for "pdf" case-insensitively across all pages. -**findTextAsync(['pdf', 'the'], false):** -This will search for the terms "pdf" and "the" in a case-insensitive manner across all pages of the document. +- **findTextAsync(['pdf', 'the'], false)**: Searches for "pdf" and "the" case-insensitively across all pages. -**findTextAsync('pdf', false, 0):** -This will search for the term "pdf" in a case-insensitive manner only on the first page (page 0). +- **findTextAsync('pdf', false, 0)**: Searches for "pdf" case-insensitively on page 0 only. -**findTextAsync(['pdf', 'the'], false, 1):** -This will search for the terms "pdf" and "the" in a case-insensitive manner only on the second page (page 1). +- **findTextAsync(['pdf', 'the'], false, 1)**: Searches for "pdf" and "the" case-insensitively on page 1 only. -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/get-Page-Info.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/get-Page-Info.md index 1b1a140ea..6cea395cc 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/get-Page-Info.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/get-Page-Info.md @@ -1,22 +1,22 @@ --- layout: post -title: Get Page Info in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Get Page Info in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Get page info in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to retrieve page height, width, and rotation using getPageInfo in the Syncfusion ASP.NET MVC PDF Viewer. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Get Page Info from PDF document +# Get page info in the ASP.NET MVC 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/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. +**Step 1:** Follow the steps in the [Syncfusion ASP.NET MVC PDF Viewer getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) 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 cshtml tabtitle="Standalone" %} @@ -66,6 +66,6 @@ The following steps are used to getPageInfo. {% 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 ASP.NET MVC PDF Viewer. -[View Sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View Sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/get-base64.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/get-base64.md index 11a837aea..87f08967a 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/get-base64.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/get-base64.md @@ -1,27 +1,24 @@ --- layout: post -title: Retrieving Base64 Value in EJ2 ASP.NET MVC PdfViewer | Syncfusion -description: Learn how to retrieve the Base64 value in the Syncfusion ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Get Base64 from loaded PDF in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to retrieve the Base64 value of a loaded PDF in the Syncfusion ASP.NET MVC PDF Viewer using saveAsBlob and FileReader. platform: document-processing -control: How to retrieve Base64 +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Retrieving Base64 Value from a PDF in PDF Viewer -### Overview - -This guide demonstrates how to fetch the base64-encoded value of a PDF document loaded in the Syncfusion PDF Viewer using ASP.NET MVC. This feature is beneficial for transferring the PDF data as a Base64 string or performing client-side processing. +# Get Base64 value from a loaded PDF -### How to Retrieve Base64 Value +### Overview -**Step 1:** Set Up the PdfViewer in Your ASP.NET MVC Project +This guide shows how to get the base64-encoded value of a PDF loaded in the Syncfusion ASP.NET MVC PDF Viewer. Use this to send the PDF as a Base64 string or process it on the client. - Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. +### How to retrieve Base64 value -**Step 2:** Add Button and Function for Fetching Base64 Value +**Step 1:** Follow the steps in the [Syncfusion ASP.NET MVC PDF Viewer getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to create a simple viewer sample. -Incorporate a button in your view to enable users to start the process of converting the loaded PDF document into a Base64 string. +**Step 2:** Add a button to trigger the Base64 conversion. ```html
    @@ -61,8 +58,9 @@ Incorporate a button in your view to enable users to start the process of conver ``` + ### Conclusion -By following these steps, you can easily convert and retrieve a PDF document's Base64 string. This conversion is particularly useful for transmitting PDF data or integrating with systems that require Base64 encoding. +With these steps, a loaded PDF can be converted to a Base64 string on button click for transfer or additional processing. -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/identify-added-annotation-mode.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/identify-added-annotation-mode.md new file mode 100644 index 000000000..60ce6f1b2 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/identify-added-annotation-mode.md @@ -0,0 +1,46 @@ +--- +layout: post +title: Identify added annotation mode in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about Identify added annotation mode in Syncfusion ASP.NET MVC Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Identify added annotation mode in ASP.NET MVC Pdfviewer control + +The PDF Viewer library allows you to identify whether the added annotations in PDF document is UI drawn, imported or existing annotation. Annotation mode can be identified using the [**annotationAddMode**](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationAdd) property of [**annotationSelect**](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationSelect) event. + +**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create simple PDF Viewer sample. + +**Step 2:** The following code snippet explains how to identify added annotation mode. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationSelect("annotationSelected").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationSelect("annotationSelected").Render() +
    + + + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/identify-the-loaded-document-is-edited.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/identify-the-loaded-document-is-edited.md index 441d4837f..358efe5bf 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/identify-the-loaded-document-is-edited.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/identify-the-loaded-document-is-edited.md @@ -1,22 +1,22 @@ --- layout: post -title: Identify The Loaded Document Is Edited in ASP.NET MVC Pdfviewer Component -description: Learn here all about Identify The Loaded Document Is Edited in Syncfusion ASP.NET MVC Pdfviewer component of syncfusion and more. +title: Identify Edited State of Document in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to check if a loaded PDF document has been edited using the isDocumentEdited property in the Syncfusion ASP.NET MVC PDF Viewer. platform: document-processing -control: Identify The Loaded Document Is Edited +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Identify the loaded document is edited +# Identify if the loaded document has been edited -The PDF Viewer server library allows you to identify whether loaded PDF document is edited or not. Use the **isDocumentEdited** property to identify whether the changes made in PDF document. +The Syncfusion ASP.NET MVC PDF Viewer allows you to determine whether a loaded PDF document has been modified using the `isDocumentEdited` property. This property is useful for implementing features such as prompting users to save changes before closing, enabling/disabling save functionality, or tracking document revisions. An "edit" refers to any modification to the PDF, including annotations, form field changes, or other interactive elements. -The following steps are used to identify loaded document is edited in PDF viewer control, +To identify if the loaded document has been edited, follow these steps: -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create simple PDF Viewer sample. +**Step 1:** Create an ASP.NET MVC PDF Viewer sample by following the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/). -**Step 2:** Add the following code snippet with button click event to identity loaded document edited. +**Step 2:** Add the following buttons and JavaScript code to your Razor view (e.g., `Index.cshtml`). This example demonstrates checking the `isDocumentEdited` property before and after an intentional edit (for demonstration purposes). ```html @@ -36,4 +36,4 @@ The following steps are used to identify loaded document is edited in PDF viewer ``` -Download the sample [how to identify the loaded document is edited](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE-609765609) \ No newline at end of file +Download the sample [how to identify the loaded document is edited](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE-609765609) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/import-export-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/import-export-annotation.md index 1e8c2d598..916080303 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/import-export-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/import-export-annotation.md @@ -1,55 +1,113 @@ --- layout: post -title: Import Export Annotation in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn how to Import Export Annotation in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Import and export annotations in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to import and export annotations as objects, JSON, or XFDF in the Syncfusion ASP.NET MVC PDF Viewer. platform: document-processing -control: Import Export Annotation Object +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- +# Import and export annotations in the ASP.NET MVC PDF Viewer -# Import and Export annotation - -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/documentation/api/pdfviewer/#exportannotationsasobject) method. Only the annotations objects that are 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. - -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. - -**Step 2:** Use the following code snippet to perform import and export annotation. - -```html - - - - - - -``` -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +@page "{handler?}" +@model IndexModel +@{ + ViewData["Title"] = "Home page"; +} + + + + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/include-the-authorization-token.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/include-the-authorization-token.md index cc6acf4e7..582e8443c 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/include-the-authorization-token.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/include-the-authorization-token.md @@ -1,23 +1,21 @@ --- layout: post -title: Include The Authorization Token in ASP.NET MVC Pdfviewer Component -description: Learn here all about Include The Authorization Token in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Authorization Token in ASP.NET MVC Pdfviewer | Syncfusion +description: Learn here all about Authorization Token in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. platform: document-processing -control: Include The Authorization Token -publishingplatform: ASP.NET MVC +control: PDF Viewer documentation: ug --- +# Include Authorization token to header -# Include Authorization token +The PDF Viewer component enables adding authorization tokens to each AJAX request through the `ajaxHeaders` collection in `AjaxRequestSettings`, ensuring the header is appended to every call initiated by the viewer. -The PDF Viewer server library allows you to include the Authorization token in the PDF Viewer AJAX request using the ajaxRequest headers properties available in AjaxRequestSettings and it will be included in every AJAX request send from PDF Viewer. +Use the following steps to configure the authorization token for the PDF Viewer control. -The following steps are used to include the Authorization token for PDF viewer control, +**Step 1:** Follow the steps in the [Getting Started with ASP.NET MVC PDF Viewer guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to configure a basic ASP.NET MVC project with the PDF Viewer component. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create simple PDF Viewer sample. - -**Step 2:** Add the following code snippet to include the authorization token, +**Step 2:** Add the following script after the PDF Viewer instance is rendered to include the authorization token in subsequent requests. ```html @@ -25,4 +23,4 @@ The following steps are used to include the Authorization token for PDF viewer c ``` -Download the sample [how to include authorization token](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVCSAM~21380738543) \ No newline at end of file +Download the sample [how to include authorization token](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVCSAM~21380738543) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/install-packages.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/install-packages.md new file mode 100644 index 000000000..65d4e2948 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/install-packages.md @@ -0,0 +1,40 @@ +--- +layout: post +title: Install packages for ASP.NET MVC PDF Viewer +description: Learn how to install the Syncfusion ASP.NET MVC PDF Viewer NuGet package and restore the required dependencies. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Install EJ2 PDF Viewer packages automatically + +Here’s a rephrased version of your instructions for installing the Syncfusion ASP.NET MVC PDF Viewer package: + +--- + +### Installing Syncfusion PDF Viewer in an ASP.NET MVC Project + +To integrate the Syncfusion PDF Viewer into your ASP.NET MVC application, follow these steps: + +1. **Add the NuGet Package** + +Install the `Syncfusion.EJ2.MVC5` package to your project. You can do this in one of two ways: + +- **Using Visual Studio**: Go to **Manage NuGet Packages** → **Browse** → Search for `Syncfusion.EJ2.MVC5` → Click **Install**. + +- **Using Command Line**: Run the following command in the terminal: + +```bash +dotnet add package Syncfusion.EJ2.MVC5 +``` + +2. **Restore Dependencies** + +When you build the project or run `dotnet restore`, NuGet will automatically download the package and its required dependencies. + +3. **Register Your Syncfusion License** + +Before publishing your application, make sure to register your Syncfusion license key. This is required for the components to work properly. +Refer to the official Syncfusion licensing guide for instructions on how to obtain and register your license key. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-balancing-environment.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-balancing-environment.md index 84094c5ae..cb00a8de3 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-balancing-environment.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-balancing-environment.md @@ -1,23 +1,25 @@ --- layout: post -title: Load balancing environment in ASP.NET MVC PDF Viewer | Syncfusion -description: Learn how to load balancing environment in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Configure Redis for Load Balancing in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to configure Redis for load balancing with the Syncfusion ASP.NET MVC PDF Viewer, ensuring efficient document processing in a distributed environment. platform: document-processing -control: Load balancing environment +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- +# Configure Redis for Load Balancing in ASP.NET MVC PDF Viewer -# Achieve Load balancing environment in MVC framework +This document explains how to configure Redis for load balancing with the Syncfusion ASP.NET MVC PDF Viewer. This setup ensures efficient document processing and caching across multiple server instances. -The PDF Viewer server library allows you to achieve a Load balancing environment in the MVC framework using the .NET 4.6.2 framework with the help of **StackExchange Redis package V1.2.6**. +## Prerequisites -## Steps to achieve load balancing environment in the MVC framework +* **Install Redis:** Ensure you have Redis installed and running on your server. +* **Install NuGet Package:** Install the [`StackExchange.Redis.StrongName`](https://www.nuget.org/packages/StackExchange.Redis.StrongName) NuGet package in your web-service project. -**Step 1**: Install the [StackExchange.Redis.StrongName](https://www.nuget.org/packages/StackExchange.Redis.StrongName) NuGet in the web-service sample. +## Steps to Configure Redis for Load Balancing -**Step 2:** Create a new class in the web-service project (Example: CacheManager.cs) and implement the **Syncfusion.EJ2.PdfViewer.ICacheManager** interface in the class. +**Step 1:** Create a new class in your web-service project (e.g., `CacheManager.cs`) and implement the `Syncfusion.EJ2.PdfViewer.ICacheManager` interface. ```cs @@ -145,6 +147,13 @@ public object Load(Dictionary<string, string> jsonObject) ``` +**Important Notes:** + +* Replace `"YOUR_REDIS_CONNECTION_STRING"` with your actual Redis connection string. It's highly recommended to load this from a configuration file (e.g., `Web.config` or `appsettings.json`) rather than hardcoding it. +* The `cacheSlidingExpiration` value is in minutes. Setting it to `0` will use the default 24-hour expiration. +* Ensure the `GetDocumentPath` method is correctly implemented in your controller to resolve document paths. +* Apply the `CacheManager` initialization logic to all relevant controller methods that process PDF documents. + Find the Web-service sample and Nuget package below: -* [Web service](https://www.syncfusion.com/downloads/support/directtrac/general/ze/PdfViewer_WebAPI_Service_(3)1568224382.zip) -* [Nuget](https://www.syncfusion.com/downloads/support/directtrac/general/ze/Syncfusion.EJ2.PdfViewer.AspNet.Mvc5.19.1.0.59-1399631455.zip) \ No newline at end of file +* [Web service](https://www.syncfusion.com/downloads/support/directtrac/general/ze/PdfViewer_WebAPI_Service_(3)1568224382.zip) +* [Nuget](https://www.syncfusion.com/downloads/support/directtrac/general/ze/Syncfusion.EJ2.PdfViewer.AspNet.Mvc5.19.1.0.59-1399631455.zip) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-documents.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-documents.md index abd9be304..1326d565b 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-documents.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-documents.md @@ -1,23 +1,22 @@ --- layout: post -title: Load Documents in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Load Documents in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Load documents dynamically in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to load or switch PDF documents dynamically in the Syncfusion ASP.NET MVC PDF Viewer using the load method. platform: document-processing -control: Load Documents -publishingplatform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC documentation: ug --- +# Load documents dynamically in the ASP.NET MVC PDF Viewer -# Load PDF documents dynamically +Load or switch PDF documents dynamically after the initial load. Use the **load()** method to load a PDF by Base64 string or file name. -The PDF Viewer server library allows to switch or load the PDF documents dynamically after the initial load operation. To achieve this, load the PDF document as a base64 string or file name in PDF Viewer control using the **Load()** method dynamically. +## Steps to load PDF documents dynamically -The following steps are used to load the PDF document dynamically. +**Step 1:** Follow the steps in the [Syncfusion ASP.NET MVC PDF Viewer getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) to create a sample. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. - -**Step 2:** Use the following code snippet to load PDF document using base64 string. +**Step 2:** Use the following code to load a PDF using a Base64 string. ```html @@ -60,6 +59,11 @@ public ActionResult GetDocument() ```html + +
    + @Html.EJS().PdfViewer("pdfviewer").Render() +
    + ``` -T> Also can add the base64 string directly in the `DocumentPath()` method. +By following these steps, the load API can be used to switch documents dynamically in the ASP.NET MVC PDF Viewer. -Download the sample, [how to load PDF documents dynamically](https://www.syncfusion.com/downloads/support/directtrac/general/ze/EJ2MvcSample-1778613339.zip) \ No newline at end of file +[how to load PDF documents dynamically](https://www.syncfusion.com/downloads/support/directtrac/general/ze/EJ2MvcSample-1778613339.zip) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-n-number-page.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-n-number-page.md index e6b36a951..ef64d3b45 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-n-number-page.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-n-number-page.md @@ -1,20 +1,20 @@ --- layout: post -title: Load N number of pages on initial loading in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Load N number of pages on initial loading in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Load a specific number of pages on initial load in ASP.NET MVC PDF Viewer +description: Learn how to configure the Syncfusion ASP.NET MVC PDF Viewer to load a defined number of pages during the initial render by using the initialRenderPages property. platform: document-processing -control: Load N number of pages on initial loading -publishingplatform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC documentation: ug --- # Load N number of pages on initial loading -The initial rendering in a PDF viewer allows users to control the number of pages displayed when opening a PDF document. This improves the user experience by providing flexibility in loading a specific number of pages initially, while additional pages are dynamically rendered as the user scrolls through the document. This approach enhances the responsiveness of the PDF viewer and minimizes delays as users can access specific pages without waiting for the entire document to load. +The initial rendering in a PDF Viewer allows users to control how many pages appear when opening a PDF document. Loading only a subset of pages can improve responsiveness because the viewer fetches additional pages on demand as the user scrolls, reducing initial download time for large files. -To utilize this capability in Syncfusion® PDF Viewer, use the [initialRenderPages](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_InitialRenderPages) property. You can achieve the desired outcome by setting this property to the desired number of pages you want to load initially. However, it's important to exercise caution when setting a high value for the initialRenderPages in large documents with numerous pages. Rendering a large number of pages simultaneously can increase memory usage and slow down loading times, impacting the performance of the PDF viewer. +To utilize this capability in Syncfusion® PDF Viewer, use the [initialRenderPages](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_InitialRenderPages) property. Set this property to the number of pages that should be visible during the first render. Choose the value carefully for large documents because rendering too many pages at once increases memory usage and can degrade performance. -Using the `initialRenderPages` property judiciously is advisable, especially when dealing with larger documents. It is more suitable for scenarios where a smaller range of pages, such as 10-20, can be loaded to provide a quick initial view of the document. +Using the `initialRenderPages` property prudently works well when a smaller range of pages, such as 10–20, provides the essential overview users need before scrolling to additional content. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -51,4 +51,4 @@ Using the `initialRenderPages` property judiciously is advisable, especially whe {% endhighlight %} {% endtabs %} -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/Load%20N%20no%20of%20pages) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/Load%20N%20no%20of%20pages) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-the-document.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-the-document.md index 69b7cbaf1..9a1cefd03 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-the-document.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/load-the-document.md @@ -1,23 +1,21 @@ --- layout: post -title: Load the document in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn how to doad the document in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Load the document in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to load a PDF document in the Syncfusion ASP.NET MVC PDF Viewer and understand the JSON payload (jsonObjects) used by controller actions. platform: document-processing -control: Load The Document -publishingplatform: document-processing +control: PDF Viewer documentation: ug --- - # Load the PDF document -The PDF Viewer server library allows you to load the PDF document in the PDF Viewer Control. PDF Document can be loaded by adding the necessary JSON object Properties in the **PdfViewerController.cs** file. +The Syncfusion ASP.NET MVC PDF Viewer loads documents through server-side controller actions that receive a JSON payload. The payload is deserialized into a data transfer object (DTO) named `jsonObjects`, which supplies properties used across actions such as loading, rendering, and annotation processing. -The following steps are used to load a PDF document. +Follow these steps to load a PDF document. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. +**Step 1:** Create a basic ASP.NET MVC PDF Viewer sample by following the getting started guide: [Getting started with ASP.NET MVC PDF Viewer](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/). -**Step 2:** Add the following code snippet in PDFViewerController.cs file to load a PDF document. +**Step 2:** Add the following `jsonObjects` class to the `PdfViewerController.cs` file (or a Models folder). The `document`, `isFileName`, and `password` properties are commonly used when loading a document. ```cs @@ -61,4 +59,4 @@ public class jsonObjects ``` -Find the sample [how to load the PDF Document in MVC PDF Viewer](https://www.syncfusion.com/downloads/support/directtrac/general/ze/PDFViewTest-1000651816) \ No newline at end of file +Find the sample [how to load the PDF document in MVC PDF Viewer](https://www.syncfusion.com/downloads/support/directtrac/general/ze/PDFViewTest-1000651816) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/min-max-zoom.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/min-max-zoom.md index 1adc403b8..1db5ca141 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/min-max-zoom.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/min-max-zoom.md @@ -1,24 +1,24 @@ --- layout: post -title: Minimum and Maximum Zoom in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Minimum and Maximum Zoom in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Set min and max zoom levels in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to limit the minimum and maximum zoom percentages in the Syncfusion ASP.NET MVC PDF Viewer by using the minZoom and maxZoom properties for responsive, consistent viewing. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Minimum and Maximum Zoom Properties +# Minimum and maximum zoom properties -The Syncfusion® PDF Viewer provides the ability to control zoom levels for viewing PDF documents. The `minZoom` and `maxZoom` properties enable developers to set the minimum and maximum zoom levels, ensuring a consistent and controlled viewing experience. +The Syncfusion® PDF Viewer lets developers control zoom limits for every document view. Configure the `minZoom` and `maxZoom` properties to prevent users from zooming beyond the range that keeps content legible and maintains predictable performance. ### minZoom -The `minZoom` property specifies the minimum zoom percentage allowed in the PDF Viewer. This ensures that users cannot zoom out beyond a certain limit, which helps maintain readability and performance. Developers can set the `minZoom` property programmatically, defining the minimum zoom level based on the application's requirements. This is particularly useful for preventing users from zooming out too much, which could make the content difficult to read. +Use the [`minZoom`](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_MinZoom) property to define the lowest zoom percentage that the viewer allows. Setting an appropriate minimum avoids unreadable pages when users zoom out. Assign the value that matches the smallest acceptable scale for the application, and keep it lower than or equal to `maxZoom`. ### maxZoom -The `maxZoom` property defines the maximum zoom percentage allowed in the PDF Viewer. By setting this property, developers can prevent users from zooming in too much, helping to avoid performance issues and maintain a smooth viewing experience. The `maxZoom` property can be set programmatically to control the upper limit of the zoom level. This is useful for applications where extremely high zoom levels might degrade performance or user experience. +Use the [`maxZoom`](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_MaxZoom) property to cap the highest zoom percentage. Limiting the upper bound prevents excessive magnification that can slow rendering or introduce scrolling issues. Choose a value that balances detail visibility with responsiveness. ```cs @@ -35,9 +35,10 @@ The `maxZoom` property defines the maximum zoom percentage allowed in the PDF Vi
    ``` -#### Restrict Zoom Percentage on Mobile Devices -You can easily restrict the zoom percentage on mobile devices using the `minZoom` and `maxZoom` properties. This feature allows you to set specific limits for zooming, ensuring smoother scrolling performance and efficient document loading on mobile devices. By controlling the zoom levels, you can provide a better user experience across different devices. +#### Restrict zoom percentage on mobile devices + +You can restrict zoom percentages on mobile devices by updating the `minZoom` and `maxZoom` properties when the document load event fires. This ensures smoother scrolling performance and consistent page rendering on smaller screens. Attach the handler by wiring the `documentLoad` event to the `documentLoad` function in the PDF Viewer markup or initialization script. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -81,4 +82,4 @@ You can easily restrict the zoom percentage on mobile devices using the `minZoom {% endhighlight %} {% endtabs %} -By implementing this, you ensure that the maximum zoom percentage on mobile devices is limited to 200% and the minimum zoom percentage is set to 10%. This prevents performance issues that may arise from excessive zooming on mobile platforms. \ No newline at end of file +When configuring zoom limits, keep `minZoom` less than or equal to `maxZoom`, and adjust the values to meet accessibility expectations across desktop and mobile experiences. Review the [`zoomMode`](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ZoomMode) property if you need additional control over how the viewer interprets zoom operations. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/open-bookmark.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/open-bookmark.md index e49e938a3..020e9cf15 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/open-bookmark.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/open-bookmark.md @@ -1,22 +1,22 @@ --- layout: post -title: Open and Close Bookmark in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Open and Close Bookmark in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Open or close the bookmark pane in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to open or close the bookmark pane programmatically in the Syncfusion ASP.NET MVC PDF Viewer by calling the bookmarkViewModule APIs. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Open and Close Bookmark pane programmatically +# Open or close the bookmark pane programmatically -The PDF Viewer library allows you to open the Bookmark pane programmatically using the **openBookmarkPane()** method. +The PDF Viewer exposes methods to toggle the bookmark pane at runtime. Call **openBookmarkPane()** to display the pane and **closeBookmarkPane()** to hide it. These APIs enable workflows where bookmarks are revealed only when users request them. -The following steps are used to open the Bookmark. +Follow these steps to add the bookmark toggle buttons: -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. +**Step 1:** Create an ASP.NET MVC PDF Viewer sample by following the [getting started instructions](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started). Ensure that the Razor page includes the required Syncfusion EJ2 script and style references. -**Step 2:** Insert the following code snippet to implement the functionality for opening the Bookmark pane: +**Step 2:** Place a button and the PDF Viewer Tag Helper in the same Razor page. Add a script block after the viewer markup so the handler can retrieve the viewer instance and call the bookmark module when the button is clicked. If the button is disabled or the bookmark tree is empty, confirm that the loaded document contains bookmarks before invoking the API. {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -51,7 +51,7 @@ The following steps are used to open the Bookmark. {% endhighlight %} {% endtabs %} -Similarly, to close the Bookmark pane programmatically, employ the following code snippet: +To close the bookmark pane with a button click, reuse the same structure and call the close method in the handler. {% tabs %} {% highlight cshtml tabtitle="Standalone" %} @@ -88,4 +88,4 @@ Similarly, to close the Bookmark pane programmatically, employ the following cod {% endhighlight %} {% endtabs %} -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/Open%20and%20Close%20bookmark%20pane/PDFViewerSample/PDFViewerSample) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/Open%20and%20Close%20bookmark%20pane/PDFViewerSample/PDFViewerSample) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/open-thumbnail.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/open-thumbnail.md index 82c1450f0..184fcb2bb 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/open-thumbnail.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/open-thumbnail.md @@ -1,27 +1,49 @@ --- layout: post -title: Open Thumbnail in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Open Thumbnail in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Open the thumbnail pane programmatically in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to open the thumbnail pane programmatically in the Syncfusion ASP.NET MVC PDF Viewer by calling the openThumbnailPane method after the document loads. platform: document-processing -control: Open Thumbnail -publishingplatform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC documentation: ug --- +# Open thumbnail pane programmatically -# Open Thumbnail pane programmatically +The Syncfusion® ASP.NET MVC PDF Viewer lets you open the thumbnail pane programmatically by calling the [**openThumbnailPane()**](https://ej2.syncfusion.com/documentation/api/pdfviewer/thumbnailView/#openthumbnailpane) method after the document loads. This approach helps highlight page navigation immediately or in response to user actions. -The PDF Viewer library allows you to open the thumbnail pane programmatically using the [**openThumbnailPane()**](https://ej2.syncfusion.com/documentation/api/pdfviewer/thumbnailView/#openthumbnailpane) method. +The following steps explain how to open the thumbnail pane. -The following steps are used to open the thumbnail. +**Step 1:** Create an ASP.NET MVC PDF Viewer sample by following the [ASP.NET MVC getting started guide for the PDF Viewer](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started). The tutorial shows how to configure Razor Pages, reference the required Syncfusion scripts and styles, and register the PDF Viewer service endpoint. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. +**Step 2:** Add the following markup and script to open the thumbnail pane automatically or on demand. -**Step 2:** Use the following code snippet to open thumbnail. +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} -```html +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + -``` -Find the sample, [how to open the thumbnail pane programmatically](https://www.syncfusion.com/downloads/support/directtrac/general/ze/EJ2MvcSample1928984973.zip) \ No newline at end of file +{% endhighlight %} +{% endtabs %} + +[how to open the thumbnail pane programmatically](https://www.syncfusion.com/downloads/support/directtrac/general/ze/EJ2MvcSample1928984973.zip) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/overlapped-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/overlapped-annotation.md new file mode 100644 index 000000000..3bd7fc25c --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/overlapped-annotation.md @@ -0,0 +1,44 @@ +--- +layout: post +title: Overlapped annotation in Pdfviewer control | Syncfusion +description: Learn here all about Overlapped annotation in Syncfusion Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Overlapped annotation in Pdfviewer control + +To get the overlapped annotations on a mouse click in a Syncfusion PDF Viewer, you can use the **annotationCollection** property of [**annotationSelect**](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AnnotationSelect) event.This event is triggered when the user clicks on an annotation in the PDF document. + +Here is an example of how you can use the **annotationSelect** event to get the overlapped annotations on a mouse click in a Syncfusion PDF Viewer: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationSelect("annotationSelected").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationSelect("annotationSelected").Render() +
    + + + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/pagerenderstarted-pagerendercompleted.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/pagerenderstarted-pagerendercompleted.md index cd46b6b34..d0c00e87c 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/pagerenderstarted-pagerendercompleted.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/pagerenderstarted-pagerendercompleted.md @@ -1,24 +1,24 @@ --- layout: post -title: Rendering event in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Rendering event in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Handle pageRenderInitiate and pageRenderComplete events in ASP.NET MVC PDF Viewer | Syncfusion +description: Discover how to use the pageRenderInitiate and pageRenderComplete events in the Syncfusion ASP.NET MVC PDF Viewer to monitor page rendering stages. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# PageRenderInitiate and PageRenderComplete event +# pageRenderInitiate and pageRenderComplete event -In Syncfusion® PDF Viewer, `pageRenderInitiate` and `pageRenderComplete` actions are events that occur during the rendering process of PDF documents. +The Syncfusion® ASP.NET MVC PDF Viewer raises the `pageRenderInitiate` and `pageRenderComplete` events for each page that enters the rendering pipeline. These notifications help track progress, update custom UI, and defer heavy logic until a page is ready. **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. +The `pageRenderInitiate` event fires when a page begins rendering. Use it to prepare resources, start timers, or log analytics before drawing occurs. The event argument provides details such as the page number and source so that handlers can apply page-specific logic. **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. +The `pageRenderComplete` event fires after the viewer finishes rendering a page. Use it to finalize overlays, clean up temporary data, or trigger post-processing tasks. The event argument includes the rendered page index and status information, enabling conditional workflows. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -75,4 +75,4 @@ function pageRenderComplete(args) { The provided code demonstrates how to subscribe to the `pageRenderInitiate` and `pageRenderComplete` events in the Syncfusion® PDF Viewer component. -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/PageRenderStarted%20and%20PageRenderCompleted%20event/PDFViewerSample) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/PageRenderStarted%20and%20PageRenderCompleted%20event/PDFViewerSample) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/print-document.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/print-document.md new file mode 100644 index 000000000..aeaaed010 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/print-document.md @@ -0,0 +1,54 @@ +--- +layout: post +title: Print document in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about Print document in Syncfusion ASP.NET MVC Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Print document in ASP.NET MVC Pdfviewer control + +The PDF Viewer library allows you to print the PDF document programmatically using the **print()** method in the **PrintModule**. + +The following steps are used to print the PDF document programmatically. + +**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. + +**Step 2:** Add the following code snippet to perform the print operation. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/redirect-to-home-page.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/redirect-to-home-page.md index 13c37dff7..78d2e1ae6 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/redirect-to-home-page.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/redirect-to-home-page.md @@ -1,23 +1,22 @@ --- layout: post -title: Redirect To Home Page in Syncfusion ASP.NET MVC Pdfviewer Component -description: Learn here all about Redirect To Home Page in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Redirect to home page after PDF form submit in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to redirect to a home page after submitting PDF forms using the ExportSuccess event in the Syncfusion ASP.NET MVC PDF Viewer. platform: document-processing -control: Redirect To Home Page +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- - # Redirect to a home page after submitting PDF forms -The PDF Viewer library allows you to redirect to a home page after submitting PDF forms in the PDF Viewer control programmatically using the [**ExportSuccess**](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ExportSuccess) event. This event triggers once the form fields exporting is succeeded in the PDF Viewer. +Use the Syncfusion ASP.NET MVC PDF Viewer’s [**ExportSuccess**](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ExportSuccess) event to redirect users to a home page after form submission. The **ExportSuccess** event fires when form field export completes successfully. In the handler, navigate to the target page (for example, the home page) using window.open with the _self target to replace the current page. -The following example steps are used to redirect to a home page programmatically after submitting PDF forms. +The following example shows how to redirect to a home page programmatically after submitting PDF forms. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. +**Step 1:** Create a basic PDF Viewer sample by following the Getting Started guide: [Getting started with ASP.NET MVC PDF Viewer](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/). -**Step 2:** Add the following codes in new View pages HomePage.cshtml and FormFillingData.cshtml inside a folder(say FormFilling). +**Step 2:** Add the following view pages inside a new folder (for example, Views/FormFilling): HomePage.cshtml and FormFillingData.cshtml. FormFillingData.cshtml wires the ExportSuccess event that performs the redirect. FormFillingData.cshtml: @@ -94,7 +93,7 @@ HomePage.cshtml:

    HomePage

    ``` -**Step 3:** Create a new Controller file called FormFillingController.cs inside the Controllers and add the below code to it. +**Step 3:** Create a controller named FormFillingController.cs under Controllers and add the following code. The ServiceUrl in the viewer points to this controller. FormFillingController.cs: @@ -402,7 +401,7 @@ namespace EJ2PdfViewer.Controllers } ``` -**Step 4:** Modify the RegisterRoutes method in the RouteConfig.cs file inside the App_Start folder to map the default path. +**Step 4:** Modify the RegisterRoutes method in App_Start/RouteConfig.cs to map the default path to the form-filling view. ```cs public static void RegisterRoutes(RouteCollection routes) @@ -417,6 +416,6 @@ public static void RegisterRoutes(RouteCollection routes) } ``` -Now, run the sample, fill in the form fields, and click the Submit Form option. You will be redirected to the home page. +Run the sample, fill the form fields, and select Submit Form. When export succeeds, the ExportSuccess event handler redirects to the home page. If using areas or custom routes, update the relative URL in the handler accordingly. -Download the sample, [how to redirect to a home page programmatically after submitting PDF forms](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE-1729180476.zip). +Download the sample: [how to redirect to a home page programmatically after submitting PDF forms](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE-1729180476.zip). \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/resolve-Unable-to-find-an-entry-point-error.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/resolve-Unable-to-find-an-entry-point-error.md index 9217b9416..90b8dd4a2 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/resolve-Unable-to-find-an-entry-point-error.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/resolve-Unable-to-find-an-entry-point-error.md @@ -1,26 +1,28 @@ --- layout: post -title: Resolve unable to find an entry point error in ASP.NET MVC PDF Viewer component | Syncfusion -description: Learn here how to resolve unable to find an entry point named error in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Resolve “Unable to find an entry point named FPDFText_GetCharAngle” error in ASP.NET MVC PDF Viewer | Syncfusion +description: Resolve the “Unable to find an entry point named FPDFText_GetCharAngle” error in the Syncfusion ASP.NET MVC PDF Viewer by updating the PDFium assemblies and republishing the service. +control: PDF Viewer platform: document-processing -control: Resolve unable to find an entry point error -publishingplatform: document-processing +control: PDF Viewer documentation: ug --- # Resolve "Unable to find an entry point named FPDFText_GetCharAngle" 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 Essential Studio® 21.1.0.35 (2023 Volume 1), the Syncfusion® PDF Viewer ships an updated PDFium package to improve text search, text selection, and rendering performance. If an application still references the older native PDFium binaries after upgrading the NuGet packages, the viewer may throw the exception **"Unable to find an entry point named FPDFText_GetCharAngle"** and the client can display the **"Web-Service is not listening"** status. Inspect the Network tab to confirm that the service response fails due to missing or outdated Pdfium assemblies. + +Ensure that the deployed application references the correct native library for the host operating system: * Windows – pdfium.dll * Linux – libpdfium.so * OSX – libpdfium.dylib -![Error information in the Network tab](../../images/ErrorinformationuintheNetworkTab.png) +![Error information in the Network tab](../images/ErrorinformationuintheNetworkTab.png) -## To solve this issue, you should follow the below steps: +## Follow these steps to resolve the issue: -1. Clear the bin and object files of the web-service project. -2. Re-publish the web-service project. +1. Clear the `bin`, `obj`, and published output folders of the web service so that stale Pdfium binaries are removed, then rebuild the project to restore the assemblies that match the upgraded Syncfusion packages. +2. Republish the web service and verify that the deployment contains the latest Pdfium binaries alongside the updated Syncfusion.EJ2.PdfViewer assemblies. -N> **Note:** If you are hosting your application in Azure, AWS, or in Linux environments, delete the older published files and republish the application. +N> **Note:** If the application is hosted in Azure, AWS, Linux, or another remote environment, delete the previous deployment before publishing again and confirm that the new PDFium binaries are copied to the server. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/resolve-pdfium-issue.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/resolve-pdfium-issue.md index 522173ef0..ad3ed5c1b 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/resolve-pdfium-issue.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/resolve-pdfium-issue.md @@ -1,9 +1,9 @@ --- layout: post -title: Resolve Pdfium Issue in Syncfusion ASP.NET MVC Pdfviewer Component -description: Learn here all about Resolve Pdfium Issue in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Resolve PDFium initialization error in ASP.NET MVC PDF Viewer | Syncfusion +description: Fix the “The type initializer for Syncfusion.EJ2.PdfViewer.PdfiumNative threw an exception” error in the Syncfusion ASP.NET MVC PDF Viewer by copying the PDFium binaries and configuring ReferencePath. platform: document-processing -control: Resolve Pdfium Issue +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- @@ -11,37 +11,69 @@ documentation: ug # Resolve the Pdfium issue -The issue, “The type initializer for 'Syncfusion.EJ2.PdfViewer.PdfiumNative' threw an exception” is due to the write access permission denied in the environment. The pdfium.dll will be created based on the operating system at the runtime. Due to the denial of permission, the pdfium.dll file couldn't have been created. So, copy the below x64 and x86 folders and paste them inside the folder into your project to resolve the issue or enable the write permission for that folder. +The error “The type initializer for `Syncfusion.EJ2.PdfViewer.PdfiumNative` threw an exception” occurs when the PDF Viewer cannot unpack the required PDFium native binaries because write access is blocked or the assemblies are missing. The viewer extracts `pdfium.dll` at runtime based on the current operating system, so ensure the application can write to the target folder or manually include the binaries by copying the x64 and x86 folders into the project. -Pdfium dll: [pdfium.dll](https://www.syncfusion.com/downloads/support/directtrac/general/ze/Pdfium1515619754.zip) +Pdfium DLL package: [pdfium.dll](https://www.syncfusion.com/downloads/support/directtrac/general/ze/Pdfium1334927507.zip) -N> Use both the client and server-side of the same version in your project. -
    Ensure whether the pdfium.dll file is created in your project during runtime. Else, place the pdfium assemblies in any of the production environment locations and refer to the path by using the ReferencePath API. +N> Always reference matching client- and server-side PDF Viewer versions and verify that `pdfium.dll` is generated or copied during runtime. When automatic extraction is not possible, place the native assemblies in a secure folder and point the viewer to that location by using the `ReferencePath` API. -For example, if the Pdfium assembly is available in this path C:\Pdfium\x64 or D:\Pdfium\x86, the reference path should be PdfRenderer.ReferencePath = "C:/"; +If the PDFium assemblies reside in `C:\Pdfium\x64` or `D:\Pdfium\x86`, set `PdfRenderer.ReferencePath = "C:/Pdfium/";`. Provide the parent folder in the `ReferencePath` so that the viewer can pick the proper architecture-specific subfolder. -The parent folder has to be provided as the path in the ReferencePath API. +N> Set the `ReferencePath` inside the `Load` method in `PDFViewerController.cs`. -N> Provide this path in the Load method of the PDFViewerController.cs +N> +``` +PdfRenderer pdfRenderer = new PdfRenderer(); +pdfRenderer.ReferencePath = @"C:/Pdfium/"; +``` -N> PdfRenderer PdfRenderer = new PdfRenderer(); -
    PdfRenderer.ReferencePath = @"C:/"; +## Steps to refer the PDFium.dll -## Steps to refer the Pdfium.dll +1. Extract the downloaded Pdfium archive and copy the entire folder into the application’s root directory (parallel to the `Controllers` folder) so both `x64` and `x86` subfolders are available. +2. In Solution Explorer, select `pdfium.dll` within the `x64` and `x86` folders, open the Properties window, and set **Copy to Output Directory** to **Copy always**. This ensures the assemblies are packaged during publish. +![Pdfium.dll settings](../images/pdfium_dll_settings.png) +3. Update the `Load` method in `PDFViewerController.cs` to point to the parent Pdfium folder. The reference should target the folder that contains the architecture folders. +N> `PdfRenderer.ReferencePath = _hostingEnvironment.ContentRootPath + "\\Pdfium\\";` +4. Build and publish the application, then confirm that the Pdfium binaries are present in the deployment output and accessible with write permission. -1. Extract the given file (Pdfium folder) and copy it in the sample’s root directory (parallel to Controllers folder) +Install the following NuGet package before running the project. The packaged viewer includes the managed wrapper that works across Windows, Linux, and macOS. -2. Right-click on the pdfium.dll (both the X64 and X86 folder) and then choose the “Copy to Output Directory” property from the property window and set its value to “copy always”. This setting will ship the pdfium.dll assembly to the published location. -![Pdfium.dll settings](../../images/pdfium_dll_settings.png) +* Syncfusion.EJ2.PdfViewer.AspNet.Core -3. Provide this path in the Load method of the PDFViewerController.cs -N> You need to refer the ParentFolder up to the x64/x86 folder. -*PdfRenderer.ReferencePath = _hostingEnvironment.ContentRootPath + /Pdfium/;* +Following these steps should resolve the issue in most environments. -4. Build and publish the application. +## Steps to resolve the PDFium issue in Linux environment -Also, install the package, then build and run the project. Use the following library: +* The error indicates that the PDFium dependency is missing in the Linux environment. Install the required native libraries by running the following commands in sequence on the Linux host or container. -• Syncfusion.EJ2.PdfViewer.AspNet.Core +``` + sudo cp -u /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libdl.so + sudo apt-get update + sudo apt install libgdiplus +``` -Following these steps should resolve the issue. +## Steps to resolve the PDFium issue in docker environment + +* The same error can appear in Docker images when the Pdfium dependency is absent. Add the corresponding commands to the Dockerfile so the container includes the required native libraries. + +If you are using the PDF Viewer with Docker in .NET 6.0 framework, incorporate the following commands into your Dockerfile to install the Pdfium dependency: + +``` + RUN ln -s /lib/x86_64-linux-gnu/libdl-2.24.so /lib/x86_64-linux-gnu/libdl.so + # install System.Drawing native dependencies + RUN apt-get update && apt-get install -y --allow-unauthenticated libgdiplus libc6-dev libx11-dev + RUN ln -s libgdiplus.so gdiplus.dll +``` + +Dockerfile 6.0: [dockerfile](https://github.com/SyncfusionExamples/PdfViewer-Server/blob/master/Dockerfile) + +If you are using the PDF Viewer with Docker in .NET 8.0 framework, incorporate the following commands into your Dockerfile to install the Pdfium dependency: + +``` + RUN ln -s /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libdl.so + # install System.Drawing native dependencies + RUN apt-get update && apt-get install -y --allow-unauthenticated libgdiplus libc6-dev libx11-dev + RUN ln -s libgdiplus.so gdiplus.dll +``` + +Dockerfile 8.0: [dockerfile](https://github.com/SyncfusionExamples/PdfViewer-Server/blob/master/Dockerfile_NET80) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/restricting-zoom-in-mobile-mode.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/restricting-zoom-in-mobile-mode.md index c4544e810..600e11d7c 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/restricting-zoom-in-mobile-mode.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/restricting-zoom-in-mobile-mode.md @@ -1,16 +1,16 @@ --- layout: post -title: Restrict Zoom Percentage in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all how to restrict zoom percentage in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Restrict zoom percentage on mobile in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to limit the maxZoom and minZoom values in the Syncfusion ASP.NET MVC PDF Viewer to control zoom levels on mobile devices. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# 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. +The Syncfusion® ASP.NET MVC PDF Viewer allows developers tqo cap zoom ranges on phones and tablets by adjusting the `maxZoom` and `minZoom` properties after the `documentLoad` event fires. Setting device-specific limits prevents excessive pinch-zooming, keeps pages readable, and avoids stuttering caused by rendering at extreme scales. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -54,6 +54,6 @@ In Syncfusion® PDF Viewer, you can easily r {% endhighlight %} {% endtabs %} -By implementing this, you ensure that the maximum zoom percentage on mobile devices is limited to 200% and the minimum zoom percentage is set to 10%. This prevents performance issues that may arise from excessive zooming on mobile platforms. +By enforcing these limits, mobile users can zoom between 10% and 200%, which avoids blurry rendering or performance drops caused by extreme zoom levels. Adjust the thresholds to suit the document content but keep `minZoom` less than or equal to `maxZoom` so the viewer maintains a valid range. [View Sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/Restrict%20Zoom%20Percentage%20on%20Mobile%20Devices/PDFViewerSample) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/retry-timeout.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/retry-timeout.md index bf6b72892..381bff5ac 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/retry-timeout.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/retry-timeout.md @@ -1,24 +1,23 @@ --- layout: post -title: Retry Timeout in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Retry Timeout in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Configure retryTimeout in the ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to configure retryTimeout and retryCount in the Syncfusion ASP.NET MVC PDF Viewer to improve reliability when network requests fail. platform: document-processing -control: Retry Timeout -publishingplatform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC documentation: ug --- -# Retry Timeout +# Configure retry timeout and retry count -The **[Retry Timeout](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_RetryTimeout)** feature allows you to specify a duration for the PDF Viewer to retry failed AJAX requests before considering them permanent failures. It helps in handling temporary failures due to network issues or server unavailability. +The Syncfusion® ASP.NET MVC PDF Viewer can automatically retry failed AJAX requests by using the [`retryTimeout`](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_RetryTimeout) and [`retryCount`](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_RetryCount) properties. Configure these settings to handle transient network errors or brief service outages without interrupting the document viewing experience. -The retryTimeout allows developers to specify a duration after which the AJAX request should retry failed requests automatically. Developers can ensure a more resilient and fault-tolerant PDF viewing experience by configuring an appropriate retry timeout value. +Set `retryTimeout` to define how long (in seconds) the viewer waits before retrying the failed request, and use `retryCount` to control how many attempts occur before the viewer reports an error. By default, `retryTimeout` is `0`, which disables the retry delay and causes the viewer to keep the request open indefinitely, while `retryCount` defaults to `0`, meaning no additional attempts occur. -By default, when an AJAX request fails, the Retry Timeout property is set to `0`, indicating that no timeout is set. In this case, the PDF Viewer will wait indefinitely for a response, potentially leading to a hanging request. However, you can set the Retry Timeout property to a positive number, specifying the maximum number of seconds the PDF Viewer should wait for a response. If the response is not received within the specified time, the request will be aborted, triggering an appropriate error or timeout property. +Assign positive values to both properties to limit how long the viewer waits for a response and how many retries should run before surfacing an error message. +Use the properties in Razor markup as shown below. This sample demonstrates a server-backed viewer configuration. -To set the retry timeout, use the [retryTimeout](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_RetryTimeout) property in the PDF Viewer configuration. This property takes a value in seconds. - -```cs +```html @{ ViewBag.Title = "Home Page"; @@ -34,12 +33,8 @@ To set the retry timeout, use the [retryTimeout](https://help.syncfusion.com/cr/ ``` -In the given example, the [retryTimeout](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_RetryTimeout) is set to 10 seconds, and the `retryCount` is set to 5. This means that if a request made by the PDF Viewer takes longer than 10 seconds to receive a response, it will be considered a timeout. In such cases, The PDF Viewer will resend the same request based on the retryCount. Here, this process will repeat up to maximum of 5 retries. - -When an exception occurs during the AJAX request in the context of the PDF Viewer, the request will wait for the specified [retryTimeout](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_RetryTimeout) duration. If the timeout duration is exceeded, the PDF Viewer will decrement the [retryCount](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_RetryCount) and attempt to load the document again. This retry process continues until the document is successfully loaded or the retryCount limit is reached. - -The [retryCount](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_RetryCount) property of the PDF Viewer allows you to set the number of retries for a specific request. This feature is particularly useful for handling temporary errors such as network timeouts or server issues. By initiating new requests according to the retry count, ensure a smoother user experience and efficiently handle network or server problems. +In the sample, `retryTimeout` is set to 10 seconds and `retryCount` to 5. If the service does not respond within 10 seconds, the viewer aborts the request and queues a new attempt. The process continues until the document loads or all five retries finish without success. -If the timeout duration specified by [retryTimeout](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_RetryTimeout) is exceeded during the AJAX request, the PDF Viewer will decrement the `retryCount` and initiate a new request. This process will continue until the document is successfully loaded or the retry count limit is reached. This functionality helps improve the handling of temporary errors and ensures a more efficient and user-friendly experience. +Monitor the [`ajaxRequestFailed`](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_AjaxRequestFailed) event to log or display messages when the viewer exhausts all retries. This makes it easier to alert users and diagnose persistent outages. -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/Retry%20Timeout) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/Retry%20Timeout) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/save-original-document-at-the-server-side.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/save-original-document-at-the-server-side.md new file mode 100644 index 000000000..830ae588e --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/save-original-document-at-the-server-side.md @@ -0,0 +1,63 @@ +--- +layout: post +title: Save the original document on the server in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to save the original PDF document on the server by calling a custom download action in the Syncfusion ASP.NET MVC PDF Viewer. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Save original document at the server side + +The PDF Viewer can persist the original PDF file on the server by redirecting the download action to a custom controller method. Use this approach when audit trails, archival policies, or downstream processing require access to the unmodified document after users view it in the browser. + +Follow these steps to enable server-side persistence: + +**Step 1:** Create a PDF Viewer project by following the [ASP.NET MVC getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) so that the viewer scripts, Razor markup, and controller endpoints are configured. + +**Step 2:** Add a button that overrides the download action before invoking the viewer’s `download` method. The snippet below toggles the `serverActionSettings.download` endpoint, triggers the download call, and then restores the default action. + +```html + + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +``` + +**Step 3:** Implement the `SaveDocument` action in `PDFViewerController.cs`. The controller uses `PdfRenderer.GetDocumentAsBase64` to retrieve the original file stream and writes it to disk. + +```cs + +[System.Web.Mvc.HttpPost] +public ActionResult SaveDocument(jsonObjects jsonObject) +{ + PdfRenderer pdfviewer = new PdfRenderer(_cache); + string documentBase = pdfviewer.GetDocumentAsBase64(jsonObject); + string base64String = documentBase.Split(new string[] { "data:application/pdf;base64," }, StringSplitOptions.None)[1]; + if (base64String != null || base64String != string.Empty) + { + byte[] byteArray = Convert.FromBase64String(base64String); + + MemoryStream ms = new MemoryStream(byteArray); + var path = _hostingEnvironment.ContentRootPath; + System.IO.File.WriteAllBytes(path + "/ouptut.pdf", byteArray); + } + return Content(string.Empty); +} + +``` + +N> Ensure that the controller has permission to write to the target folder, validate user authorization before saving sensitive files, and update the output path and file name to match your deployment standards. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/select-multi-page-annotations.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/select-multi-page-annotations.md new file mode 100644 index 000000000..d69f870c3 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/select-multi-page-annotations.md @@ -0,0 +1,32 @@ +--- +layout: post +title: Select multi page annotations in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about Select multi page annotations in Syncfusion ASP.NET MVC Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Select multi page annotations in ASP.NET MVC Pdfviewer control + +To select a multi-page TextMarkup annotation as a single annotation in a Syncfusion PDF viewer, you can use by enabling the [**EnableMultiPageAnnotation**](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_EnableMultiPageAnnotation) property. By default it is `false`. + +Here is an example of how you can use the [**EnableMultiPageAnnotation**](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_EnableMultiPageAnnotation) property to select the multi page TextMarkup annotation as a single annotation, export and import multi page annotation: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnableMultiPageAnnotation(true).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnableMultiPageAnnotation(true).Render() +
    + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/set-author-name-to-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/set-author-name-to-annotation.md index 9423d6ff4..ed00054e8 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/set-author-name-to-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/set-author-name-to-annotation.md @@ -1,22 +1,25 @@ --- layout: post -title: Set Author Name To Annotation in ASP.NET MVC Pdfviewer Component -description: Learn here all about Set Author Name To Annotation in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Set Author Name to Annotation in PDF Viewer +description: Learn how to set the author name for annotations in the Syncfusion ASP.NET MVC PDF Viewer component of Essential JS 2, enhancing collaboration and tracking. platform: document-processing -control: Set Author Name To Annotation -publishingplatform: ASP.NET MVC +control: PDF Viewer documentation: ug --- -# Set author name to annotation +# Set Author Name to Annotations -The PDF Viewer server library allows you to set author name to all annotations in the PDF document. Use the **author** property to set author name to all annotations. +In the PDF Viewer, you can assign an author name to all annotations within a PDF document. This feature is particularly useful for collaboration and tracking changes made by different users. Use the `author` property within the annotation settings to specify the author's name. -The following steps are used to set author name to all annotation for PDF Viewer, +Follow these steps to set the author name for annotations in the PDF Viewer: -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create simple PDF Viewer sample. +**Step 1: Create a Basic PDF Viewer Sample** -**Step 2:** Set author name to annotations using below code snippet. +Start by following the instructions provided in the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to set up a basic PDF Viewer application. + +**Step 2: Set the Author Name** + +Once your PDF Viewer is set up, you can set the author name for annotations using the following JavaScript code snippet. This typically goes within your view, often at the end of the `` tag or in a dedicated script file, after the PDF Viewer component has been initialized. ```html @@ -31,4 +34,4 @@ The following steps are used to set author name to all annotation for PDF Viewer ``` -Download the sample [how to set author name to annotation](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE_(2)_(1)1717421659) \ No newline at end of file +Download the sample [how to set author name to annotation](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE_(2)_(1)1717421659) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-bookmark.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-bookmark.md new file mode 100644 index 000000000..a04536325 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-bookmark.md @@ -0,0 +1,38 @@ +--- +layout: post +title: Show the bookmark pane in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to display the bookmark pane programmatically in the Syncfusion ASP.NET MVC PDF Viewer by enabling the enableBookmark property. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Show bookmark + +The Syncfusion® ASP.NET MVC PDF Viewer can display the bookmark pane automatically by setting the [`enableBookmark`](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_EnableBookmark) property to `true`. Use this option when documents rely on bookmark navigation for quick access to chapters or tagged sections. + +N> The default value of `enableBookmark` is `true`, so the bookmark pane remains available unless it is explicitly disabled. + +Follow these steps to show the bookmark pane: + +**Step 1:** Create a PDF Viewer sample by using the [ASP.NET MVC getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-core/getting-started) so that the required scripts, styles, and controller endpoints are configured. + +**Step 2:** Enable the bookmark pane in the Razor markup, as shown in the following samples. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnableBookmark(true).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnableBookmark(true).Render() +
    + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-custom-stamp-item.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-custom-stamp-item.md index 22c309e48..ea5cede9b 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-custom-stamp-item.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-custom-stamp-item.md @@ -1,28 +1,22 @@ --- layout: post -title: Displaying Custom stamp Item in EJ2 ASP.NET MVC PdfViewer | Syncfusion -description: Learn how to display custom stamp items in the custom stamp in the Syncfusion ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Display custom stamp items in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to configure custom stamp settings in the Syncfusion ASP.NET MVC PDF Viewer so users can apply personalized stamps from the custom stamp dropdown. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Displaying Custom Items in Custom Stamp Dropdown +# Display custom items in the custom stamp dropdown -### Overview +The PDF Viewer supports custom stamp templates so that reviewers can reuse organization-specific seals or approval marks. Populate the custom stamp dropdown by configuring the [`PdfViewerCustomStampSettings`](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerCustomStampSettings.html) object when initializing the viewer. -This guide explains how to add and display custom items in the custom stamp dropdown menu of Syncfusion's PDF Viewer using ASP.NET MVC. This feature allows users to easily access and apply custom stamps to their PDF documents. +Follow these steps to surface custom stamp items: -### Steps to Show Custom Items in Custom Stamp Dropdown +**Step 1:** Create an ASP.NET MVC PDF Viewer sample by following the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started). The tutorial explains how to reference the required Syncfusion scripts, styles, and Razor Page model before adding custom stamps. -**Step 1:** Set Up the PdfViewer in Your ASP.NET MVC Project - - Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. - -**Step 2:** Configure Custom Stamp Settings - -Within the PDF Viewer setup, utilize `PdfViewerCustomStampSettings` to specify the custom stamps that should appear in the dropdown menu. +**Step 2:** Define the custom stamp collection in the Razor Page and assign it to `PdfViewerCustomStampSettings`. The sample below demonstrates how to add base64 or hosted image sources to the dropdown. Replace the placeholder image strings with production-ready assets that your application can access securely. ```cs @using Syncfusion.EJ2.PdfViewer @@ -62,6 +56,6 @@ Within the PDF Viewer setup, utilize `PdfViewerCustomStampSettings` to specify t ``` -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. +After configuring the custom stamp settings, the viewer automatically lists the provided stamp items in the custom stamp dropdown so users can insert them directly onto PDF pages. -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-hide-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-hide-annotation.md index 37d1be209..536476b10 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-hide-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-hide-annotation.md @@ -1,28 +1,22 @@ --- layout: post -title: Show and Hide Annotations in EJ2 ASP.NET MVC PdfViewer | Syncfusion -description: Learn how to dynamically show and hide annotations in the Syncfusion ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Toggle annotation visibility in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to toggle annotation visibility in the Syncfusion ASP.NET MVC PDF Viewer by exporting and restoring annotations with custom buttons. platform: document-processing -control: Show and Hide Annotations +control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Show and Hide Annotations in PDF Viewer +# Toggle annotation visibility -### Overview +The Syncfusion® ASP.NET MVC PDF Viewer lets developers temporarily hide annotations by exporting them, clearing them from the UI, and then importing them back on demand. This workflow is helpful when presenters need to focus on document content or compare marked-up and clean versions of the same file. -This guide demonstrates how to implement functionality to dynamically show and hide annotations in a PDF document loaded in the Syncfusion PDF Viewer using ASP.NET MVC. This feature is particularly useful in scenarios where you need to present a clean view of the document or toggle between annotated and non-annotated views. +Follow these steps to add annotation toggle controls: -### How to Show and Hide Annotations +**Step 1:** Create a PDF Viewer sample by following the [ASP.NET MVC getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started). Ensure the viewer scripts, styles, and Razor Page model are registered before wiring annotation logic. -**Step 1:** Set Up the PdfViewer in Your ASP.NET MVC Project - -First, follow the steps provided in the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. - -**Step 2:** Add Toggle Button and Implementation - -Add a button to toggle annotation visibility and implement the necessary JavaScript functions to handle the show/hide functionality: +**Step 2:** Add buttons that export and delete annotations to hide them, and re-import the cached annotations to show them again. Place the markup and script within the Razor page so the code runs after the viewer is initialized. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -69,6 +63,6 @@ Add a button to toggle annotation visibility and implement the necessary JavaScr {% endhighlight %} {% endtabs %} -This implementation provides a clean, efficient way to toggle the visibility of annotations in your PDF documents. It's particularly useful for presentation scenarios or when you need to focus on the document content without the distraction of annotations. +The `exportAnnotationsAsObject` method returns a promise whose resolved value stores the serialized annotations; persist this object securely if it contains sensitive content. The `resourceUrl` must reference a PDF Viewer build that matches your application version, and similar logic can be applied in server-backed samples by replacing the `resourceUrl` with `serviceUrl`. -[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) \ No newline at end of file +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-notification-dialog.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-notification-dialog.md index 44e77afe5..9e5209489 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-notification-dialog.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/show-notification-dialog.md @@ -1,27 +1,30 @@ --- layout: post -title: Show Notification Dialog in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Show Notification Dialog in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Show Notification Dialog for Empty Form Fields in ASP.NET MVC PDF Viewer +description: Learn how to display a notification dialog when form fields are empty in the Syncfusion ASP.NET MVC PDF Viewer, enhancing user experience during form filling. platform: document-processing -control: Show Notification Dialog -publishingplatform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC documentation: ug --- +# Show Notification Dialog for Empty Form Fields -# Show the notification dialog in UI When form fields are empty +The PDF Viewer component enables displaying a notification dialog in the user interface when form fields in a PDF document are empty or unfilled. Use this feature to improve user experience during form completion by guiding users to complete required fields. -The PDF Viewer server library allows you to show the notification dialog in UI when fields in the form are not filled or empty using the following properties and events below, +Configure the following properties and handle the following event to implement this: -* **EnableFormFieldsValidation** -* **ShowNotificationDialog** -* **validateFormFields** +* **EnableFormFieldsValidation**: Set to `true` to enable validation for form fields. +* **ShowNotificationDialog**: Set to `false` to suppress automatic notification dialogs and handle custom validation. +* **validateFormFields**: This event triggers when form validation occurs, providing access to non-fillable fields for custom logic. -The following steps are used to show the notification dialog in UI. +Supported form field types include text fields, checkboxes, radio buttons, drop-down lists, and combo boxes. The event arguments include an array of non-fillable fields for programmatic access. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. +Follow these steps to show the notification dialog when form fields are empty. -**Step 2:** Use the following code snippet to show the notification dialog when form fields are empty. +**Step 1:** Follow the steps provided in the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a basic PDF Viewer sample. + +**Step 2:** Use the following code snippet to customize notification display on form validation. ```cs @@ -38,4 +41,4 @@ The following steps are used to show the notification dialog in UI. ``` -Find the sample of [how to show the notification dialog in UI When form fields are empty](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE_d50d2de6-1937239856.zip) \ No newline at end of file +Download the sample demonstrating [how to show the notification dialog for empty form fields](https://www.syncfusion.com/downloads/support/directtrac/general/ze/MVC_SAMPLE_d50d2de6-1937239856.zip). \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/signature-date.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/signature-date.md index 11a58c416..13a6e4d71 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/signature-date.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/signature-date.md @@ -1,18 +1,24 @@ --- layout: post -title: Add date to signature field in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about how to add the date to the signature text in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Add Date to Signature Field in ASP.NET MVC PDF Viewer +description: Learn how to add the current date to the signature text in the Syncfusion ASP.NET MVC PDF Viewer using the updateFormFieldsValue method. platform: document-processing -control: How to add the date to the signature text -publishingplatform: document-processing -documentation: UG +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug --- -# How to add the date to the signature text +# Add Date to Signature Field -To add a date with the signature text in Syncfusion® PDF Viewer, use the `updateFormFieldsValue()` method. Add a signature field to a PDF document and get the signature field in a PDF using the `retrieveFormFields()` method and store it in a variable. Modify the value of the signature field and get the current date. Use the `Date()` method to get the current date and format it as desired. +In the PDF Viewer, you can programmatically add the current date alongside signature text for compliance, audit trails, or legal documentation. Use the `updateFormFieldsValue()` method to modify the signature field value after retrieving it with `retrieveFormFields()`. -Update the signature field in a PDF using the `updateFormFieldsValue()` method and pass the modified signature field as a parameter. +Use a PDF with an existing signature field. Call `retrieveFormFields()` to get the field, update the `value` property with text and date using `new Date()`, then apply changes with `updateFormFieldsValue()`. + +Follow these steps to add a date to the signature field. + +**Step 1:** Set up a PDF Viewer sample by following the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/). Ensure the PDF document contains at least one signature field. + +**Step 2:** Place a button in your view to trigger the signature update, and include the JavaScript function to handle it. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -57,4 +63,4 @@ Update the signature field in a PDF using the `updateFormFieldsValue()` method a {% endhighlight %} {% endtabs %} -[View Sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/EJ2-67373-sample/How%20to/Add%20date%20with%20the%20signature) \ No newline at end of file +View the complete sample in the [GitHub repository](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/EJ2-67373-sample/How%20to/Add%20date%20with%20the%20signature). diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/signatureselect-signatureunselect.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/signatureselect-signatureunselect.md index b3eb9689f..f7454967a 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/signatureselect-signatureunselect.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/signatureselect-signatureunselect.md @@ -1,26 +1,31 @@ --- layout: post -title: Signature selection events in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about signatureSelect and signatureUnselect event in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Handle signatureSelect and signatureUnselect events in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to respond to signatureSelect and signatureUnselect events in the Syncfusion ASP.NET MVC PDF Viewer to track handwritten signature interactions. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# SignatureSelect and SignatureUnselect event +# 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. +The Syncfusion® ASP.NET MVC PDF Viewer raises the `signatureSelect` and `signatureUnselect` events whenever a handwritten signature annotation gains or loses focus. Use these callbacks to log reviewer actions, update guidance in the surrounding UI, or validate that a signer completes required steps before saving a document. **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. +This event fires when the user taps or clicks an existing handwritten signature or finishes drawing a new one. The event argument includes metadata such as the annotation ID, bounds, and page number so that applications can highlight related UI elements or load signer details. **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. +This event fires after the focus moves away from a signature or the user deselects it. Handle the callback to persist edits, disable context commands, or reset state that should only be active while a signature is selected. -The code snippet demonstrates how to subscribe to the `signatureSelect` and `signatureUnselect` events in the Syncfusion® PDF Viewer component. +Follow these steps to wire the events in an ASP.NET MVC application: + +1. Create a PDF Viewer sample by following the [ASP.NET MVC getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started). The guide explains how to register the viewer scripts, styles, and controller endpoints. +2. Place the buttons and script inside the page so the handlers attach after the viewer initializes. The console output appears in the browser developer tools and can be replaced with custom UI updates or service calls. + +The following sample subscribes to both events in standalone and server-backed configurations. {% tabs %} {% highlight html tabtitle="Standalone" %} @@ -68,4 +73,4 @@ function signatureUnselect(args) { {% 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. \ No newline at end of file +By handling `signatureSelect` and `signatureUnselect`, applications can audit signer activity, enable or disable toolbar actions, and provide immediate feedback when signatures change state. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/unload-document.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/unload-document.md index fe96eb688..0b82c5c4a 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/unload-document.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/unload-document.md @@ -1,34 +1,61 @@ --- layout: post -title: Unload Document in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about Unload Document in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Unload a PDF document programmatically in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn how to call the unload method in the Syncfusion ASP.NET MVC PDF Viewer to clear the current PDF document programmatically. platform: document-processing -control: Unload Document -publishingplatform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC documentation: ug --- - # Unload the PDF document programmatically -The PDF Viewer library allows you to unload the PDF document being displayed in the PDF Viewer control programmatically using the [**unload()**](https://ej2.syncfusion.com/documentation/api/pdfviewer/#unload) method. +The Syncfusion® ASP.NET MVC PDF Viewer exposes the [**unload()**](https://ej2.syncfusion.com/documentation/api/pdfviewer/#unload) method to remove the currently displayed document, release associated resources, and reset the viewer UI. Use this approach when switching between files or clearing sensitive content after it has been reviewed. + +Follow these steps to unload a PDF document programmatically: -The following steps are used to unload the PDF document programmatically. +**Step 1:** Create a PDF Viewer sample by following the [ASP.NET MVC getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started) so the required scripts, styles, and controller endpoints are configured. -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create a simple PDF Viewer sample. +**Step 2:** Add the following markup and script to call `unload()` when the button is clicked. Place the script within the Razor page after the viewer element so the instance is available. -**Step 2:** Add the following code snippet to perform the unload operation. +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} -```html - + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    -``` -Download the Sample, [how to unload the PDF document programmatically](https://www.syncfusion.com/downloads/support/directtrac/general/ze/EJ2MvcSample-1421635547.zip) \ No newline at end of file +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + + +After calling `unload()`, the viewer removes the document and toolbar state until a new file is loaded. Apply the same pattern in both standalone and server-backed configurations to ensure cached data is cleared before loading a different PDF. + +[how to unload the PDF document programmatically](https://www.syncfusion.com/downloads/support/directtrac/general/ze/EJ2MvcSample-1421635547.zip) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/webservice-not-listening.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/webservice-not-listening.md index bae5753d6..3b7902db2 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/webservice-not-listening.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/webservice-not-listening.md @@ -1,71 +1,72 @@ --- layout: post -title: Web-service is not listening to error in EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn how to clear Web-service is not listening to error in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +title: Resolve “Web service is not listening” error in ASP.NET MVC PDF Viewer | Syncfusion +description: Troubleshoot the “Web service is not listening” error in the Syncfusion ASP.NET MVC PDF Viewer by validating network requests, cache configuration, and server availability. platform: document-processing -control: How to clear Web-service is not listening to error -publishingplatform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC documentation: ug --- -# How to clear the "Web-service is not listening" to error +# Resolve “Web service is not listening” error -![Alt text](../images/webservice.png) +![Browser showing the Web service is not listening error](../images/webservice.png) -If you are facing a **Web-service is not listening** to error in the Syncfusion® PDF Viewer, there could be several reasons for this. To troubleshoot the issue, you can use the Network tab in your browser's developer tools to gather more information. Here are the steps you can follow: +The Syncfusion® ASP.NET MVC PDF Viewer displays the **Web service is not listening** message when the viewer cannot reach its backend service or the service returns an unexpected error. Use the following steps to diagnose the request, review server responses, and apply the appropriate fix. -**Step 1:** Open the browser's developer tools by right-clicking on the page and selecting `Inspect` from the dropdown menu. Then Navigate to the `Network` tab. This will show you all of the requests that are being made by the page. +## Diagnose the service response -![Alt text](../images/networktab.png) +**Step 1:** Open the browser developer tools (right-click the page and select **Inspect**) and switch to the **Network** tab to monitor requests from the PDF Viewer. -**Step 2:** Try to request the web service. If the service is not listening, the request will fail, and you should see an error message in the Network tab. Click on the failing request to see the details of the error, such as the error message or stack trace. This can help you identify the root cause of the issue. Check the server logs for any errors or warnings that may indicate the cause of the issue and help you to troubleshoot the problem. +![Developer tools Network tab displaying failed requests](../images/networktab.png) -**Step 3:** Check the request URL and parameters to see if they are correct. If there is a type or an incorrect parameter, the web service may be unable to process the request. +**Step 2:** Reproduce the issue and select the failed request to inspect the response status, headers, and error payload. Capture the stack trace or error message to pinpoint the failing layer. -By following these steps and using the Network tab in your browser's developer tools, you can gather more information about the issue and troubleshoot the problem more effectively. +**Step 3:** Confirm that the request URL, HTTP method, and parameters match the controller action signature. Incorrect routes or query values prevent the service from resolving the document resource. -N> Make sure you are connected to the internet and that your connection is stable. You can try accessing other websites or services to see if they are working, and make sure the URL you are using to access the web service is correct and properly formatted. +N> Ensure that the hosting environment has internet access (when required), the PDF service endpoint URL is correct, and the application can reach dependent resources such as storage accounts or caches. -## Here are some common exceptions +## Common exceptions and fixes -* File not found. -* Document cache not found. -* Document pointer does not exist in the cache. +### File not found -## File not found +* Verify that `documentPath` and server-side file references point to existing files and that deployment scripts copy the assets to the published output. -If you are encountering an error message stating that the web service is not listening due to a file not being found in the Syncfusion® PDF viewer, you can try the following steps to resolve the issue: +* Update configuration settings or connection strings when file locations move between environments (for example, from local paths to Azure Blob Storage). ### Check the file path Ensure that the file path you use to access the PDF file is correct and that the file exists in that location. You will need to update the file path if the file does not exist. -## Document cache not found +### Document cache not found -The `Document cache not found` exception in Syncfusion® PDF Viewer typically occurs when the cache used to store the rendered pages of a PDF document is not found or has been deleted. This can happen if the cache directory is changed or deleted or if the application is running in a different environment than it was previously. +The `Document cache not found` exception in Syncfusion® PDF Viewer usually occurs when the cache used to store rendered PDF pages is missing or has been deleted. This can happen if the cache directory has been altered or removed, or if the application is running in a different environment than before. ### Check for multiple instances -It's possible that you have multiple instances of the Syncfusion® PDF Viewer running simultaneously, which can cause issues with the document cache. To check for this, open the Task Manager on your computer and look for any instances of the Syncfusion® PDF Viewer running. If you find multiple instances, try closing them all and reopening the viewer. +Sometimes, multiple instances of the Syncfusion® PDF Viewer may run simultaneously, which can lead to conflicts with the document cache. To check for this, open your computer’s Task Manager and look for any active Syncfusion® PDF Viewer processes. If you find more than one, close all instances and then relaunch the viewer. -We can use Redis cache and distributive cache for this issue. +Additionally, implementing a Redis cache or a distributed caching mechanism can help manage document caching more efficiently and prevent such issues. ### Check your network connection -Ensure that your network connection is stable and strong enough to support the web service you are trying to use. Sometimes, simply restarting the web service can resolve the issue. Try stopping and starting the service again to see if it resolves the problem. +Make sure your network connection is stable and strong enough to support the web service you're trying to access. In some cases, simply restarting the service can resolve the issue. Try stopping and then starting the service again to see if that helps. -## The document pointer does not exist in the cache. +### Document pointer does not exist in the cache -The `Document pointer does not exist in the cache` exception in the Syncfusion® PDF Viewer usually occurs when there is an issue with loading or caching the PDF document. This error can be caused by a variety of reasons, including: +The Document pointer does not exist in the cache exception in the Syncfusion® PDF Viewer typically indicates a problem with loading or caching the PDF document. This error can arise due to several reasons. -To clear this error in the Syncfusion® PDF Viewer, you can try the following steps: +To resolve this issue, you can follow these steps: -**Step 1:** Clearing the cache may help resolve the issue. To clear the cache, navigate to the cache location, which can be found in the Syncfusion® PDF Viewer's settings or configuration files. Once you locate the cache folder, delete its contents. +**Step 1: Clear the cache.*** +Locate the cache directory, which is specified in the Syncfusion® PDF Viewer’s settings or configuration files. Once found, delete the contents of the folder to remove any corrupted or outdated cache data. -**Step 2:** Try reloading the document to ensure it is loaded correctly. You can do this by calling the controller's Load() method. Ensure the document is not already loaded before attempting to load it again. +**Step 2: Reload the document.** +Use the controller’s Load() method to reload the PDF. Before doing so, ensure that the document isn’t already loaded to avoid conflicts. -**Step 3:** Restart the application. If clearing the cache does not work, you can try restarting the PDF Viewer application. This will reload all the necessary components and may resolve the error. +**Step 3: Restart the application.** +If clearing the cache doesn’t resolve the issue, try restarting the PDF Viewer application. This refreshes all components and may eliminate the error. ## Internal server error -Server-side exceptions happen for various use cases. We can't just define them if they are document-specific, provide the document, or you may need to contact Syncfusion® support for further assistance. \ No newline at end of file +Server-side failures can stem from document content, authentication, or environment-specific configuration. Review server logs to identify the underlying exception and, if necessary, share the failing document or logs with Syncfusion support for further analysis. From 2fb1c2fd2e26fc5b0a7a32b45efd58689e9db3b6 Mon Sep 17 00:00:00 2001 From: sathiyaseelanksf3503 Date: Thu, 23 Oct 2025 23:38:21 +0530 Subject: [PATCH 06/14] 987332: Restructure the Folders --- Document-Processing-toc.html | 75 +- .../PDF-Viewer/asp-net-mvc/accessibility.md | 1 - .../annotation/annotation-event.md | 1 - .../annotation/annotations-in-mobile-view.md | 1 - .../asp-net-mvc/annotation/comments.md | 1 - .../annotation/free-text-annotation.md | 1 - .../asp-net-mvc/annotation/ink-annotation.md | 1 - .../annotation/line-angle-constraints.md | 1 - .../annotation/measurement-annotation.md | 1 - .../annotation/shape-annotation.md | 1 - .../annotation/signature-annotation.md | 1 - .../annotation/stamp-annotation.md | 1 - .../annotation/sticky-notes-annotation.md | 1 - .../annotation/text-markup-annotation.md | 1 - .../PDF/PDF-Viewer/asp-net-mvc/event.md | 1934 +++++++++++++++++ .../form-designer/create-programmatically.md | 1 - .../create-with-user-interface-interaction.md | 1 - .../form-designer/form-field-events.md | 1 - .../getting-started-with-server-backed.md | 3 +- .../PDF-Viewer/asp-net-mvc/getting-started.md | 3 +- .../PDF-Viewer/asp-net-mvc/how-to-overview.md | 2 +- .../asp-net-mvc/how-to/access-file-name.md | 12 +- .../how-to/add-annotation-in-text-search.md | 2 +- .../asp-net-mvc/how-to/capture-page-number.md | 2 +- .../asp-net-mvc/how-to/close-comment-panel.md | 5 +- .../configure-annotation-selector-setting.md | 5 +- .../images/Context-Menu-Page-Operations1.png | Bin 0 -> 25178 bytes .../asp-net-mvc/images/annotation-toolbar.png | Bin 0 -> 35005 bytes .../images/form-deigner-toolbar.png | Bin 0 -> 33536 bytes .../images/pdfviewer-primary-toolbar.png | Bin 0 -> 44679 bytes .../bookmark-navigation.md | 122 ++ .../page-navigation.md | 126 ++ .../page-thumbnail-navigation.md | 38 + .../table-of-content-navigation.md | 158 ++ .../organize-pdf/organize-page-mobile-view.md | 37 + .../organize-pdf/organize-pdf-events.md | 105 + .../programmatic-support-for-organize-page.md | 150 ++ .../organize-pdf/toolbar-organize-page.md | 88 + .../ui-interactions-organize-page.md | 97 + .../annotation-toolbar-customization.md | 82 + .../toolbar-customization/custom-toolbar.md | 324 +++ .../form-designer-toolbar-customization.md | 63 + .../toolbar-customization/mobile-toolbar.md | 107 + .../primary-toolbar-customization.md | 288 +++ .../PDF/PDF-Viewer/asp-net-mvc/toolbar.md | 633 +----- 45 files changed, 3833 insertions(+), 644 deletions(-) create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/event.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/Context-Menu-Page-Operations1.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/annotation-toolbar.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/form-deigner-toolbar.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/pdfviewer-primary-toolbar.png create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/bookmark-navigation.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/page-navigation.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/page-thumbnail-navigation.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/table-of-content-navigation.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/organize-page-mobile-view.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/organize-pdf-events.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/programmatic-support-for-organize-page.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/toolbar-organize-page.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/ui-interactions-organize-page.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/annotation-toolbar-customization.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/custom-toolbar.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/form-designer-toolbar-customization.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/mobile-toolbar.md create mode 100644 Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/primary-toolbar-customization.md diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index 7ecf8be2c..f122bcd9b 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -249,40 +249,70 @@
  • To Azure Active Directory
+
  • Toolbar Customization + +
  • +
  • Interactive PDF Navigation + +
  • Accessibility
  • -
  • Toolbar
  • -
  • Navigation
  • Magnification
  • Text Search
  • Annotation
  • -
  • Form Filling
  • -
  • Hand Written Signature
  • Interaction Mode
  • Form Designer +
  • +
  • Form Filling
  • +
  • Organize Pages +
  • -
  • Organize Pages
  • Print
  • Download
  • +
  • Event
  • Globalization
  • Server Actions
  • -
  • How To +
  • FAQs
  • Troubleshooting diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md index 6e02515f9..e7bb297dc 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md @@ -4,7 +4,6 @@ title: Accessibility with EJ2 ASP.NET MVC PDF Viewer | Syncfusion description: Learn here all about accessibility in ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- # Accessibility in Syncfusion PDF Viewer component diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md index 9bfb2792c..b9325a5aa 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md @@ -3,7 +3,6 @@ title: Annotations Events in ASP.NET MVC Pdfviewer control | Syncfusion description: Learn here all about Annotations Events in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotations-in-mobile-view.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotations-in-mobile-view.md index 08c1f3306..807b4d756 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotations-in-mobile-view.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotations-in-mobile-view.md @@ -4,7 +4,6 @@ title: Annotations in mobile view in ASP.NET MVC Pdf viewer | Syncfusion description: Learn here all about Annotations in mobile view in Syncfusion ASP.NET MVC Pdf viewer control of Syncfusion Essential JS 2 and more. platform: document-processing control: Annotations in mobile view -publishingplatform: ASP.NET MVC documentation: ug --- # Annotations in mobile view in ASP.NET MVC Pdf viewer control diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/comments.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/comments.md index 28a0bc3a9..75f68bbc0 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/comments.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/comments.md @@ -4,7 +4,6 @@ title: Comments in ASP.NET MVC PDF Viewer control | Syncfusion description: Learn about comments, replies, and status in the Syncfusion ASP.NET MVC PDF Viewer control (Essential JS 2). platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/free-text-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/free-text-annotation.md index ec3fa3bde..b9f907fd6 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/free-text-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/free-text-annotation.md @@ -4,7 +4,6 @@ title: Free text annotation in EJ2 ASP.NET MVC PDF Viewer | Syncfusion description: Learn about free text annotations in the Syncfusion ASP.NET MVC PDF Viewer (Essential JS 2): add, edit, delete, and default settings. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/ink-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/ink-annotation.md index 914ee7d1c..7a9d4de04 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/ink-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/ink-annotation.md @@ -4,7 +4,6 @@ title: Ink annotation in ASP.NET MVC PDF Viewer control | Syncfusion description: Learn about ink annotations in the Syncfusion ASP.NET MVC PDF Viewer (Essential JS 2): add, edit, delete, and default settings. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/line-angle-constraints.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/line-angle-constraints.md index 8af18720a..c4eccb5bf 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/line-angle-constraints.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/line-angle-constraints.md @@ -4,7 +4,6 @@ title: Line angle constraints in ASP.NET MVC PDF Viewer | Syncfusion description: Learn to add, edit, delete, and configure highlight, underline, strikethrough, and squiggly text markup annotations programmatically. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/measurement-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/measurement-annotation.md index f355b54ee..1f82e97ec 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/measurement-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/measurement-annotation.md @@ -4,7 +4,6 @@ title: Measurement annotation in ASP.NET MVC PDF Viewer control | Syncfusion description: Learn about measurement annotations in the Syncfusion ASP.NET MVC PDF Viewer (Essential JS 2): distance, perimeter, area, radius, and volume. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/shape-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/shape-annotation.md index 364ec6286..6d0d2ee06 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/shape-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/shape-annotation.md @@ -4,7 +4,6 @@ title: Shape annotation in ASP.NET MVC PDF Viewer control | Syncfusion description: Learn about shape annotations in the Syncfusion ASP.NET MVC PDF Viewer (Essential JS 2), including add, edit, delete, and default settings. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/signature-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/signature-annotation.md index 0d6413f87..a8dceed77 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/signature-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/signature-annotation.md @@ -4,7 +4,6 @@ title: Handwritten signature in ASP.NET MVC PDF Viewer | Syncfusion description: Learn how to enable, add programmatically, and customize handwritten signatures in the Syncfusion ASP.NET MVC PDF Viewer. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/stamp-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/stamp-annotation.md index fc992925a..90cfdd2dc 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/stamp-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/stamp-annotation.md @@ -4,7 +4,6 @@ title: Stamp annotation in ASP.NET MVC PDF Viewer control | Syncfusion description: Learn about stamp annotations in the Syncfusion ASP.NET MVC PDF Viewer (Essential JS 2): dynamic, sign here, standard business, and custom stamps. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/sticky-notes-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/sticky-notes-annotation.md index f58f28fd8..d4ac3a067 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/sticky-notes-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/sticky-notes-annotation.md @@ -4,7 +4,6 @@ title: Sticky notes in ASP.NET MVC PDF Viewer control | Syncfusion description: Learn about sticky note annotations in the Syncfusion ASP.NET MVC PDF Viewer (Essential JS 2): add, edit, delete, and default settings. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/text-markup-annotation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/text-markup-annotation.md index 35fe76b79..6c7de899d 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/text-markup-annotation.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/text-markup-annotation.md @@ -4,7 +4,6 @@ title: Text markup annotation in ASP.NET MVC PDF Viewer control | Syncfusion description: Learn to add, edit, delete, and customize text markup annotations like highlight, underline, and squiggly in Syncfusion ASP.NET MVC PDF Viewer. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/event.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/event.md new file mode 100644 index 000000000..3af2081a7 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/event.md @@ -0,0 +1,1934 @@ +--- +title: Events in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about Events in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +documentation: ug +--- + +# Events in ASP.NET MVC Pdf viewer control + +The PDF Viewer component triggers events for creation, page navigation, document life cycle, context menu interactions, comments, bookmarks, downloads/exports, hyperlinks, import/export of annotations, keyboard commands, printing, signatures, text search, and text selection. Use these events to integrate custom logic into your application workflows. + +The following table lists the commonly used events supported by the PDF Viewer control: + +| 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://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_BookmarkClick) event triggers when a bookmark item is clicked in the bookmark panel. + +- Event arguments: [BookmarkClickEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/bookmarkClickEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").BookmarkClick("bookmarkClicked").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").BookmarkClick("bookmarkClicked").Render() +
    + + +{% endhighlight %} +{% endtabs %} + +## toolbarClick + +The [toolbarClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ToolbarClick) event triggers when a toolbar item is clicked. + +- Event arguments: `ClickEventArgs`. + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ToolbarClick("ToolbarClicked").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ToolbarClick("ToolbarClicked").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## validateFormFields + +The [validateFormFields](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ValidateFormFields) event is raised when form 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 your app logic if needed. + +- Event arguments: [ValidateFormFieldsArgs](https://ej2.syncfusion.com/javascript/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 + +How to trigger +- 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: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ValidateFormFields("validateFormFields").EnableFormFieldsValidation(true).Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ValidateFormFields("validateFormFields").EnableFormFieldsValidation(true).Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +Tip +- To require a field programmatically, set isRequired: true when creating/editing the field via Form Designer APIs. + +## zoomChange + +The [zoomChange](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ZoomChange) event triggers when the magnification value changes. + +- Event arguments: [ZoomChangeEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/zoomChangeEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ZoomChange("zoomChanged").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ZoomChange("zoomChanged").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## buttonFieldClick + +The [buttonFieldClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ButtonFieldClick) event triggers when a button form field is clicked. + +- Event arguments: [ButtonFieldClickEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/buttonFieldClickEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ButtonFieldClick("buttonFieldClicked").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ButtonFieldClick("buttonFieldClicked").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## commentAdd + +The [commentAdd](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_CommentAdd) event triggers when a comment is added in the comment panel. + +- Event arguments: [CommentEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/commentEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CommentAdd("commentAdded").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CommentAdd("commentAdded").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## commentDelete + +The [commentDelete](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_CommentDelete) event triggers when a comment is deleted in the comment panel. + +- Event arguments: [CommentEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/commentEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CommentDelete("commentDeleted").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CommentDelete("commentDeleted").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## commentEdit + +The [commentEdit](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_CommentEdit) event triggers when a comment is edited in the comment panel. + +- Event arguments: [CommentEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/commentEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CommentEdit("CommentEdited").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CommentEdit("CommentEdited").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## commentSelect + +The [commentSelect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_CommentSelect) event triggers when a comment is selected in the comment panel. + +- Event arguments: [CommentEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/commentEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CommentSelect("commentSelected").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CommentSelect("commentSelected").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## commentStatusChanged + +The [commentStatusChanged](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_CommentStatusChanged) event triggers when a comment status is changed in the comment panel. + +- Event arguments: [CommentEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/commentEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CommentStatusChanged("commentStatusChanged").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CommentStatusChanged("commentStatusChanged").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## created + +The [created](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_Created) event is triggered during the creation of the PDF Viewer component. + +- Event arguments: `void`. + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Created("created").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Created("created").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## customContextMenuBeforeOpen + +The [customContextMenuBeforeOpen](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_CustomContextMenuBeforeOpen) event fires just before the context menu is shown. Use it to show/hide items based on current state (for example, only show search items when text is selected). + +- Event arguments: [CustomContextMenuBeforeOpenEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/customContextMenuBeforeOpenEventArgs/) + - name: Event name + - ids: Array of menu item ids that will be shown; you can remove ids to hide items for this open + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CustomContextMenuBeforeOpen("customContextMenuBeforeOpened").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CustomContextMenuBeforeOpen("customContextMenuBeforeOpened").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## customContextMenuSelect + +The [customContextMenuSelect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_CustomContextMenuSelect) event fires when a custom menu item is clicked. Use it to branch logic by the clicked item id. + +- Event arguments: [CustomContextMenuSelectEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/customContextMenuSelectEventArgs/). + +- name: Event name +- id: The id of the clicked menu item + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CustomContextMenuSelect("customContextMenuSelected").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").CustomContextMenuSelect("customContextMenuSelected").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## documentLoad + +The [documentLoad](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_DocumentLoad) event occurs when a document is successfully loaded. + +- Event arguments: [LoadEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/loadEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DocumentLoad("documentLoaded").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DocumentLoad("documentLoaded").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## documentLoadFailed + +The [documentLoadFailed](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_DocumentLoadFailed) event is triggered when loading a document fails. + +- Event arguments: [LoadFailedEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/loadFailedEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DocumentLoadFailed("documentLoadFailed").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DocumentLoadFailed("documentLoadFailed").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## documentUnload + +The [documentUnload](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_DocumentUnload) event is triggered when closing the current document. + +- Event arguments: [UnloadEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/unloadEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DocumentUnload("documentUnloaded").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DocumentUnload("documentUnloaded").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## downloadEnd + +The [downloadEnd](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_DownloadEnd) event is triggered after a document download completes. + +- Event arguments: [DownloadEndEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/downloadEndEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DownloadEnd("downloadEnded").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DownloadEnd("downloadEnded").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## downloadStart + +The [downloadStart](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_DownloadStart) event is triggered when the download operation is initiated. + +- Event arguments: [DownloadStartEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/downloadStartEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DownloadStart("downloadStarted").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DownloadStart("downloadStarted").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## exportFailed + +The [exportFailed](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ExportFailed) event is triggered when exporting annotations fails. + +- Event arguments: [ExportFailureEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/exportFailureEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ExportFailed("exportFailed").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ExportFailed("exportFailed").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## exportStart + +The [exportStart](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ExportStart) event is triggered when exporting annotations starts. + +- Event arguments: [ExportStartEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/exportStartEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ExportStart("exportStarted").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ExportStart("exportStarted").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## exportSuccess + +The [exportSuccess](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ExportSuccess) event is triggered when annotations are exported successfully. + +- Event arguments: [ExportSuccessEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/exportSuccessEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ExportSuccess("exportSuccess").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ExportSuccess("exportSuccess").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## extractTextCompleted + +The [extractTextCompleted](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ExtractTextCompleted) event is triggered when text extraction completes. + +- Event arguments: [ExtractTextCompletedEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/extractTextCompletedEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ExtractTextCompleted("extractTextCompleted").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ExtractTextCompleted("extractTextCompleted").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## hyperlinkClick + +The [hyperlinkClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_HyperlinkClick) event is triggered when a hyperlink is clicked. + +- Event arguments: [HyperlinkClickEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/hyperlinkClickEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").HyperlinkClick("hyperlinkClicked").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").HyperlinkClick("hyperlinkClicked").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## hyperlinkMouseOver + +The [hyperlinkMouseOver](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_HyperlinkMouseOver) event is triggered when hovering over a hyperlink. + +- Event arguments: HyperlinkMouseOverArgs. + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").HyperlinkMouseOver("hyperlinkMouseOvered").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").HyperlinkMouseOver("hyperlinkMouseOvered").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## importFailed + +The [importFailed](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ImportFailed) event is triggered when importing annotations fails. + +- Event arguments: [ImportFailureEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/importFailureEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ImportFailed("importFailed").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ImportFailed("importFailed").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## importStart + +The [importStart](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ImportStart) event is triggered when importing annotations starts. + +- Event arguments: [ImportStartEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/importStartEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ImportStart("importStarted").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ImportStart("importStarted").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## importSuccess + +The [importSuccess](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ImportSuccess) event is triggered when annotations are imported successfully. + +- Event arguments: [ImportSuccessEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/importSuccessEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ImportSuccess("importSuccess").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ImportSuccess("importSuccess").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## keyboardCustomCommands + +The [keyboardCustomCommands](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_KeyboardCustomCommands) event is triggered when customized keyboard command keys are pressed. + +- Event arguments: [KeyboardCustomCommandsEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/keyboardCustomCommandsEventArgs/). + + - name: Event name + - keyboardCommand: The command metadata raised by Command Manager + +When it triggers +- After you register gestures in commandManager.keyboardCommand. For example, when you press Shift + Alt + G or Shift + Alt + H, the event gets triggered. Just like this, you can handle custom keyboard shortcuts. + +Refer here for additional details about adding your own shortcut keys and handling them: see [Keyboard interaction](./accessibility.md#keyboard-interaction). +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").KeyboardCustomCommands("keyboardCustomCommands").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").KeyboardCustomCommands("keyboardCustomCommands").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## moveSignature + +The [moveSignature](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_MoveSignature) event triggers when a signature is moved across a page. + +- Event arguments: `MoveSignatureEventArgs`. + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").MoveSignature("moveSignatured").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").MoveSignature("moveSignatured").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## pageChange + +The [pageChange](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_PageChange) event triggers when the current page number changes. + +- Event arguments: [PageChangeEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/pageChangeEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageChange("pageChanged").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageChange("pageChanged").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## pageClick + +The [pageClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_PageClick) event triggers when a mouse click occurs on a page. + +- Event arguments: [PageClickEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/pageClickEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageClick("pageClicked").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageClick("pageClicked").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## pageMouseover + +The [pageMouseover](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_PageMouseover) event triggers when moving the mouse over a page. + +- Event arguments: `PageMouseoverEventArgs`. + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageMouseover("pageMouseover").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageMouseover("pageMouseover").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## pageOrganizerSaveAs + +The [pageOrganizerSaveAs](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_PageOrganizerSaveAs) event triggers when a `save as` action is performed in the page organizer. + +- Event arguments: `PageOrganizerSaveAsEventArgs`. + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSaveAs("pageOrganizerSaveAs").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSaveAs("pageOrganizerSaveAs").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## pageRenderComplete + +The [pageRenderComplete](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_PageRenderComplete) event triggers after a page finishes rendering. + +- Event arguments: [PageRenderCompleteEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/pageRenderCompleteEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageRenderComplete("pageRenderCompleted").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageRenderComplete("pageRenderCompleted").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## pageRenderInitiate + +The [pageRenderInitiate](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_PageRenderInitiate) event triggers when page rendering begins. + +- Event arguments: [PageRenderInitiateEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/pageRenderInitiateEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageRenderInitiate("pageRenderInitiated").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageRenderInitiate("pageRenderInitiated").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## printEnd + +The [printEnd](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_PrintEnd) event triggers when a print action is completed. + +- Event arguments: [PrintEndEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/printEndEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnablePrint(true).PrintEnd("printEnded").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnablePrint(true).PrintEnd("printEnded").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## printStart + +The [printStart](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_PrintStart) event triggers when a print action is initiated. + +- Event arguments: [PrintStartEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/printStartEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnablePrint(true).PrintStart("printStarted").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnablePrint(true).PrintStart("printStarted").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## removeSignature + +The [removeSignature](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_RemoveSignature) event triggers when a signature is removed. + +- Event arguments: [RemoveSignatureEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/removeSignatureEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").RemoveSignature("removeSignatured").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").RemoveSignature("removeSignatured").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## resizeSignature + +The [resizeSignature](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ResizeSignature) event triggers when a signature is resized. + +- Event arguments: [ResizeSignatureEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/resizeSignatureEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResizeSignature("resizeSignature").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResizeSignature("resizeSignature").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## resourcesLoaded + +The [resourcesLoaded](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ResourcesLoaded) event triggers after PDFium resources are loaded. + +- Event arguments: `void`. + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResourcesLoaded("resourcesLoaded").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResourcesLoaded("resourcesLoaded").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## signaturePropertiesChange + +The [signaturePropertiesChange](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_SignaturePropertiesChange) event triggers when signature properties are changed. + +- Event arguments: [SignaturePropertiesChangeEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/signaturePropertiesChangeEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignaturePropertiesChange("signaturePropertiesChanged").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignaturePropertiesChange("signaturePropertiesChanged").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## signatureSelect + +The [signatureSelect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_SignatureSelect) event triggers when a signature is selected. + +- Event arguments: [SignatureSelectEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/signatureSelectEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignatureSelect("signatureSelected").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignatureSelect("signatureSelected").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## signatureUnselect + +The [signatureUnselect](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_SignatureUnselect) event triggers when a signature is unselected. + +- Event arguments: [SignatureUnselectEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/signatureUnselectEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignatureUnselect("signatureUnselected").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").SignatureUnselect("signatureUnselected").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## textSearchComplete + +The [textSearchComplete](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_TextSearchComplete) event triggers when a text search is completed. + +- Event arguments: [TextSearchCompleteEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/textSearchCompleteEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TextSearchComplete("textSearchCompleted").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TextSearchComplete("textSearchCompleted").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## textSearchHighlight + +The [textSearchHighlight](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_TextSearchHighlight) event triggers when the searched text is highlighted. + +- Event arguments: [TextSearchHighlightEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/textSearchHighlightEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TextSearchHighlight("textSearchHighlighted").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TextSearchHighlight("textSearchHighlighted").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## textSearchStart + +The [textSearchStart](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_TextSearchStart) event triggers when a text search is initiated. + +- Event arguments: [TextSearchStartEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/textSearchStartEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TextSearchStart("textSearchStarted").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TextSearchStart("textSearchStarted").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## textSelectionEnd + +The [textSelectionEnd](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_TextSelectionEnd) event triggers when text selection is complete. + +- Event arguments: [TextSelectionEndEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/textSelectionEndEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TextSelectionEnd("textSelectionEnded").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TextSelectionEnd("textSelectionEnded").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## textSelectionStart + +The [textSelectionStart](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_TextSelectionStart) event triggers when text selection is initiated. + +- Event arguments: `TextSelectionStartEventArgs`. + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TextSelectionStart("textSelectionStarted").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").TextSelectionStart("textSelectionStarted").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## thumbnailClick + +The [thumbnailClick](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_ThumbnailClick) event triggers when a thumbnail is clicked. + +- Event arguments: [ThumbnailClickEventArgs](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/thumbnailClickEventArgs/). + +Example: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ThumbnailClick("thumbnailClicked").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ThumbnailClick("thumbnailClicked").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +> Tip: For annotation and signature events, see the dedicated Annotations Events topic. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md index 510df3433..5dd60d8e0 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md @@ -4,7 +4,6 @@ title: Programmatically Add Fields in ASP.NET MVC PDF Viewer | Syncfusion description: Learn how to add, update, delete, save, print, validate, and import/export form fields in the Syncfusion ASP.NET MVC PDF Viewer component. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-with-user-interface-interaction.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-with-user-interface-interaction.md index d063e32a9..8050f97e6 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-with-user-interface-interaction.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-with-user-interface-interaction.md @@ -4,7 +4,6 @@ title: Design form fields in the ASP.NET MVC PDF Viewer | Syncfusion description: Learn how to add, drag, resize, edit, and manage form fields using the UI in the Syncfusion ASP.NET MVC PDF Viewer component. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/form-field-events.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/form-field-events.md index 6cefb2697..8acc89d1d 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/form-field-events.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/form-field-events.md @@ -4,7 +4,6 @@ title: Form field events in ASP.NET MVC PDF Viewer | Syncfusion description: Learn about form field events supported in the Syncfusion ASP.NET MVC PDF Viewer component and how to handle them. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/getting-started-with-server-backed.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/getting-started-with-server-backed.md index 6dce1049f..4723191dd 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/getting-started-with-server-backed.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/getting-started-with-server-backed.md @@ -1,10 +1,9 @@ --- layout: post -title: Getting started with the ASP.NET MVC PDF Viewer (server‑backed) | Syncfusion +title: Getting started with the ASP.NET MVC PDF Viewer | Syncfusion description: Get started with the server‑backed Syncfusion ASP.NET MVC PDF Viewer. Install NuGet packages, add scripts/styles, configure the controller, and load a PDF. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/getting-started.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/getting-started.md index f0d838fac..0fa6bf8ab 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/getting-started.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/getting-started.md @@ -1,10 +1,9 @@ --- layout: post -title: Getting started with the ASP.NET MVC standalone PDF Viewer | Syncfusion +title: Getting started with ASP.NET MVC standalone PDF Viewer | Syncfusion description: Get started with the standalone Syncfusion ASP.NET MVC PDF Viewer. Add scripts/styles, configure the view, and load a PDF using documentPath and resourceUrl. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to-overview.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to-overview.md index 3f0e03986..eada5e42b 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to-overview.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to-overview.md @@ -68,7 +68,7 @@ The frequently asked questions in Essential® Pdfviewer are listed * [How to Change the default Width of PDF Viewer?](./how-to/default-width-height) * [How to Delete an annotation from a PDF in PDF Viewer?](./how-to/delete-annotation) * [How to Identify PDF is edited in PDF Viewer?](./how-to/identify-the-loaded-document-is-edited) -* [How to Load blancing environment in PDF Viewer?](./how-to/load-balancing-environment) +* [How to Load balancing environment in PDF Viewer?](./how-to/load-balancing-environment) * [How to Load the document in PDF Viewer?](./how-to/load-the-document) * [How to Redirect to the Home page in PDF Viewer?](./how-to/redirect-to-home-page) * [How to set Author name for annotation in PDF Viewer?](./how-to/set-author-name-to-annotation) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md index 24807df7b..7ce3c26dc 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md @@ -1,7 +1,7 @@ --- layout: post title: Access or Change File Name in ASP.NET MVC PDF Viewer | Syncfusion -description: Learn how to access the loaded PDF filename and change the download filename using the DocumentLoad and DownloadEnd events in the Syncfusion ASP.NET MVC PDF Viewer. +description: Learn how to access the loaded PDF filename and change the download filename using the events in the Syncfusion ASP.NET MVC PDF Viewer. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC @@ -14,7 +14,7 @@ The Syncfusion ASP.NET MVC PDF Viewer allows you to access the filename of the l The following steps demonstrate how to access and modify the filename in the PDF Viewer: -**Step 1:** Create an ASP.NET MVC PDF Viewer sample by following the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/). +**Step 1:** Create an ASP.NET MVC PDF Viewer sample by following the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started). **Step 2:** Access and change the filename using the code snippets below. @@ -29,9 +29,9 @@ In the `DocumentLoad` or `DownloadEnd` event handler, you can access the origina @@ -46,9 +46,9 @@ In the `DocumentLoad` or `DownloadEnd` event handler, you can access the origina diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md index 84bc350cc..6f6ee5cad 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md @@ -79,6 +79,6 @@ A concise guide to adding rectangle annotations at highlighted text search resul **Step 3:** Handle the `textSearchHighlight` event to add a rectangle annotation for each highlighted match. The `handleTextSearchHighlight` callback in the script adds the annotation by using the bounds returned from the search event. -Following these steps enables the PDF Viewer to add rectangle annotations at search result locations, improving the visibility of matches in your ASP.NET mvc application. +Following these steps enables the PDF Viewer to add rectangle annotations at search result locations, improving the visibility of matches in your ASP.NET MVC application. [View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/capture-page-number.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/capture-page-number.md index 209e404bc..85076f324 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/capture-page-number.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/capture-page-number.md @@ -7,7 +7,7 @@ control: PDF Viewer documentation: ug --- -# Capture the current page number being viewed +# Capture the current page number The PDF Viewer server library allows you to capture the page number that is currently visible when a PDF document is loaded. Use the [**currentPageNumber**](https://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_CurrentPageNumber) property to obtain the page that is in view. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/close-comment-panel.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/close-comment-panel.md index b4babf8fc..519baa6e1 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/close-comment-panel.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/close-comment-panel.md @@ -1,10 +1,9 @@ --- layout: post -title: Close Comment Panel Programmatically in ASP.NET MVC PDF Viewer | Syncfusion +title: Close Comment Panel in ASP.NET MVC PDF Viewer | Syncfusion description: Learn how to programmatically close the comment panel in the Syncfusion ASP.NET MVC PDF Viewer using JavaScript to enhance UI control or user experience. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- @@ -16,7 +15,7 @@ N> The comment panel must already be open for this action to have an effect. To close the comment panel programmatically, follow these steps: -**Step 1:** Create an ASP.NET MVC PDF Viewer sample by following the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/). +**Step 1:** Create an ASP.NET MVC PDF Viewer sample by following the [getting started guide](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started). **Step 2:** Add a button and the following JavaScript code to your Razor view (e.g., `Index.cshtml`) to close the comment panel on click: diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/configure-annotation-selector-setting.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/configure-annotation-selector-setting.md index 5131d3571..c153d2534 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/configure-annotation-selector-setting.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/configure-annotation-selector-setting.md @@ -1,14 +1,13 @@ --- layout: post -title: Configure annotation selector settings in Syncfusion ASP.NET MVC PDF Viewer +title: Configure selector settings in ASP.NET MVC PDF Viewer | Syncfusion description: Learn how to customize annotation selector settings in the Syncfusion ASP.NET MVC PDF Viewer component for Essential JS 2. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- -# How to Configure Annotation Selector Settings +# How to Initialize Annotation Selector Settings ### Annotation Selector Settings diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/Context-Menu-Page-Operations1.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/Context-Menu-Page-Operations1.png new file mode 100644 index 0000000000000000000000000000000000000000..3939f80c1666280429654947a8c265abd6460bd8 GIT binary patch literal 25178 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 HPhS2v7p0ka literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/form-deigner-toolbar.png b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/images/form-deigner-toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..787d8ae6b54f86f9c930ca921cb1f84500e9d01b GIT binary patch literal 33536 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 B{^cF)cL)p@vj~bV92|TT^R_c}POc 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/bookmark-navigation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/bookmark-navigation.md new file mode 100644 index 000000000..d170037dc --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/bookmark-navigation.md @@ -0,0 +1,122 @@ +--- +layout: post +title: Navigation in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about Navigation in Syncfusion ASP.NET MVC Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# 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 html tabtitle="Standalone" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").EnableBookmark(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableBookmark(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").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: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +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: + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## See also + +* [Toolbar items](../toolbar-customization/) +* [Feature Modules](../feature-module.md) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/page-navigation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/page-navigation.md new file mode 100644 index 000000000..fc3bc31a4 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/page-navigation.md @@ -0,0 +1,126 @@ +--- +layout: post +title: Navigation in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about Navigation in Syncfusion ASP.NET MVC Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Navigation in ASP.NET MVC Pdfviewer control + +The ASP.NET MVC 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** :- Navigates to the specific page of a PDF document. +* **Show next page** :- Navigates to the next page of PDF a document. +* **Show previous page** :- Navigates to the previous page of a PDF document. +* **Show first page** :- Navigates to the first page of a PDF document. +* **Show last page** :- 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 html tabtitle="Standalone" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").EnableNavigation(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableNavigation(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% endtabs %} + +![Alt text](../images/navigation.png) + +Also, you can programmatically perform page navigation options as follows. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + + + + + + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + + + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## See also + +* [Toolbar items](../toolbar-customization/) +* [Feature Modules](../feature-module.md) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/page-thumbnail-navigation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/page-thumbnail-navigation.md new file mode 100644 index 000000000..cf64ff01f --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/page-thumbnail-navigation.md @@ -0,0 +1,38 @@ +--- +layout: post +title: Navigation in ASP.NET Core Pdfviewer control | Syncfusion +description: Learn here all about Navigation in Syncfusion ASP.NET Core Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET Core +documentation: ug +--- + +# Page 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 html tabtitle="Standalone" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").EnableThumbnail(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableThumbnail(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% endtabs %} + +![Alt text](../images/thumbnail.png) + +## See also + +* [Toolbar items](../toolbar-customization/) +* [Feature Modules](../feature-module.md) \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/table-of-content-navigation.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/table-of-content-navigation.md new file mode 100644 index 000000000..e68bcdcc0 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/interactive-pdf-navigation/table-of-content-navigation.md @@ -0,0 +1,158 @@ +--- +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 ASP.NET Core. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET Core +documentation: ug +--- + +# 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 html tabtitle="Standalone" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").EnableHyperlink(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableHyperlink(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").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 html tabtitle="Standalone" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").HyperlinkOpenState(Syncfusion.EJ2.PdfViewer.LinkTarget.NewTab).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).HyperlinkOpenState(Syncfusion.EJ2.PdfViewer.LinkTarget.NewTab).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").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 cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").HyperlinkClick("hyperlinkClicked").HyperlinkMouseOver("hyperlinkMouseOver").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").HyperlinkClick("hyperlinkClicked").HyperlinkMouseOver("hyperlinkMouseOver").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## See also + +- [Bookmark navigation](./bookmark-navigation.md) +- [Page navigation](./page-navigation.md) +- [Page thumbnail navigation](./page-thumbnail-navigation.md) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/organize-page-mobile-view.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/organize-page-mobile-view.md new file mode 100644 index 000000000..e8b732c75 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/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 +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# 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. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/organize-pdf-events.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/organize-pdf-events.md new file mode 100644 index 000000000..1a729dc2c --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/organize-pdf-events.md @@ -0,0 +1,105 @@ +--- +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 +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# 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. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSaveAs("pageOrganizerSaveAs").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSaveAs("pageOrganizerSaveAs").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## 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. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new { CanDelete = false, CanInsert = false, CanRotate = false, canCopy = false, canRearrange = false, canImport = false, imageZoom = 1, showImageZoomingSlider = true, imageZoomMin = 1, imageZoomMax = 5 }).PageOrganizerZoomChanged("pageOrganizerZoomChanged").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new { CanDelete = false, CanInsert = false, CanRotate = false, canCopy = false, canRearrange = false, canImport = false, imageZoom = 1, showImageZoomingSlider = true, imageZoomMin = 1, imageZoomMax = 5 }).PageOrganizerZoomChanged("pageOrganizerZoomChanged").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## 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) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/programmatic-support-for-organize-page.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/programmatic-support-for-organize-page.md new file mode 100644 index 000000000..0b6e479c2 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/programmatic-support-for-organize-page.md @@ -0,0 +1,150 @@ +--- +layout: post +title: Programmatic Support for Organize Pages in ASP.NET MVC PDF Viewer control | Syncfusion +description: Learn here all about Programmatic Support for Organize Pages in Syncfusion ASP.NET MVC PDF Viewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Programmatic Support for Organize Pages in ASP.NET MVC 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 cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnablePageOrganizer(true).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").EnablePageOrganizer(true).Render() +
    + +{% 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 cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").IsPageOrganizerOpen(true).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").IsPageOrganizerOpen(true).Render() +
    + +{% 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 cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new { CanDelete = false, CanInsert = false, CanRotate = false, canCopy = false, canRearrange = false, canImport = false, imageZoom = 1, showImageZoomingSlider = true, imageZoomMin = 1, imageZoomMax = 5 }).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new { CanDelete = false, CanInsert = false, CanRotate = false, canCopy = false, canRearrange = false, canImport = false, imageZoom = 1, showImageZoomingSlider = true, imageZoomMin = 1, imageZoomMax = 5 }).Render() +
    + +{% endhighlight %} +{% endtabs %} + +## Open the page organizer dialog + +The `openPageOrganizer` method programmatically opens the page organizer dialog, providing access to page management tools. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## Close the page organizer dialog + +The `closePageOrganizer` method programmatically closes the page organizer dialog. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/toolbar-organize-page.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/toolbar-organize-page.md new file mode 100644 index 000000000..4b9a7c189 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/toolbar-organize-page.md @@ -0,0 +1,88 @@ +--- +layout: post +title: Organize Page Toolbar Customization in ASP.NET MVC PDF Viewer control | Syncfusion +description: Learn here all about Organize Page Toolbar Customization in Syncfusion ASP.NET MVC PDF Viewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Organize Page Toolbar Customization in ASP.NET MVC 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 cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new { CanInsert = false }).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new { CanInsert = false }).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 cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new { CanDelete = false }).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new { CanDelete = false }).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 cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new { CanRotate = false }).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new { CanRotate = false }).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. diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/ui-interactions-organize-page.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/ui-interactions-organize-page.md new file mode 100644 index 000000000..184fd7ea5 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf/ui-interactions-organize-page.md @@ -0,0 +1,97 @@ +--- +layout: post +title: UI Interactions for Organizing Pages in ASP.NET MVC PDF Viewer | Syncfusion +description: Learn about the UI interactions for organizing pages in the Syncfusion ASP.NET MVC PDF Viewer control, including rotating, rearranging, inserting, deleting, and copying pages. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# UI Interactions for Organizing Pages in ASP.NET MVC 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) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/annotation-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/annotation-toolbar-customization.md new file mode 100644 index 000000000..f2975838d --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/annotation-toolbar-customization.md @@ -0,0 +1,82 @@ +--- +layout: post +title: Annotation Toolbar Customization in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn here all about annotation toolbar customization in Syncfusion ASP.NET MVC Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: Annotation Toolbar Customization +publishingplatform: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# 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://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_EnableAnnotationToolbar) property or the [showAnnotationToolbar](https://ej2.syncfusion.com/javascript/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 cshtml tabtitle="Standalone" %} + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## How to customize the annotation toolbar + +Choose which tools appear and control their order in the annotation toolbar. + +Use [`PdfViewerToolbarSettings`](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html/) with the [`AnnotationToolbarItems`](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html#Syncfusion_EJ2_PdfViewer_PdfViewerToolbarSettings_AnnotationToolbarItems) property to choose which tools are displayed in the annotation toolbar. The property accepts a list of [`AnnotationToolbarItem`](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html#Syncfusion_EJ2_PdfViewer_PdfViewerToolbarSettings_AnnotationToolbarItems/) 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 cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings { ShowTooltip = true, AnnotationToolbarItems = "HighlightTool UnderlineTool StrikethroughTool ColorEditTool OpacityEditTool AnnotationDeleteTool StampAnnotationTool HandWrittenSignatureTool InkAnnotationTool ShapeTool CalibrateTool StrokeColorEditTool ThicknessEditTool" }).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings { ShowTooltip = true, AnnotationToolbarItems = "HighlightTool UnderlineTool StrikethroughTool ColorEditTool OpacityEditTool AnnotationDeleteTool StampAnnotationTool HandWrittenSignatureTool InkAnnotationTool ShapeTool CalibrateTool StrokeColorEditTool ThicknessEditTool" }).Render() +
    + +{% endhighlight %} +{% endtabs %} diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/custom-toolbar.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/custom-toolbar.md new file mode 100644 index 000000000..c61d98be4 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/custom-toolbar.md @@ -0,0 +1,324 @@ +--- +layout: post +title: Custom Toolbar in ASP.NET MVC PDF Viewer Component | Syncfusion +description: Learn here all about custom toolbar in Syncfusion ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# Custom toolbar + +The PDF Viewer exposes APIs for the interactions available in the built-in toolbar. Using these, you can build your own UI for toolbar actions at the application level by hiding the built-in toolbar. Follow these steps to create a custom toolbar for the PDF Viewer: + +**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create simple PDF Viewer sample. + +**Step 2:** Add an EJ2 Toolbar to perform primary actions like Open, Previous page, Next page, Go to page, Print, and Download using the following code snippet: + +```html +@using Syncfusion.EJ2.Navigations; + +@Html.EJS().Toolbar("topToolbar").Height("56px").Items(new List { +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-open-document-icon",TooltipText = "Open",Align=ItemAlign.Left,Click="openFile"}, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-previous-page-navigation-icon",TooltipText = "Previous Page",Align=ItemAlign.Center,Click="previousClicked",Id="previousPage"}, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Next Page",Align=ItemAlign.Center,Click="nextClicked",Id="nextPage"}, +new ToolbarItem {Template="
    " ,PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Page Number",Align=ItemAlign.Center}, +new ToolbarItem { Type = ItemType.Input, Template="
    of 0
    " , PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Page Number",Click="currentPageClicked",Align=ItemAlign.Center}, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-print-document-icon" ,TooltipText = "Print",Align=ItemAlign.Right,Click="printClicked"}, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-download-document-icon" ,TooltipText = "Download",Align=ItemAlign.Right,Click="downloadClicked"}, +}).Render() + +``` + +**Step 3:** Add an EJ2 Toolbar to perform magnification actions in the PDF Viewer using the following code snippet: + +{% tabs %} +{% highlight html tabtitle="Standalone" %} + +```html +@Html.EJS().PdfViewer("pdfviewer") +.EnableToolbar(false).EnableThumbnail(false) +.DocumentLoad("documentLoaded").PageChange("pageChanged") +.DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +```html +@Html.EJS().PdfViewer("pdfviewer") +.ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")) +.EnableToolbar(false).EnableThumbnail(false) +.DocumentLoad("documentLoaded").PageChange("pageChanged") +.DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +``` +{% endhighlight %} +{% endtabs %} + +**Step 4:** Add the following styles to achieve the custom toolbar styling: + +```html + +@Html.EJS().Toolbar("magnificationToolbar").Items(new List { +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-fit-page", TooltipText = "Fit to page",Click="pageFitClicked"}, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-zoom-in-icon",TooltipText = "Zoom in",Click="zoomInClicked" }, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-zoom-out-icon", TooltipText = "Zoom out",Click="zoomOutClicked"}, +}).Render() + +``` + +**Step 5:** Add the following style to achieve the custom toolbar styling, + +```html + +``` + +N> The icons are embedded in the font file used in the previous code snippet. + +**Step 5:** Add the following scripts to perform user interactions in the PDF Viewer: + +```html + + +``` + +[View sample in GitHub](https://github.com/SyncfusionExamples/asp-core-pdf-viewer-examples/tree/master/How%20to/Create%20Custom%20Toolbar) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/form-designer-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/form-designer-toolbar-customization.md new file mode 100644 index 000000000..c48b916d3 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/form-designer-toolbar-customization.md @@ -0,0 +1,63 @@ +--- +layout: post +title: Form Designer Toolbar Customization in ASP.NET MVC PDF Viewer Component | Syncfusion +description: Learn here all about form designer toolbar customization in Syncfusion ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# 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://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_EnableFormDesigner) property or the [showFormDesignerToolbar](https://ej2.syncfusion.com/javascript/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 html tabtitle="Standalone" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").EnableFormDesigner(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableFormDesigner(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% 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://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html/) with the [`FormDesignerToolbarItems`](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html#Syncfusion_EJ2_PdfViewer_PdfViewerToolbarSettings_FormDesignerToolbarItems) property to choose which form design tools are available. The property accepts a list of [`FormDesignerToolbarItem`](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html#Syncfusion_EJ2_PdfViewer_PdfViewerToolbarSettings_FormDesignerToolbarItems/) 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 cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings { ShowTooltip = true, FormDesignerToolbarItems = "TextboxTool PasswordTool CheckBoxTool RadioButtonTool DropdownTool ListboxTool DrawSignatureTool DeleteTool" }).Render() +
    + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings { ShowTooltip = true, FormDesignerToolbarItems = "TextboxTool PasswordTool CheckBoxTool RadioButtonTool DropdownTool ListboxTool DrawSignatureTool DeleteTool" }).Render() +
    + +{% endhighlight %} +{% endtabs %} \ No newline at end of file diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/mobile-toolbar.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/mobile-toolbar.md new file mode 100644 index 000000000..2d98e1c20 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/mobile-toolbar.md @@ -0,0 +1,107 @@ +--- +layout: post +title: Mobile Toolbar Interface in ASP.NET MVC Pdfviewer control | Syncfusion +description: Learn All About the Mobile Toolbar Interface in Syncfusion ASP.NET MVC Pdfviewer control of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- +# Mobile Toolbar Interface in ASP.NET MVC 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 html tabtitle="Standalone" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").EnableDesktopMode(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableDesktopMode(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% 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 html tabtitle="Standalone" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").EnableTextSelection(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableTextSelection(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% 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/asp-net-mvc/toolbar-customization/primary-toolbar-customization.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/primary-toolbar-customization.md new file mode 100644 index 000000000..b43d75575 --- /dev/null +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar-customization/primary-toolbar-customization.md @@ -0,0 +1,288 @@ +--- +layout: post +title: Primary Toolbar Customization in ASP.NET MVC PDF Viewer Component | Syncfusion +description: Learn here all about primary toolbar customization in Syncfusion ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. +platform: document-processing +control: PDF Viewer +publishingplatform: ASP.NET MVC +documentation: ug +--- + +# 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://help.syncfusion.com/cr/aspnetmvc-js2/syncfusion.ej2.pdfviewer.pdfviewer.html#Syncfusion_EJ2_PdfViewer_PdfViewer_EnableToolbar) property or the [showToolbar](https://ej2.syncfusion.com/javascript/documentation/api/pdfviewer/toolbar/#showtoolbar) method to show or hide the primary toolbar. + +Show or hide the toolbar using the `enableToolbar` property: + +{% tabs %} +{% highlight html tabtitle="Standalone" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").EnableToolbar(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableToolbar(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% endtabs %} + +The following code snippet explains how to show or hide the toolbar using the `showToolbar` method. + +{{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DocumentLoad("showToolbar").Render() +
    + + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DocumentLoad("showToolbar").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## Show or hide toolbar items + +The PDF Viewer has an option to show or hide these grouped items in the built-in toolbar. + +* Show or hide toolbar items using toolbarSettings: + +{% tabs %} +{% highlight html tabtitle="Standalone" %} + +```html + +
    + @Html.EJS().PdfViewer("pdfviewer").ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings { ShowTooltip = true, ToolbarItems = "OpenOption" }).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` + +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +```html + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings{ ShowTooltip = true, ToolbarItem = "OpenOption" ).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` + +{% endhighlight %} +{% endtabs %} + +* Show or hide toolbar items using showToolbarItem: + +{% tabs %} +{% highlight html tabtitle="Standalone" %} + +```html + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + +``` + +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +```html + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + +``` + +{% endhighlight %} +{% endtabs %} + +## Customize the built-in toolbar + +The PDF Viewer allows you to customize (add, show, hide, enable, and disable) existing items in the toolbar. + +- Add: Define new items using **CustomToolbarItemModel** and include them with existing items via the [**ToolbarSettings**](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html) property. Handle clicks in the toolbarClick event. + +- Show/Hide: Show or hide existing items using the [**ToolbarSettings**](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html) property. Predefined toolbar items are available via [`ToolbarItem`](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html#Syncfusion_EJ2_PdfViewer_PdfViewerToolbarSettings_ToolbarItems). + +- Enable/Disable: Toolbar items can be enabled or disabled using enableToolbarItem. + +{% tabs %} +{% highlight html tabtitle="Standalone" %} + +@using Syncfusion.EJ2 +@{ + ViewBag.Title = "Home Page"; +} + +
    +
    +

    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/29.1.33/dist/ej2-pdfviewer-lib").ToolbarClick("toolbarClick").Render() +
    +
    + + + +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +@{ + ViewBag.Title = "Home Page"; +} +@using Syncfusion.EJ2.PdfViewer +@using ToolbarCustomization.Controllers +@{ + var toolItem1 = new { id = "submit_form", text = "Submit Form", tooltipText = "Custom toolbar item", align = "Center", cssClass = "custom_button" }; + CustomToolbarItems customToolbarItems = new CustomToolbarItems(); + customToolbarItems.ToolbarItems = new List { toolItem1, "OpenOption", "PageNavigationTool", "MagnificationTool", "PanTool", "SelectionTool", "SearchOption", "PrintOption", "DownloadOption", "UndoRedoTool", "AnnotationEditTool", "FormDesignerEditTool", "CommentTool" }; + PdfViewerToolbarSettings toolbarSettings = new PdfViewerToolbarSettings() + { + ShowTooltip = true, + ToolbarItems = customToolbarItems.ToolbarItems + }; +} +
    +
    +

    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/Home/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/form-designer.pdf").ToolbarClick("toolbarClick").ToolbarSettings(toolbarSettings).Render() +
    +
    + + + + +{% endhighlight %} +{% endtabs %} + +N> Default toolbar items: ['OpenOption', 'PageNavigationTool','MagnificationTool', 'PanTool', 'SelectionTool', 'SearchOption', 'PrintOption', 'DownloadOption','UndoRedoTool', 'AnnotationEditTool', 'FormDesignerEditTool', 'CommentTool', 'SubmitForm'] + +### Align property + +The Align property specifies the alignment of a toolbar item 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. + +### Tooltip property + +The Tooltip property sets the tooltip text for a toolbar item. Tooltips provide additional information when a user hovers over the item. + +### CssClass property + +The CssClass property applies custom CSS classes to a toolbar item for custom styling. + +### Prefix property + +The Prefix property sets the CSS class or icon added as a prefix to the existing content of the toolbar item. + +### ID property + +The Id property of a CustomToolbarItemModel uniquely identifies a toolbar item and is required for customization. + +When defining or customizing toolbar items, 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 the 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. + +N> When customizing toolbar items, you have the flexibility to include either icons or text based on your design preference. + +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/Customize%20existing%20toolbar) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar.md index d8cfc2543..0f0f3aee8 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar.md @@ -1,18 +1,27 @@ --- layout: post -title: Toolbar in ASP.NET MVC PDF Viewer component | Syncfusion -description: Learn all about the toolbar in the Syncfusion ASP.NET MVC PDF Viewer component, including showing or hiding items and customizing the built-in toolbar. +title: Overview of the toolbars in ASP.NET MVC PDF Viewer Component | Syncfusion +description: Check out and learn about the primary, annotation, form designer, and redaction toolbars in the Syncfusion ASP.NET MVC PDF Viewer component. platform: document-processing control: PDF Viewer publishingplatform: ASP.NET MVC documentation: ug --- -# Built-in toolbar in ASP.NET MVC PDF Viewer +# Toolbar in ASP.NET MVC PDF Viewer Component -The PDF Viewer includes a built-in toolbar for common actions such as page navigation, text search, view mode, download, print, bookmarks, and thumbnails. +The PDF Viewer includes a built-in, responsive toolbar that surfaces common PDF actions and provides entry points to feature-specific toolbars. It adapts across desktop, tablet, and mobile, and can be customized to show or hide items, reorder commands, add custom items, and handle toolbar events. -The following table lists the built-in toolbar items and their actions: +There are four toolbars in the PDF Viewer: +* Primary toolbar +* Annotation toolbar +* Form designer toolbar + +## Primary Toolbar in ASP.NET MVC PDF Viewer Component + +The PDF Viewer includes a built-in, responsive primary toolbar that provides quick access to common viewer actions and feature-specific toolbars. It adapts to the available width for desktop, tablet, and mobile layouts. + +The primary toolbar includes the following options: | Option | Description | |---|---| @@ -27,606 +36,42 @@ The following table lists the built-in toolbar items and their actions: | UndoRedoTool | This tool provides options to undo and redo the annotation actions performed in the PDF Viewer.| | AnnotationEditTool | This tool provides options to enable or disable the edit mode of annotation in the PDF Viewer.| -## Show or hide the built-in toolbar - -The PDF Viewer provides options to show or hide the complete built-in toolbar. You can do this in two ways: - -* Show or hide the toolbar using the enableToolbar API: - -{% tabs %} -{% highlight html tabtitle="Standalone" %} -```html -
    - @Html.EJS().PdfViewer("pdfviewer").EnableToolbar(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() -
    -``` -{% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} -```html -
    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableToolbar(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() -
    -``` -{% endhighlight %} -{% endtabs %} - -* Show or hide the toolbar using showToolbar: - -{% tabs %} -{% highlight cshtml tabtitle="Standalone" %} - -
    - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DocumentLoad("showToolbar").Render() -
    - - - -{% endhighlight %} -{% highlight cshtml tabtitle="Server-Backed" %} - -
    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").DocumentLoad("showToolbar").Render() -
    - - - -{% endhighlight %} -{% endtabs %} - -## Show or hide toolbar items - -The PDF Viewer has an option to show or hide these grouped items in the built-in toolbar. - -* Show or hide toolbar items using toolbarSettings: - -{% tabs %} -{% highlight html tabtitle="Standalone" %} - -```html - -
    - @Html.EJS().PdfViewer("pdfviewer").ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings { ShowTooltip = true, ToolbarItems = "OpenOption" }).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() -
    -``` - -{% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} - -```html - -
    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings{ ShowTooltip = true, ToolbarItem = "OpenOption" ).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() -
    -``` - -{% endhighlight %} -{% endtabs %} - -* Show or hide toolbar items using showToolbarItem: - -{% tabs %} -{% highlight html tabtitle="Standalone" %} - -```html - -
    - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() -
    - - -``` - -{% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} - -```html - -
    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() -
    - -``` - -{% endhighlight %} -{% endtabs %} - -## Customize the built-in toolbar - -The PDF Viewer allows you to customize (add, show, hide, enable, and disable) existing items in the toolbar. - -- Add: Define new items using **CustomToolbarItemModel** and include them with existing items via the [**ToolbarSettings**](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html) property. Handle clicks in the toolbarClick event. - -- Show/Hide: Show or hide existing items using the [**ToolbarSettings**](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html) property. Predefined toolbar items are available via [`ToolbarItem`](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html#Syncfusion_EJ2_PdfViewer_PdfViewerToolbarSettings_ToolbarItems). - -- Enable/Disable: Toolbar items can be enabled or disabled using enableToolbarItem. - -{% tabs %} -{% highlight html tabtitle="Standalone" %} - -@using Syncfusion.EJ2 -@{ - ViewBag.Title = "Home Page"; -} - -
    -
    -

    - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/29.1.33/dist/ej2-pdfviewer-lib").ToolbarClick("toolbarClick").Render() -
    -
    - - - -{% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} - -@{ - ViewBag.Title = "Home Page"; -} -@using Syncfusion.EJ2.PdfViewer -@using ToolbarCustomization.Controllers -@{ - var toolItem1 = new { id = "submit_form", text = "Submit Form", tooltipText = "Custom toolbar item", align = "Center", cssClass = "custom_button" }; - CustomToolbarItems customToolbarItems = new CustomToolbarItems(); - customToolbarItems.ToolbarItems = new List { toolItem1, "OpenOption", "PageNavigationTool", "MagnificationTool", "PanTool", "SelectionTool", "SearchOption", "PrintOption", "DownloadOption", "UndoRedoTool", "AnnotationEditTool", "FormDesignerEditTool", "CommentTool" }; - PdfViewerToolbarSettings toolbarSettings = new PdfViewerToolbarSettings() - { - ShowTooltip = true, - ToolbarItems = customToolbarItems.ToolbarItems - }; -} -
    -
    -

    - @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/Home/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/form-designer.pdf").ToolbarClick("toolbarClick").Created("onLoadedPage").DocumentLoad("documentLoaded").FormFieldAdd("formFieldAdd").ToolbarSettings(toolbarSettings).Render() -
    -
    - - - - -{% endhighlight %} -{% endtabs %} - -N> Default toolbar items: ['OpenOption', 'PageNavigationTool','MagnificationTool', 'PanTool', 'SelectionTool', 'SearchOption', 'PrintOption', 'DownloadOption','UndoRedoTool', 'AnnotationEditTool', 'FormDesignerEditTool', 'CommentTool', 'SubmitForm'] - -### Align property - -The Align property specifies the alignment of a toolbar item 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. - -### Tooltip property - -The Tooltip property sets the tooltip text for a toolbar item. Tooltips provide additional information when a user hovers over the item. - -### CssClass property - -The CssClass property applies custom CSS classes to a toolbar item for custom styling. - -### Prefix property - -The Prefix property sets the CSS class or icon added as a prefix to the existing content of the toolbar item. - -### ID property - -The Id property of a CustomToolbarItemModel uniquely identifies a toolbar item and is required for customization. - -When defining or customizing toolbar items, 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 the 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. - -N> When customizing toolbar items, you have the flexibility to include either icons or text based on your design preference. - -[View sample in GitHub](https://github.com/SyncfusionExamples/asp-core-pdf-viewer-examples/tree/master/How%20to/Customize%20existing%20toolbar) - -## Custom toolbar - -The PDF Viewer exposes APIs for the interactions available in the built-in toolbar. Using these, you can build your own UI for toolbar actions at the application level by hiding the built-in toolbar. Follow these steps to create a custom toolbar for the PDF Viewer: - -**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-core/getting-started/) to create simple PDF Viewer sample. - -**Step 2:** Add an EJ2 Toolbar to perform primary actions like Open, Previous page, Next page, Go to page, Print, and Download using the following code snippet: - -```html -@using Syncfusion.EJ2.Navigations; - -@Html.EJS().Toolbar("topToolbar").Height("56px").Items(new List { -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-open-document-icon",TooltipText = "Open",Align=ItemAlign.Left,Click="openFile"}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-previous-page-navigation-icon",TooltipText = "Previous Page",Align=ItemAlign.Center,Click="previousClicked",Id="previousPage"}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Next Page",Align=ItemAlign.Center,Click="nextClicked",Id="nextPage"}, -new ToolbarItem {Template="
    " ,PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Page Number",Align=ItemAlign.Center}, -new ToolbarItem { Type = ItemType.Input, Template="
    of 0
    " , PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Page Number",Click="currentPageClicked",Align=ItemAlign.Center}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-print-document-icon" ,TooltipText = "Print",Align=ItemAlign.Right,Click="printClicked"}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-download-document-icon" ,TooltipText = "Download",Align=ItemAlign.Right,Click="downloadClicked"}, -}).Render() - -``` - -**Step 3:** Add an EJ2 Toolbar to perform magnification actions in the PDF Viewer using the following code snippet: - -{% tabs %} -{% highlight html tabtitle="Standalone" %} - -```html -@Html.EJS().PdfViewer("pdfviewer") -.EnableToolbar(false).EnableThumbnail(false) -.DocumentLoad("documentLoaded").PageChange("pageChanged") -.DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() -``` -{% endhighlight %} -{% highlight html tabtitle="Server-Backed" %} - -```html -@Html.EJS().PdfViewer("pdfviewer") -.ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")) -.EnableToolbar(false).EnableThumbnail(false) -.DocumentLoad("documentLoaded").PageChange("pageChanged") -.DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() -``` -{% endhighlight %} -{% endtabs %} - -**Step 4:** Add the following styles to achieve the custom toolbar styling: - -```html - -@Html.EJS().Toolbar("magnificationToolbar").Items(new List { -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-fit-page", TooltipText = "Fit to page",Click="pageFitClicked"}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-zoom-in-icon",TooltipText = "Zoom in",Click="zoomInClicked" }, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-zoom-out-icon", TooltipText = "Zoom out",Click="zoomOutClicked"}, -}).Render() - -``` - -**Step 5:** Add the following style to achieve the custom toolbar styling, - -```html - -``` +![ASP.NET MVC PDF Viewer annotation toolbar](./images/annotation-toolbar.png) -N> The icons are embedded in the font file used in the previous code snippet. +* [Get more info about annotation toolbar customization](./toolbar-customization/annotation-toolbar-customization) -**Step 5:** Add the following scripts to perform user interactions in the PDF Viewer: +## Form Designer toolbar in ASP.NET MVC PDF Viewer Component -```html - +* Field types: Button, Text box, Password, Checkbox, Radio button, Drop-down, List box, Signature, Initial +* Edit helpers: Delete +* Close -``` +![ PDF Viewer form designer toolbar](./images/form-deigner-toolbar.png) -[View sample in GitHub](https://github.com/SyncfusionExamples/asp-core-pdf-viewer-examples/tree/master/How%20to/Create%20Custom%20Toolbar) +* [Get more info about form designer toolbar customization](./toolbar-customization/form-designer-toolbar-customization) ## See also -* [Toolbar customization](./how-to/toolbar-customization) -* [Feature Modules](./feature-module) \ No newline at end of file +* [Mobile toolbar](./toolbar-customization/mobile-toolbar) +* [Adding the shape annotation in PDF viewer](./annotation/shape-annotation) +* [Form designer in PDF viewer](./form-designer/create-programmatically) From 7c7933128c5a64660e4ba42179560603f86aa4cf Mon Sep 17 00:00:00 2001 From: sathiyaseelanksf3503 Date: Fri, 24 Oct 2025 00:09:38 +0530 Subject: [PATCH 07/14] 987332: CI failure --- Document-Processing-toc.html | 1 + .../PDF-Viewer/asp-net-mvc/how-to/access-file-name.md | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index f122bcd9b..8ee82a6e6 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -374,6 +374,7 @@
  • Save original document at the server side
  • Select multi-page TextMarkup annotation as single annotation
  • Show Bookmark
  • +
  • Add a Save button in the built-in Toolbar
  • Troubleshooting diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md index 7ce3c26dc..356d1e0bb 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/access-file-name.md @@ -4,7 +4,6 @@ title: Access or Change File Name in ASP.NET MVC PDF Viewer | Syncfusion description: Learn how to access the loaded PDF filename and change the download filename using the events in the Syncfusion ASP.NET MVC PDF Viewer. platform: document-processing control: PDF Viewer -publishingplatform: ASP.NET MVC documentation: ug --- @@ -29,9 +28,9 @@ In the `DocumentLoad` or `DownloadEnd` event handler, you can access the origina @@ -46,9 +45,9 @@ In the `DocumentLoad` or `DownloadEnd` event handler, you can access the origina From 490eab3234f2c687c5d329fbe1059a123831d382 Mon Sep 17 00:00:00 2001 From: Balaji Loganathan Date: Tue, 28 Oct 2025 14:12:37 +0530 Subject: [PATCH 08/14] 987332: Reverted changes to toolbar.md & organize-pdf.md --- .../PDF-Viewer/asp-net-mvc/organize-pdf.md | 310 +++++++++- .../PDF/PDF-Viewer/asp-net-mvc/toolbar.md | 542 +++++++++++++++++- 2 files changed, 840 insertions(+), 12 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf.md index 2dd3fa456..18ac8b631 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/organize-pdf.md @@ -12,16 +12,304 @@ domainurl: ##DomainURL## 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. -The Organize Pages feature provides the following options: - -* **Rotate pages**: You can adjust the orientation of PDF pages to ensure proper alignment. -* **Rearrange pages**: You can easily change the sequence of pages within your document. -* **Insert new pages**: Effortlessly add new blank pages to your document. -* **Delete pages**: Removing unwanted pages from your document is straightforward. -* **Copy pages**: Duplicate the pages within your PDF document effortlessly. -* **Import a PDF Document**: Seamlessly import a PDF document into your existing document. -* **Select all pages**: Make comprehensive adjustments by selecting all pages simultaneously. -* **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. +## 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 html tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").EnablePageOrganizer(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).EnablePageOrganizer(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + +{% 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 html tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").IsPageOrganizerOpen(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).IsPageOrganizerOpen(true).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").Render() +
    + +{% 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 html tabtitle="Standalone" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new Syncfusion.EJ2.PdfViewer.PageOrganizerSettings { canDelete: true, canInsert: true, canRotate: true, canCopy: true, canRearrange: true, canImport: true, imageZoom: 1, showImageZoomingSlider: true, imageZoomMin: 1, imageZoomMax: 5 }).Render() +
    + +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").PageOrganizerSettings(new Syncfusion.EJ2.PdfViewer.PageOrganizerSettings { canDelete: true, canInsert: true, canRotate: true, canCopy: true, canRearrange: true, canImport: true, imageZoom: 1, showImageZoomingSlider: true, imageZoomMin: 1, imageZoomMax: 5 }).Render() +
    + +{% endhighlight %} +{% endtabs %} + +{% tabs %} +{% highlight ts tabtitle="Standalone" %} + +import { Component, OnInit } from '@angular/core'; +import { LinkAnnotationService, BookmarkViewService, + MagnificationService, ThumbnailViewService, ToolbarService, + NavigationService, TextSearchService, TextSelectionService, + PrintService, FormDesignerService, FormFieldsService, + AnnotationService, PageOrganizerService } 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, PageOrganizerService] +}) +export class AppComponent implements OnInit { + public document = 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf'; + public resource: string = "https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2-pdfviewer-lib"; + public pageOrganizerSettings = { canDelete: true, canInsert: true, canRotate: true, canCopy: true, canRearrange: true, imageZoom: 1, showImageZoomingSlider: true, imageZoomMin: 1, imageZoomMax: 5 }; + ngOnInit(): void { + } +} + +{% endhighlight %} +{% highlight ts tabtitle="Server-Backed" %} + + import { Component, OnInit } from '@angular/core'; +import { LinkAnnotationService, BookmarkViewService, + MagnificationService, ThumbnailViewService, ToolbarService, + NavigationService, TextSearchService, TextSelectionService, + PrintService, FormDesignerService, FormFieldsService, + AnnotationService, PageOrganizerService } 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, PageOrganizerService] +}) +export class AppComponent implements OnInit { + public document = 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf'; + public service: string = 'https://document.syncfusion.com/web-services/pdf-viewer/api/pdfviewer'; + public pageOrganizerSettings = { canDelete: true, canInsert: true, canRotate: true, canCopy: true, canRearrange: true, imageZoom: 1, showImageZoomingSlider: true, imageZoomMin: 1, imageZoomMax: 5 }; + ngOnInit(): void { + } +} +{% endhighlight %} +{% endtabs %} + +**openPageOrganizer:** This API opens the page organizer dialog within the PDF Viewer, providing access to manage PDF pages. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +**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. + +{% tabs %} +{% highlight cshtml tabtitle="Standalone" %} + + +
    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + +{% endhighlight %} +{% highlight cshtml tabtitle="Server-Backed" %} + + + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + + +{% endhighlight %} +{% endtabs %} + +## 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/mvc-pdf-viewer-examples/tree/master/How%20to/Organize%20pdf/PDFViewerSample) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar.md index 0f0f3aee8..3e469f765 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/toolbar.md @@ -12,7 +12,7 @@ documentation: ug The PDF Viewer includes a built-in, responsive toolbar that surfaces common PDF actions and provides entry points to feature-specific toolbars. It adapts across desktop, tablet, and mobile, and can be customized to show or hide items, reorder commands, add custom items, and handle toolbar events. -There are four toolbars in the PDF Viewer: +There are three toolbars in the PDF Viewer: * Primary toolbar * Annotation toolbar * Form designer toolbar @@ -36,6 +36,545 @@ The primary toolbar includes the following options: | UndoRedoTool | This tool provides options to undo and redo the annotation actions performed in the PDF Viewer.| | AnnotationEditTool | This tool provides options to enable or disable the edit mode of annotation in the PDF Viewer.| +## Show/Hide the built-in toolbar + +The PDF Viewer has an option to show or hide the complete built-in toolbar. You can achieve this by using the following two ways., + +* **Show/Hide toolbar using enableToolbar API as in the following code snippet.** + +{% tabs %} +{% highlight html tabtitle="Standalone" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").EnableToolbar(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} +```html +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableToolbar(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    +``` +{% endhighlight %} +{% endtabs %} + +* **Show/Hide toolbar using showToolbar as in the following code snippet.** + +```html + + +``` + +## Show/Hide the built-in toolbaritem + +The PDF Viewer has an option to show or hide these grouped items in the built-in toolbar. + +* **Show/Hide toolbaritem using toolbarSettings as in the following code snippet.** + +{% tabs %} +{% highlight html tabtitle="Standalone" %} + +```html + +
    + @Html.EJS().PdfViewer("pdfviewer").EnableToolbar(true).ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings { ShowTooltip = true, ToolbarItems = "OpenOption" }).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + + +``` + +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +```html + +
    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")).EnableToolbar(false).ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings{ ShowTooltip = true, ToolbarItem = "OpenOption" ).DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +
    + +``` + +{% endhighlight %} +{% endtabs %} + +## Customize Built-In Toolbar + +PDF Viewer allows you to customize(add, show, hide, enable, and disable) existing items in a toolbar. + +* Add - New items can defined by **CustomToolbarItemModel** and with existing items in [**ToolbarSettings**](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html) property. Newly added item click action can be defined in `toolbarclick`. + +* Show, Hide - Existing items can be shown or hidden using the [`ToolbarSettings`](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html) property. Pre-defined toolbar items are available with [`ToolbarItem`](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings.html#Syncfusion_EJ2_PdfViewer_PdfViewerToolbarSettings_ToolbarItems) . + +* Enable, Disable - Toolbar items can be enabled or disable using `enabletoolbaritem`. + +{% tabs %} +{% highlight html tabtitle="Standalone" %} + +@using Syncfusion.EJ2 +@{ + ViewBag.Title = "Home Page"; +} + +
    +
    +

    + @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/29.1.33/dist/ej2-pdfviewer-lib").ToolbarClick("toolbarClick").Render() +
    +
    + + + +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +@{ + ViewBag.Title = "Home Page"; +} +@using Syncfusion.EJ2.PdfViewer +@using ToolbarCustomization.Controllers +@{ + var toolItem1 = new { id = "submit_form", text = "Submit Form", tooltipText = "Custom toolbar item", align = "Center", cssClass = "custom_button" }; + CustomToolbarItems customToolbarItems = new CustomToolbarItems(); + customToolbarItems.ToolbarItems = new List { toolItem1, "OpenOption", "PageNavigationTool", "MagnificationTool", "PanTool", "SelectionTool", "SearchOption", "PrintOption", "DownloadOption", "UndoRedoTool", "AnnotationEditTool", "FormDesignerEditTool", "CommentTool" }; + PdfViewerToolbarSettings toolbarSettings = new PdfViewerToolbarSettings() + { + ShowTooltip = true, + ToolbarItems = customToolbarItems.ToolbarItems + }; +} +
    +
    +

    + @Html.EJS().PdfViewer("pdfviewer").ServiceUrl(VirtualPathUtility.ToAbsolute("~/Home/")).DocumentPath("https://cdn.syncfusion.com/content/pdf/form-designer.pdf").ToolbarClick("toolbarClick").Created("onLoadedPage").DocumentLoad("documentLoaded").FormFieldAdd("formFieldAdd").ToolbarSettings(toolbarSettings).Render() +
    +
    + + + + +{% endhighlight %} +{% endtabs %} + +N> Default value of toolbar items is ['OpenOption', 'PageNavigationTool','MagnificationTool', 'PanTool', 'SelectionTool', 'SearchOption', 'PrintOption', 'DownloadOption','UndoRedoTool', 'AnnotationEditTool', 'FormDesignerEditTool', 'CommentTool', 'SubmitForm'] + +### Align Property + +The align property is used to specify the alignment of a toolbar item 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. + +### Tooltip Property + +The tooltip property is used to set the tooltip text for a toolbar item. Tooltip provides additional information when a user hovers over the item. + +### CssClass Property + +The cssClass property is used to apply custom CSS classes to a toolbar item. It allows custom styling of the toolbar item. + +### 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. + +### 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. + +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. + +N> When customizing toolbar items, you have the flexibility to include either icons or text based on your design preference. + +[View sample in GitHub](https://github.com/SyncfusionExamples/mvc-pdf-viewer-examples/tree/master/How%20to/Customize%20existing%20toolbar) + +## Custom Toolbar + +The PDF Viewer provides API for user interactions options provided in it's built-in toolbar. Using this we can create our own User Interface for toolbar actions in application level by hiding the built-in toolbar. The following steps are used to create the custom toolbar for PDF Viewer, + +**Step 1:** Follow the steps provided in the [link](https://help.syncfusion.com/document-processing/pdf/pdf-viewer/asp-net-mvc/getting-started/) to create simple PDF Viewer sample. + +**Step 2:** Add EJ2 Toolbar for perform primary actions like Open, Previous page, Next page, Go to page,Print and Download using the following code snippet, + +```html +@using Syncfusion.EJ2.Navigations; + +@Html.EJS().Toolbar("topToolbar").Height("56px").Items(new List { +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-open-document-icon",TooltipText = "Open",Align=ItemAlign.Left,Click="openFile"}, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-previous-page-navigation-icon",TooltipText = "Previous Page",Align=ItemAlign.Center,Click="previousClicked",Id="previousPage"}, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Next Page",Align=ItemAlign.Center,Click="nextClicked",Id="nextPage"}, +new ToolbarItem {Template="
    " ,PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Page Number",Align=ItemAlign.Center}, +new ToolbarItem { Type = ItemType.Input, Template="
    of 0
    " , PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Page Number",Click="currentPageClicked",Align=ItemAlign.Center}, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-print-document-icon" ,TooltipText = "Print",Align=ItemAlign.Right,Click="printClicked"}, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-download-document-icon" ,TooltipText = "Download",Align=ItemAlign.Right,Click="downloadClicked"}, +}).Render() + +``` + +**Step 3:** Hide the built-in toolbar of PDF Viewer using below code snippet, + +{% tabs %} +{% highlight html tabtitle="Standalone" %} + +```html +@Html.EJS().PdfViewer("pdfviewer") +.EnableToolbar(false).EnableThumbnail(false) +.DocumentLoad("documentLoaded").PageChange("pageChanged") +.DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +``` +{% endhighlight %} +{% highlight html tabtitle="Server-Backed" %} + +```html +@Html.EJS().PdfViewer("pdfviewer") +.ServiceUrl(VirtualPathUtility.ToAbsolute("~/api/PdfViewer/")) +.EnableToolbar(false).EnableThumbnail(false) +.DocumentLoad("documentLoaded").PageChange("pageChanged") +.DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").Render() +``` +{% endhighlight %} +{% endtabs %} + +**Step 4:** Add EJ2 Toolbar for perform magnification actions in PDF Viewer using following code snippet, + +```html + +@Html.EJS().Toolbar("magnificationToolbar").Items(new List { +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-fit-page", TooltipText = "Fit to page",Click="pageFitClicked"}, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-zoom-in-icon",TooltipText = "Zoom in",Click="zoomInClicked" }, +new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-zoom-out-icon", TooltipText = "Zoom out",Click="zoomOutClicked"}, +}).Render() + +``` + +**Step 5:** Add the following style to achieve the custom toolbar styling, + +```html + +``` +N>The icons are embedded in the font file used in above code snippet. + +**Step 6:** Add the following scripts for performing user interaction in PDF Viewer in code behind + +```html + +``` + +[View sample in GitHub](https://github.com/SyncfusionExamples/asp-core-pdf-viewer-examples/tree/master/How%20to/Create%20Custom%20Toolbar) + ![ASP.NET MVC PDF Viewer primary toolbar with customized items](./images/pdfviewer-primary-toolbar.png) * [Get more info about primary toolbar customization](./toolbar-customization/primary-toolbar-customization) @@ -75,3 +614,4 @@ Use the Form Designer toolbar to add and configure interactive form fields in th * [Mobile toolbar](./toolbar-customization/mobile-toolbar) * [Adding the shape annotation in PDF viewer](./annotation/shape-annotation) * [Form designer in PDF viewer](./form-designer/create-programmatically) +* [Feature Modules](./feature-module) \ No newline at end of file From e7853439ef289a7383e04b2cdf4689883482dc38 Mon Sep 17 00:00:00 2001 From: Balaji Loganathan Date: Tue, 28 Oct 2025 14:15:21 +0530 Subject: [PATCH 09/14] 987332: Resolved "PDF Viewer" spelling errors & updated versions of ResourceUrl --- .../PDF-Viewer/asp-net-mvc/accessibility.md | 2 +- .../annotation/annotation-event.md | 40 +++++++++---------- .../asp-net-mvc/annotation/comments.md | 4 +- .../PDF/PDF-Viewer/asp-net-mvc/download.md | 2 +- .../PDF/PDF-Viewer/asp-net-mvc/event.md | 16 ++++---- .../PDF-Viewer/asp-net-mvc/feature-module.md | 2 +- .../PDF-Viewer/asp-net-mvc/form-filling.md | 10 ++--- .../PDF-Viewer/asp-net-mvc/how-to-overview.md | 8 ++-- .../asp-net-mvc/how-to/add-save-button.md | 2 +- .../configure-annotation-selector-setting.md | 2 +- ...pdf-library-bounds-to-pdf-viewer-bounds.md | 4 +- .../asp-net-mvc/how-to/custom-context-menu.md | 2 +- .../how-to/customize-text-search-color.md | 6 +-- .../how-to/disable-context-menu.md | 6 +-- .../how-to/disable-tile-rendering.md | 6 +-- .../how-to/enable-local-storage.md | 2 +- .../asp-net-mvc/how-to/enable-resize.md | 6 +-- .../how-to/enable-text-selection.md | 4 +- .../how-to/extract-text-completed.md | 2 +- .../asp-net-mvc/how-to/extract-text-option.md | 2 +- .../asp-net-mvc/how-to/extract-text.md | 2 +- .../asp-net-mvc/how-to/find-text-async.md | 2 +- .../asp-net-mvc/how-to/get-Page-Info.md | 2 +- .../asp-net-mvc/how-to/get-base64.md | 2 +- .../how-to/identify-added-annotation-mode.md | 6 +-- .../how-to/include-the-authorization-token.md | 4 +- .../how-to/overlapped-annotation.md | 6 +-- .../asp-net-mvc/how-to/print-document.md | 6 +-- .../how-to/select-multi-page-annotations.md | 6 +-- .../how-to/show-hide-annotation.md | 2 +- .../bookmark-navigation.md | 4 +- .../page-navigation.md | 6 +-- .../page-thumbnail-navigation.md | 4 +- .../PDF-Viewer/asp-net-mvc/open-pdf-file.md | 2 +- .../PDF/PDF-Viewer/asp-net-mvc/print.md | 4 +- .../asp-net-mvc/save-pdf-file/to-amazon-s3.md | 2 +- .../save-pdf-file/to-azure-blob-storage.md | 2 +- .../PDF-Viewer/asp-net-mvc/server-actions.md | 2 +- .../asp-net-mvc/text-markup-annotation.md | 4 +- .../PDF/PDF-Viewer/asp-net-mvc/text-search.md | 4 +- .../PDF-Viewer/asp-net-mvc/text-selection.md | 6 +-- .../annotation-toolbar-customization.md | 4 +- .../toolbar-customization/mobile-toolbar.md | 6 +-- .../primary-toolbar-customization.md | 2 +- 44 files changed, 109 insertions(+), 109 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md index e7bb297dc..28f087d08 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/accessibility.md @@ -1,7 +1,7 @@ --- layout: post title: Accessibility with EJ2 ASP.NET MVC PDF Viewer | Syncfusion -description: Learn here all about accessibility in ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +description: Learn here all about accessibility in ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. platform: document-processing control: PDF Viewer documentation: ug diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md index b9325a5aa..1049fa3f4 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/annotation-event.md @@ -1,6 +1,6 @@ --- -title: Annotations Events in ASP.NET MVC Pdfviewer control | Syncfusion -description: Learn here all about Annotations Events in Syncfusion ASP.NET MVC Pdfviewer component of Syncfusion Essential JS 2 and more. +title: Annotations Events in ASP.NET MVC PDF Viewer control | Syncfusion +description: Learn here all about Annotations Events in Syncfusion ASP.NET MVC PDF Viewer component of Syncfusion Essential JS 2 and more. platform: document-processing control: PDF Viewer documentation: ug @@ -47,7 +47,7 @@ The following example illustrates how to handle the `annotationAdd` event.
    - @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationAdd("annotationAdd").Render() + @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/31.2.2/dist/ej2-pdfviewer-lib").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").AnnotationAdd("annotationAdd").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 c0a903c7f..000000000 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/formdesigner/user-interaction-with-form-fields.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -layout: post -title: User Interaction With Form Fields in ASP.NET MVC Pdfviewer 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 ---- - - -# 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 -
    - @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 From 9cb31850d3349c6ec53a50723a75a5a6e4d0e2c3 Mon Sep 17 00:00:00 2001 From: Balaji Loganathan Date: Tue, 28 Oct 2025 15:09:43 +0530 Subject: [PATCH 11/14] 987332: Resolved CI errors --- .../annotation/line-angle-constraints.md | 2 +- .../form-designer/create-programmatically.md | 16 ++++++++++++++++ .../PDF-Viewer/asp-net-mvc/how-to-overview.md | 4 ++-- .../how-to/add-annotation-in-text-search.md | 2 +- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/line-angle-constraints.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/line-angle-constraints.md index c4eccb5bf..ecfa7bdfb 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/line-angle-constraints.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/annotation/line-angle-constraints.md @@ -1,7 +1,7 @@ --- layout: post title: Line angle constraints in ASP.NET MVC PDF Viewer | Syncfusion -description: Learn to add, edit, delete, and configure highlight, underline, strikethrough, and squiggly text markup annotations programmatically. +description: Learn to add, edit, delete, and configure highlight, underline, strikethrough, and squiggly text markup annotations programmatically in ASP.NET MVC platform: document-processing control: PDF Viewer documentation: ug diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md index 5dd60d8e0..a8af3bc19 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/form-designer/create-programmatically.md @@ -634,6 +634,7 @@ The following code example explains how to update the signature field properties The following code shows how to configure default properties for a signature field added from the Form Designer toolbar. +```html +``` ![Signature field settings in the PDF Viewer](../images/signature_field.png) The following code shows how to configure default properties for an initial field added from the Form Designer toolbar. +```html +``` ![Initial field settings in the PDF Viewer](../images/initialfield.png) @@ -795,6 +799,7 @@ The following example updates Textbox field properties on a button click. The following code shows how to configure default properties for a Textbox field added from the Form Designer toolbar. +```html +``` ![Textbox field settings in the PDF Viewer](../images/Textbox.png) @@ -928,6 +934,7 @@ The following example updates Password field properties on a button click. The following code shows how to configure default properties for a Password field added from the Form Designer toolbar. +```html +``` ![Password field settings in the PDF Viewer](../images/Password.png) @@ -1045,6 +1053,7 @@ The following example updates CheckBox field properties on a button click. The following code shows how to configure default properties for a CheckBox field added from the Form Designer toolbar. +```html +``` ![CheckBox field settings in the PDF Viewer](../images/Checkbox.png) @@ -1154,6 +1164,7 @@ The following example updates RadioButton field properties on a button click. The following code shows how to configure default properties for a RadioButton field added from the Form Designer toolbar. +```html +``` ![RadioButton field settings in the PDF Viewer](../images/Radiobutton.png) @@ -1283,6 +1295,7 @@ The following example updates ListBox field properties on a button click. The following code shows how to configure default properties for a ListBox field added from the Form Designer toolbar. +```html +``` ![ListBox field settings in the PDF Viewer](../images/Listbox.png) @@ -1427,6 +1441,7 @@ The following example updates DropDown field properties on a button click. The following code shows how to configure default properties for a DropDown field added from the Form Designer toolbar. +```html +``` ![DropDown field settings in the PDF Viewer](../images/Dropdown.png) diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to-overview.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to-overview.md index a82b33733..1e99673ca 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to-overview.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to-overview.md @@ -1,7 +1,7 @@ --- layout: post -title: FAQ Section in PDF Viewer control | Syncfusion -description: In this section, you can know about the various questions asked about manipulation of in PDF Viewer control. +title: FAQ Section in ASP.NET MVC PDF Viewer control | Syncfusion +description: In this section, you can know about the various questions asked about manipulation of ASP.NET MVC PDF Viewer control. platform: document-processing control: PDF Viewer documentation: ug diff --git a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md index 6f6ee5cad..cd41ba883 100644 --- a/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md +++ b/Document-Processing/PDF/PDF-Viewer/asp-net-mvc/how-to/add-annotation-in-text-search.md @@ -7,7 +7,7 @@ control: PDF Viewer documentation: ug --- -# Add rectangle annotations using text search bounds in PDF Viewer +# Add Rectangles to Search Highlights in ASP.NET MVC PDF Viewer A concise guide to adding rectangle annotations at highlighted text search results in the ASP.NET MVC PDF Viewer to visually emphasize matches and improve readability. From 334769cc5cd77886d58e54d5b7cd79cb7c6b5f84 Mon Sep 17 00:00:00 2001 From: Balaji Loganathan Date: Tue, 28 Oct 2025 16:48:07 +0530 Subject: [PATCH 12/14] 987332: Updated toc file --- Document-Processing-toc.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index d1bd3450d..ec102412d 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -250,7 +250,7 @@
  • To Azure Active Directory
  • -
  • Toolbar Customization +
  • Toolbar Customization
  • Accessibility
  • +
  • Toolbar
  • +
  • Navigation
  • Magnification
  • Text Search
  • Annotation @@ -308,6 +310,7 @@
  • Events in Organize Page
  • +
  • Organize Pages
  • Print
  • Download
  • Event
  • From 45d7205c7ec76b8fe6c6b0abe66679d55a3da8dc Mon Sep 17 00:00:00 2001 From: Balaji Loganathan Date: Tue, 28 Oct 2025 18:06:59 +0530 Subject: [PATCH 13/14] 987332: Updated toc file --- Document-Processing-toc.html | 26 +++++++++---------- .../annotation/annotation-event.md | 2 +- .../annotation/annotations-in-mobile-view.md | 6 ++--- .../PDF/PDF-Viewer/asp-net-mvc/event.md | 2 +- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index ec102412d..f0571eeab 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -275,14 +275,14 @@
  • Text Search
  • Annotation