From fcd4df9b873427681957f72522ba269d5abb58db Mon Sep 17 00:00:00 2001 From: Sujitha Siva Date: Mon, 29 Jun 2026 21:51:22 +0530 Subject: [PATCH 1/2] Updated Docx Editor Feature enhancement in Angular --- Document-Processing-toc.html | 1 + .../angular/document-editor-toc.html | 1 + .../perform-mail-merge-in-document-editor.md | 47 +++ .../custom-metadata-author-trackchanges.png | Bin 0 -> 43752 bytes .../angular/images/filter-changes-by-user.png | Bin 0 -> 50064 bytes .../images/spellcheck-dictionary-setup.png | Bin 0 -> 46866 bytes .../angular/restrict-editing.md | 339 ++++++++++++++-- .../Word-Processor/angular/spell-check.md | 230 ++++++----- .../Word-Processor/angular/track-changes.md | 381 ++++++++++++------ .../angular/web-services/core.md | 224 +++++----- 10 files changed, 884 insertions(+), 339 deletions(-) create mode 100644 Document-Processing/Word/Word-Processor/angular/how-to/perform-mail-merge-in-document-editor.md create mode 100644 Document-Processing/Word/Word-Processor/angular/images/custom-metadata-author-trackchanges.png create mode 100644 Document-Processing/Word/Word-Processor/angular/images/filter-changes-by-user.png create mode 100644 Document-Processing/Word/Word-Processor/angular/images/spellcheck-dictionary-setup.png diff --git a/Document-Processing-toc.html b/Document-Processing-toc.html index 68ebc725c0..e9efd883be 100644 --- a/Document-Processing-toc.html +++ b/Document-Processing-toc.html @@ -3880,6 +3880,7 @@
  • Optimize the SFDT file
  • Disable Optimized Text Measuring
  • Deploy Document Editor component for Mobile
  • +
  • Perform Mail Merge in Document Editor
  • Troubleshooting diff --git a/Document-Processing/Word/Word-Processor/angular/document-editor-toc.html b/Document-Processing/Word/Word-Processor/angular/document-editor-toc.html index 24c8d6354a..e10edd537f 100644 --- a/Document-Processing/Word/Word-Processor/angular/document-editor-toc.html +++ b/Document-Processing/Word/Word-Processor/angular/document-editor-toc.html @@ -125,6 +125,7 @@
  • Enable ruler in Document Editor component
  • Customize color picker
  • Customize Ribbon
  • +
  • Perform Mail Merge in Document Editor
  • Troubleshooting diff --git a/Document-Processing/Word/Word-Processor/angular/how-to/perform-mail-merge-in-document-editor.md b/Document-Processing/Word/Word-Processor/angular/how-to/perform-mail-merge-in-document-editor.md new file mode 100644 index 0000000000..1d85a168c9 --- /dev/null +++ b/Document-Processing/Word/Word-Processor/angular/how-to/perform-mail-merge-in-document-editor.md @@ -0,0 +1,47 @@ +--- +layout: post +title: Mail Merge in Angular DOCX Editor | Syncfusion +description: Learn here to perform mail merge in Syncfusion Angular DOCX Editor component using the Word Library as a dependency +control: Perform mail merge +platform: document-processing +documentation: ug +domainurl: ##DomainURL## +--- + +# How to perform mail merge in Angular DOCX Editor + +You can perform mail merge in the Angular DOCX Editor (Document Editor) using the following approach: + +1. Insert merge fields programmatically using Document Editor APIs. + +2. Execute the mail merge on the Word document using the server-side Word Library (DocIO). + +3. Finally, view the merged document in the Document Editor. + +## Insert merge field + +A field can be added to the document by using the [insertField](https://ej2.syncfusion.com/angular/documentation/api/document-editor/editor#insertfield) method in the [Editor](https://ej2.syncfusion.com/angular/documentation/api/document-editor/editor) module. + +The following example demonstrates how to insert a merge field programmatically by providing the field code and field result. + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + +let fieldCode: string = 'MERGEFIELD First Name \\* MERGEFORMAT '; +let fieldResult: string = '«First Name»'; +container.documenteditor.editor.insertField(fieldCode, fieldResult); + +{% endhighlight %} +{% endtabs %} + +For more information about Fields, refer this [page](https://help.syncfusion.com/document-processing/word/word-processor/angular/fields). + +## Perform mail merge  + +Once the necessary merge fields are inserted, the template is ready for mail merge. Perform the mail merge on the template using supported data sources on the server side with DocIO. After the mail merge operation is completed, the merged document can be loaded into the Document Editor for viewing. The Document Editor also supports exporting the mail-merged document to supported formats. + +For detailed information about mail merge functionality in DocIO, refer to this [page](https://help.syncfusion.com/document-processing/word/word-library/net/working-with-mail-merge). + +## Online demo  + +Explore how to insert merge fields in the Document Editor and execute the mail merge using DocIO through the live demo provided [here](https://document.syncfusion.com/demos/docx-editor/angular/#/tailwind3/document-editor/mail-merge). \ No newline at end of file diff --git a/Document-Processing/Word/Word-Processor/angular/images/custom-metadata-author-trackchanges.png b/Document-Processing/Word/Word-Processor/angular/images/custom-metadata-author-trackchanges.png new file mode 100644 index 0000000000000000000000000000000000000000..0e15ea706c1a002f3863decfac815efc4dbe3b6c GIT binary patch literal 43752 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 BflmMc literal 0 HcmV?d00001 diff --git a/Document-Processing/Word/Word-Processor/angular/images/filter-changes-by-user.png b/Document-Processing/Word/Word-Processor/angular/images/filter-changes-by-user.png new file mode 100644 index 0000000000000000000000000000000000000000..bc5dd53aea4ba33aab774809c2bbfba96ec0ad28 GIT binary patch literal 50064 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 literal 0 HcmV?d00001 diff --git a/Document-Processing/Word/Word-Processor/angular/images/spellcheck-dictionary-setup.png b/Document-Processing/Word/Word-Processor/angular/images/spellcheck-dictionary-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..e0b6c48fa0325667b91751380a246e2db9fa6b2a GIT binary patch literal 46866 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%0D9sy?Q_Q>#A5H8+x_|82-}@LN?- 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 LNkvXXu0mjfm^g4$ literal 0 HcmV?d00001 diff --git a/Document-Processing/Word/Word-Processor/angular/restrict-editing.md b/Document-Processing/Word/Word-Processor/angular/restrict-editing.md index 6ff239e998..1841d19416 100644 --- a/Document-Processing/Word/Word-Processor/angular/restrict-editing.md +++ b/Document-Processing/Word/Word-Processor/angular/restrict-editing.md @@ -1,44 +1,337 @@ --- layout: post -title: Restrict editing in Angular Document editor component | Syncfusion -description: Learn here all about Restrict editing in Syncfusion Angular Document editor component of Syncfusion Essential JS 2 and more. -platform: document-processing +title: Restrict Editing in Angular DOCX Editor | Syncfusion +description: Learn how to enable Restrict Editing in the Angular DOCX Editor to securely manage document access and control user modifications. control: Restrict editing +platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Restrict Editing in Angular Document editor component -Document Editor provides support to restrict editing. When the protected document includes range permission, then unique user or user group only authorized to edit separate text area. +# Restrict Editing in Angular DOCX Editor + +Syncfusion® Angular DOCX Editor (Document Editor) provides support for restricting editing within a document. It enables control over how and where content can be modified. This helps limit editing so only specific sections of the document can be changed. + +## Configure on client side + +Document Editor provides options to protect and unprotect a document using the [enforceProtection](https://ej2.syncfusion.com/angular/documentation/api/document-editor/editor#enforceprotection) and [stopProtection](https://ej2.syncfusion.com/angular/documentation/api/document-editor/editor#stopprotection) APIs, enabling various restricting editing operations. + + +### Read only mode + +Document Editor supports protecting a document in read-only mode, where users can only view the content without making changes. + +The following example code illustrates how to enforce or remove read-only protection in the Document Editor. + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + +import { Component, ViewChild } from '@angular/core'; +import { + DocumentEditorContainerComponent, + DocumentEditorContainerModule, + ToolbarService +} from '@syncfusion/ej2-angular-documenteditor'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [DocumentEditorContainerModule], + providers: [ToolbarService], + template: ` +
    + + + + + + +
    ` +}) +export class App { + + @ViewChild('container') + public container!: DocumentEditorContainerComponent; + + sfdt = {"sfdt":"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"}; + + onCreated() { + this.container.documentEditor.open(JSON.stringify(this.sfdt)); + } + + enforceProtection(): void { + this.container.documentEditor.editor.enforceProtection('123', 'ReadOnly'); + } + + stopProtection(): void { + this.container.documentEditor.editor.stopProtection('123'); + } +} + +{% endhighlight %} +{% endtabs %} + + + +### Form filling mode + +Document Editor supports protecting a document with form-filling restrictions, allowing users to edit only form fields. + +The following example code illustrates how to enforce or remove form-filling restrictions in the Document Editor. + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + +import { Component, ViewChild } from '@angular/core'; +import { + DocumentEditorContainerComponent, + DocumentEditorContainerModule, + ToolbarService +} from '@syncfusion/ej2-angular-documenteditor'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [DocumentEditorContainerModule], + providers: [ToolbarService], + template: ` +
    + + + + + + +
    + ` +}) +export class App { + + @ViewChild('container') + public container!: DocumentEditorContainerComponent; + + sfdt = { "sfdt": "UEsDBAoAAAAIAGlfyVyMVz+kgAMAAL0ZAAAEAAAAc2ZkdM1YW2+bMBT+K5H3GlUBEgi8Vd2iPexSbXmYVOXBgB2smsvAbdpGkab91P2S+QYJzaW0TQhRpM/BHJ/P5/t8gliCNGMkJk/oJw4Z8Fh+h/oARj7wMKQF6oMCBcC7WQrMcuAtQbYAnm2YfZBFwHNcPqAxH3DMNTKNvsYoBJ5l9wHWGOIMeAOOKVIDnyjgmcA3tLiGcwT6ACUYeDwcC+TTOSkRSSQ4AZ7BESnM5knBF7jMoU8CHp8EKS3kDPq9kEh9FshQNXMzW/GkcncZFlvzw7wQyDitJZ+jTGE+V+jr35GCewEcC5YI4mkeQ8rzUsFTTgRqVaKLya8QmW37OqOZWALGyOuBVX/XLZhJ6hFGpUxYFHQJRPIpemCGqJncJ+cHgOClkBG5KRkeU1X6ezUlKrpa7U7o36qQ9frVfRXjyfcfX6effk1rU4KpuXtNFfXvz9/N74ENGweoGTVqM3FnmzKeOuGLbrkMwxwVxdsNY57YMGZ3DWMKw8xEcWTJZ5XIVd8j1QgXTzzWEOXj0VeQEj8nvBR3crOF2rMPVbFVf+EhIrsKEqONMBisV8awNoV5q0MbVzjxdxmMkkR3TIVYI1Nk/UICVKB7JdUbSmnVmjXbW5G1HC+SarwISn+tHYwLzYhhqgYhW6jur1sw0l090sYqSoPFKn+mIIyYdiDGimCQxpmu/CPzNUtRByD+Pj5M5AfI4/Uoz0/tkOnF31fV5+c0eVinEP4TGT8jGJJk3jOOlfRFKcV/8qaWFwPHNWzbHg0cxxy4Q6currHd4pTT7brTe1/IPGJCGVlfczIaujZ4Zt71TXUL6+vqf3aj1W0WqHcVwRy8UMXyJnWM26H7EWF4R1nvGuZwnsMs6k3ShFXc9kzXOK6eb8RszQ6vc4O5zw1Wu24wm7jB3O8G61xuKLlZHRXY2iewebBixsRybOuIAltNBLb2C3w6ug0FHnZU4OG2wGT94NfeCR42EXi4S+BT020o8KijAo92nOAWdR010XW08+CeVU67o3Lar5Lz6H3YbiKn/Uo5W2i/TkfldN7Wfo+uq9NEV+et7bcFgccdFXi87wFqcDE6WDNLfo4o8biJxOP9j1CnJNxQZLejIruHTvF51HabqO0ePtBdkB3lx9F89+uq7ZcytYLK2mkWJalJmrLzk9IsxCtIKl8r88WowiBWmOufDwpJPC/ksv8BUEsBAhQACgAAAAgAaV/JXIxXP6SAAwAAvRkAAAQAAAAAAAAAAAAAAAAAAAAAAHNmZHRQSwUGAAAAAAEAAQAyAAAAogMAAAAA" }; + + onCreated() { + this.container.documentEditor.open(JSON.stringify(this.sfdt)); + } + + enforceProtection(): void { + this.container.documentEditor.editor.enforceProtection('123', 'FormFieldsOnly'); + } + + stopProtection(): void { + this.container.documentEditor.editor.stopProtection('123'); + } +} + +{% endhighlight %} +{% endtabs %} + +### Comments only mode + +Document Editor supports protecting a document in comments-only mode, allowing users to add or edit comments only. + +The following example code illustrates how to enforce and remove comments-only protection in the Document Editor. + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + +import { Component, ViewChild } from '@angular/core'; +import { + DocumentEditorContainerComponent, + DocumentEditorContainerModule, + ToolbarService +} from '@syncfusion/ej2-angular-documenteditor'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [DocumentEditorContainerModule], + providers: [ToolbarService], + template: ` +
    + + + + + + +
    + ` +}) +export class App { + + @ViewChild('container') + public container!: DocumentEditorContainerComponent; + + sfdt = {"sfdt":"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"}; + + onCreated() { + this.container.documentEditor.open(JSON.stringify(this.sfdt)); + } + + enforceProtection(): void { + this.container.documentEditor.editor.enforceProtection('123', 'CommentsOnly'); + } + + stopProtection(): void { + this.container.documentEditor.editor.stopProtection('123'); + } +} + +{% endhighlight %} +{% endtabs %} + +### Track changes only mode + +Document Editor supports protecting a document in revisions-only mode, allowing users to view the document and make corrections while tracking all changes. Users cannot accept or reject tracked changes; only the author can review and finalize them later. + +The following example code illustrates how to enforce and remove revisions-only protection in the Document Editor. + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + +import { Component, ViewChild } from '@angular/core'; +import { + DocumentEditorContainerComponent, + DocumentEditorContainerModule, + ToolbarService +} from '@syncfusion/ej2-angular-documenteditor'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [DocumentEditorContainerModule], + providers: [ToolbarService], + template: ` +
    + + + + + + +
    + ` +}) +export class App { + + @ViewChild('container') + public container!: DocumentEditorContainerComponent; + + sfdt = {"sfdt":"UEsDBAoAAAAIAMBmyVzPkjTQFwcAAJcpAAAEAAAAc2ZkdO1aS28bNxD+K4vtVQj0ft3qV5zEdozYSREkPlArrpYW99El145iGCiSUy8FCqRFDw3QWw9F0QAN0KCX/hgDDtr0R3SGpKRdWVLkWJUcIDLgITl8zHxDfuRy98QOI8l89pTuuW1pN2Wc0JxNvJbddAkXNGcL6tjNRycoo9huntjRsd2sFoo5O/LsZq0BCe5DAmRspDSyZaTXtpulas52jWy7kd3MgwypTrSYFjCSvUOPd0mH2jmbBq7dhOYuSlDHrC+pkswN7GYBJNUy6gQCOvg8Ji3mQPvACblQGvrlsZK8JR3VVGseHZzCoMq7yEXXWu1YoJRg1gnouNQy7mjZMnlPiyMUWIyj1AE2kCXoXUgwyN6kpM2CjlUAUziaruo6aiBXPNVNXMjaq4SzVsygHpQjFlqDqbTOJSP5wKUjJZkCGI0p5xY7puQRRqF9RAOZxNT6Ioy7wlrtOZwK+xQgvyLaLgv0NEK4q320d8LYJ3wi1MWhn8WxuIxUmOZEzpIetVzmSCZZmAjLCf2IBD0rDKxjjzme0o+2FcSPOLXaRJIWEVRYBFSYaucsBjmLk7hDc5afcMkCAj0HhFs+CRKXONAPTiUz0A2E8QCAUfZ7Csurz+LpOBrQDjCAtrv4IekS3KRL8NONlhHPaOGenuIETi/AgiGmfebD4oBdwLoXwuxPEVRhQFAX67C2qpIvVjCNqVIJU0hOOq2pbEzvhtLGacYqwIkrQcSRv9Q2pqVrpCR6ExRKEC3MBsaFVNmQD/ZLsz13cdR++jgYpI+d/mY+jIErjEXS5Wh4HygoactjTapmg6Rmz/XAahuwEEa6vjYk0qLtSV+b5LraUqQoVSBkT7a0Tnq+jrNjBM6Ruy4wKG7zPjl0hVZwNQFRy4EAMQZyuLdYW6zjSShDZs4X8xv5EvzHv7JKlW3cWrAxJbPUcsTUWjA9XYTLvg2UC7XO37w5e/b67NkfZ8+fnz37bWDNJgkg3va7n7/99+VX1j+///TuxXe6GA8jb3/9+u2ff6Uro0fn3796+/rV+Q/f/P3LCyjFE8vYGbhJW/FYxb5HcB18HnQECQiqoHBdeli40yMcAVihyrAHMM/amL+ZHGJne16cSNy573g+5rfDkK+Eser2DtaE8ZKgo1vECWTvEXKEDVa1S+tJ5FGfYYVVj2IXuxzcgjNbQKWFRWGXYmAfMob2bDMnDkXoSushs1YIU4PvM1wdKd0mA8YgPaKdQyu2H1grIcfKa/RIFQDSilX2KUe7bpJEEl/1RnAW2ltEetjBXi/Gk+S6kOBWh/LQWm9TIVB1N+5hV3dgSmkft3nPVwWxZF0s2CJhCAVrYXfVgy1b9ccCWMP2LdEFrIi1G0rVMlT4ogAzSTDw7QGjcmzU7sMsyDiNBUmMSNNQxabHXUIDNSX8QJ1lmfJ4JekglFuUcnJM2pRa929hcRiFmQ5vexD0TYpW3CYKNBQBFdTap09wBm4xgdjt0U5oOtnu6XnQI4FP4n69na6CYR0Wnq+A404XJxdDZie65V3hk3SdXY8gIihEZAIRTAgEqA4nq+gkFUzUUSv2CacZEPYJcAXVmiSjwWAobaLUrgqgMR8J0mfBTFSUJo7KTCRUmYmEKjOQELDG+Y8vZySe91FOf34ZoulnDb2shnGbXY1d1kgS7FJYPp/IZa7k0o/UJ0q51pSibgfwOGjjnPlsw/xsdVLuDShmcF42h6urHC/x4Fg3B8cbhXIDf7VqoVIvlIvDg+SFp+SRO4F5XAQET4au9fkufSkyB2fVzUtRn4sLk579q9krj8FhzFUxKa7XyisViMnwQaM6CsCwSRqGVGkGjFT5mOL3AFOcHzDF/izI1xqFarVayddqxXyjXMs+TxQn4VaajttGpdyoZnArLRG30sJxK027a5qMW2GjVKuWMrgVl4hbeeG4lS/ixvrPqrPNN9ZKNVgSbpWF41aZztpTlueyMKouHKPqpTBKL8VFY7RGXZJwae2SmHRiEnnWRhhIDVihf112YXOAEzCJs5WuK1m3Jjt5gbsnu3XtuPQSbpXHuXVNqe4SblXGRmv5THQJF6qXdGFRRDGjCzSeD7EaqoS+zM0/8GwJtue2vsGVh4p3JV7iqrd2sHdX6xl1pa8+SF3xK7ozdmbNHgu7QjhvfjOisBGG8mNAwdiZNXtuKMCDd0o3LzTM21VHXHyBkPFtZPTRNVaboz3T35YUs29L3nNEqH3Y8VNTwCVXugnj8HVYGp/+NJh2gqp96BZyFXNnJNH6NQ1wfdJzWf5GZSpmJfWbY4jrs4S4Pvnw838aPGOQG9c0yI1pq3g50W7MEu3G9AW9tLAfIJ74ah6iwLV0fC1jk32iJfM7QgcXP786scXVPxoY/657pk8JTgY5/cXO48cJ7J8l84GMcx2NK/eNCxb7McunaH000Tr9D1BLAQIUAAoAAAAIAMBmyVzPkjTQFwcAAJcpAAAEAAAAAAAAAAAAAAAAAAAAAABzZmR0UEsFBgAAAAABAAEAMgAAADkHAAAAAA=="} + + onCreated() { + this.container.documentEditor.open(JSON.stringify(this.sfdt)); + } + + enforceProtection(): void { + this.container.documentEditor.editor.enforceProtection('123', 'RevisionsOnly'); + } + + stopProtection(): void { + this.container.documentEditor.editor.stopProtection('123'); + } +} + +{% endhighlight %} +{% endtabs %} + +### Format restrictions + +Enforces document protection using the specified credentials. In the [enforceProtection](https://ej2.syncfusion.com/angular/documentation/api/document-editor/editor#enforceprotection-1) method, the second parameter represents limitToFormatting, and the third parameter represents isReadOnly. + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + +this.container.documentEditor.editor.enforceProtection('password', true, true); + +{% endhighlight %} +{% endtabs %} + +## Configure on server side + +The above-mentioned hosted Web API URL is for demo and evaluation purposes only. For production, host your own web service as shown below.  + +The Document Editor client requires a server-side API to generate a hash from the specified password and salt values, which is necessary for the restrict editing functionality. + +For more information on configuring restrict editing on the server side, refer to the following: + +- [Web Service for Restrict editing in ASP.NET Core ](https://help.syncfusion.com/document-processing/word/word-processor/angular/web-services/core#restrict-editing) + +- [Web Service for Restrict editing in ASP.NET MVC ](https://help.syncfusion.com/document-processing/word/word-processor/angular/web-services/mvc#restrict-editing) + +- [Web Service for Restrict editing in Java ](https://help.syncfusion.com/document-processing/word/word-processor/angular/web-services/java#restrict-editing) ## Set current user -You can use the `currentUser` property to authorize the current document user by name, email, or user group name. +The [currentUser](https://ej2.syncfusion.com/angular/documentation/api/document-editor-container/documenteditor#currentuser) property can be used to authorize the current document user by name, email, or user group. + +The following code example demonstrates how to set the currentUser. -The following code shows how to set currentUser +{% tabs %} +{% highlight ts tabtitle="app.ts" %} -```typescript this.container.documentEditor.currentUser = 'engineer@mycompany.com'; -``` + +{% endhighlight %} +{% endtabs %} ## Highlighting the text area -You can highlight the editable region of the current user using the `userColor` property. +The [userColor](https://ej2.syncfusion.com/angular/documentation/api/document-editor-container/index-default#usercolor) property can be used to highlight the editable region of the current user. + +The following code example demonstrates how to set the userColor. -The following code shows how to set userColor. +{% tabs %} +{% highlight ts tabtitle="app.ts" %} -```typescript this.container.documentEditor.userColor = '#fff000'; -``` -You can toggle the highlight the editable region value using the "highlightEditableRanges" property. +{% endhighlight %} +{% endtabs %} + +The [highlightEditableRanges](https://ej2.syncfusion.com/angular/documentation/api/document-editor-container/documenteditorsettingsmodel#highlighteditableranges) property can be used to toggle the highlighting of editable regions. + +The following code example demonstrates how to enable or disable editable region highlighting. -The following code shows how to toggle the highlight editable region value. +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + +this.container.documentEditor.documentEditorSettings.highlightEditableRanges = true; -```typescript -container.documentEditor.documentEditorSettings.highlightEditableRanges = true; -``` +{% endhighlight %} +{% endtabs %} ## Restrict Editing Pane @@ -64,14 +357,8 @@ The following code shows Restrict Editing Pane. To unprotect the document, use p {% previewsample "/document-processing/samples/document-editor/angular/document-editor-container-cs1" %} -> The Web API hosted link `https://document.syncfusion.com/web-services/docx-editor/api/documenteditor/` utilized in the Document Editor's serviceUrl property is intended solely for demonstration and evaluation purposes. For production deployment, please host your own web service with your required server configurations. You can refer and reuse the [GitHub Web Service example](https://github.com/SyncfusionExamples/EJ2-DocumentEditor-WebServices) or [Docker image](https://hub.docker.com/r/syncfusion/word-processor-server) for hosting your own web service and use for the serviceUrl property. +N> The hosted Web API URL is for demo and evaluation purposes only. For production, host your own web service using the [GitHub Web Service example](https://github.com/SyncfusionExamples/EJ2-DocumentEditor-WebServices) or the [Docker image](https://hub.docker.com/r/syncfusion/word-processor-server). ## Online Demo -Explore how to restrict editing and protect Word documents in the Angular Document Editor in this live demo [here](https://document.syncfusion.com/demos/docx-editor/angular/#/tailwind3/document-editor/document-protection). - -## See Also - -* [How to protect the document in form filling mode](./form-fields#protect-the-document-in-form-filling-mode) -* [How to protect the document in comments only mode](./comments#protect-the-document-in-comments-only-mode) -* [How to protect the document in track changes only mode](./track-changes#protect-the-document-in-track-changes-only-mode) \ No newline at end of file +Explore how to restrict editing and protect Word documents using the Angular Document Editor in this live demo [here](https://document.syncfusion.com/demos/docx-editor/angular/#/tailwind3/document-editor/document-protection). \ No newline at end of file diff --git a/Document-Processing/Word/Word-Processor/angular/spell-check.md b/Document-Processing/Word/Word-Processor/angular/spell-check.md index 8cd8f7e2b1..6aca5bed3f 100644 --- a/Document-Processing/Word/Word-Processor/angular/spell-check.md +++ b/Document-Processing/Word/Word-Processor/angular/spell-check.md @@ -1,165 +1,213 @@ --- layout: post -title: Spell check in Angular Document editor component | Syncfusion -description: Learn here all about Spell check in Syncfusion Angular Document editor component of Syncfusion Essential JS 2 and more. -platform: document-processing +title: Spell check in Angular DOCX Editor | Syncfusion +description: Learn how to use Spell check in the Angular DOCX Editor to detect and correct errors seamlessly- without relying on Microsoft Word. control: Spell check +platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Spell check in Angular Document editor component +# Spell Check in Angular DOCX Editor -Document Editor supports performing spell checking for any input text. You can perform spell checking for the text in Document Editor and it will provide suggestions for the mis-spelled words through dialog and in context menu. Document editor's spell checker is compatible with [hunspell dictionary files](https://github.com/wooorm/dictionaries). +Syncfusion® Angular DOCX Editor (Document Editor) supports spell checking for document content. It identifies misspelled words and provides suggestions through a dialog and the context menu. The spell checker is compatible with [Hunspell](https://github.com/wooorm/dictionaries) dictionary files. -```typescript -import { Component, ViewEncapsulation, ViewChild } from '@angular/core'; -import { ToolbarService, DocumentEditorContainerComponent } from '@syncfusion/ej2-angular-documenteditor'; +## Features + +* Supports context menu suggestions for misspelled words. + +* Provides options such as Ignore, Ignore All, Change, and Change All in the spell check dialog. + +## Configure spell check in Angular DOCX Editor + +Spell checking is enabled using the [enableSpellCheck](https://ej2.syncfusion.com/documentation/api/document-editor-container/index-default#enablespellcheck) property and by configuring the spellChecker settings. A server-side service is required to process text, detect misspelled words, and provide suggestions for display in the editor. + +### Client-side configuration + +Spell check can be enabled in the Document Editor using the [enableSpellCheck](https://ej2.syncfusion.com/documentation/api/document-editor-container/index-default#enablespellcheck) property. Configure the spell check settings with a valid service URL and language ID to enable spelling validation and suggestions. + +The following code example demonstrates how to enable spell check and configure basic spell checker settings: + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + +import { Component, ViewChild } from '@angular/core'; +import { + DocumentEditorContainerComponent, + DocumentEditorContainerModule, + ToolbarService +} from '@syncfusion/ej2-angular-documenteditor'; +import { SpellChecker } from '@syncfusion/ej2-documenteditor'; @Component({ - selector: 'app-container', - // specifies the template string for the DocumentEditorContainer component - template: ` `, - providers: [ToolbarService] + selector: 'app-root', + standalone: true, + imports: [DocumentEditorContainerModule], + providers: [ToolbarService], + template: ` +
    + + + +
    + ` }) -export class AppComponent { - @ViewChild('document_editor') - public container: DocumentEditorContainerComponent; - onCreated() { - //Specifies the language id to map server side dictionary. +export class App { + + @ViewChild('container') + public container!: DocumentEditorContainerComponent; + + onCreated() { + // set the language ID for spell checker. Here, 1033 is the language ID for English (United States). this.container.documentEditor.spellChecker.languageID = 1033; + // remove the underline for misspelled words. this.container.documentEditor.spellChecker.removeUnderline = false; + // Allow suggestion for misspelled word this.container.documentEditor.spellChecker.allowSpellCheckAndSuggestion = true; } } -``` -## Features +{% endhighlight %} +{% endtabs %} + +### Server-side configuration -* Supports context menu suggestions. -* Provides built-in options to Ignore, Ignore All, Change, Change All for error words in spell checker dialog. +The above-mentioned hosted Web API URL is for demo and evaluation purposes only. For production, host your own web service as shown below. -## Enable SpellCheck +The Document Editor client requires a server-side API to process text, identify misspelled words, and provide suggestions in the context menu. The server returns a JSON response containing details about misspelled words and their suggestions. -To enable spell check in DocumentEditor, set [`enableSpellCheck`](https://ej2.syncfusion.com/angular/documentation/api/document-editor/index-default#enablespellcheck) property as `true` and then configure SpellCheckSettings. +For more information on configuring the spell check service, refer to the following: -## Disable SpellCheck +- [Web Service for Spell Check in ASP.NET Core](https://help.syncfusion.com/document-processing/word/word-processor/angular/web-services/core#spell-check) -To disable spell check in DocumentEditor, set [`enableSpellCheck`](https://ej2.syncfusion.com/angular/documentation/api/document-editor/index-default#enablespellcheck) property as `false` or remove [`enableSpellCheck`](https://ej2.syncfusion.com/angular/documentation/api/document-editor/index-default#enablespellcheck) property initialization code. The default value of this property is false. +- [Web Service for Spell Check in ASP.NET MVC](https://help.syncfusion.com/document-processing/word/word-processor/angular/web-services/mvc#spell-check) + +- [Web Service for Spell Check in Java](https://help.syncfusion.com/document-processing/word/word-processor/angular/web-services/java#spell-check) ## Spell check settings -### Remove Underline +### Allow suggestions + +By default, the Document Editor retrieves both spelling errors and suggestions for misspelled words, allowing users to correct them through context menu options. This behavior can be modified using the [allowSpellCheckAndSuggestion](https://ej2.syncfusion.com/angular/documentation/api/document-editor/spellchecker#allowspellcheckandsuggestion) API to perform only spell checking without fetching suggestions. -By default, mis-spelled words are marked with squiggly line. You can also disable this behavior by enabling the [`removeUnderline`](https://ej2.syncfusion.com/angular/documentation/api/document-editor/spellChecker#removeunderline) API and now, the squiggly lines will never be rendered for mis-spelled words. +The following code example demonstrates how to enable spell check suggestions. ```typescript -this.container.documentEditor.spellChecker.removeUnderline = false; + +this.container.documentEditor.spellChecker.allowSpellCheckAndSuggestion = false; + ``` -### AllowSpellCheckAndSuggestion +### Remove underline + +By default, misspelled words are marked with a squiggly line. This behavior can be disabled using the [removeUnderline](https://ej2.syncfusion.com/angular/documentation/api/document-editor/spellchecker#get-removeunderline-boolean) API, which prevents squiggly lines from being rendered for misspelled words. -By default, on performing spell check in Document Editor, both spelling and suggestions of the mis-spelled words will be retrieved, and this mis-spelled words can be corrected through context menu suggestions. You can modify this behavior using the [`allowSpellCheckAndSuggestion`](https://ej2.syncfusion.com/angular/documentation/api/document-editor/spellChecker#allowspellcheckandsuggestion) API, which will perform only spell check. +The following code example demonstrates how to configure this behavior. ```typescript -this.container.documentEditor.spellChecker.allowSpellCheckAndSuggestion = false; + +this.container.documentEditor.spellChecker.removeUnderline = false; + ``` -### LanguageID +### Language configuration + +The Document Editor supports multi-language spell checking. Multiple languages (dictionaries) can be added on the server side, and the language used for spell checking must match the [languageID](https://ej2.syncfusion.com/angular/documentation/api/document-editor/spellchecker#get-languageid-number) specified in the Document Editor. -Document Editor provides multi-language spell check support. You can add as many languages (dictionaries) in the server-side and to use that language for spell checking in Document Editor, it must be matched with [`languageID`](https://ej2.syncfusion.com/angular/documentation/api/document-editor/spellChecker#languageid) you pass in the Document Editor. +The following code example demonstrates how to configure the languageID. ```typescript + this.container.documentEditor.spellChecker.languageID = 1033; //LCID of "en-us"; + ``` -### EnableOptimizedSpellCheck +### Add new word to dictionary -Document Editor provides option to spellcheck page by page when loading the documents. The default value of this property is false, so when opening the document spellcheck web API will be called for each word in the document. To optimize the frequency of spellcheck web API calls, you can enable this property. +If a root word is missing from the dictionary file, it can be added along with rules to generate possible word forms using the AddNewWord API in the server-side spell check library. -The following code example illustrates how to enable optimized spell checking. +N> Rules are automatically generated based on the root word, possible words, and affix file. Passing null for the affPath and possibleWords parameters adds only the root word to the dictionary. -```typescript -this.container.documentEditor.spellChecker.enableOptimizedSpellCheck = true; -``` +The following server-side example demonstrates how to add a new root word along with rules to generate possible word forms: -### Spell check dictionary cache +{% tabs %} +{% highlight C# tabtitle="C#" %} -Starting from `v20.1.0.xx`, we have optimized the performance and memory usage of spell checker by adding a static method to initialize the dictionaries with specified cache count. +SpellChecker spellChecker = new SpellChecker(); -By default, the spell checker holds only one language dictionary in memory. If you want to hold multiple dictionaries in memory, you need to set the cache limit by using `InitializeDictionaries` method as in the below example. +// Adds the specified new root word to the dictionary along with the rule to form the possible words. +spellChecker.AddNewWord("en.dic", "en.aff", "construct", new string[] { "constructs", "reconstruct", "constructed", "constructive" }); -```csharp - List spellDictCollection = new List(); - string personalDictPath = string.Empty; - int cacheCount = 2; - // Initialize dictionaries - SpellChecker.InitializeDictionaries(spellDictCollection, personalDictPath, cacheCount); -``` +{% endhighlight %} +{% endtabs %} -If dictionaries are initialized using `InitializeDictionaries` method, then we should use default constructor of the `SpellChecker`to check spelling and get suggestion as in the below example code, it will prevent reinitialization of already loaded dictionaries. - -```csharp -public string SpellCheck([FromBody] SpellCheckJsonData spellChecker) -{ - try - { - SpellChecker spellCheck = new SpellChecker(); - spellCheck.GetSuggestions(spellChecker.LanguageID, spellChecker.TexttoCheck, spellChecker.CheckSpelling, spellChecker.CheckSuggestion, spellChecker.AddWord); - return Newtonsoft.Json.JsonConvert.SerializeObject(spellCheck); - } - catch - { - return "{\"SpellCollection\":[],\"HasSpellingError\":false,\"Suggestions\":null}"; - } -} -``` +### Dictionary cache -Previously on every `SpellChecker.GetSuggestion()` method call, the `.aff` and dictionary data will be parsed to generate suggestion for miss spelled word. But, starting from `v20.1.0.xx`, the `.aff` and dictionary data will be parsed only for the first time alone while calling `SpellChecker.GetSuggestion()` method. +To improve performance, dictionary data can be cached on the **server side** using the InitializeDictionaries method. This avoids reloading dictionary files for every spell check request and reduces processing time. -### Add new root word and possible words to dictionary +By default, only one dictionary is cached. Multiple dictionaries can be maintained by increasing the cache count as shown below: -If you find any root word is missing in the dictionary file, then you can add that new root word and the rule to form the possible words to dictionary file using `AddNewWord` API in the server-side Spell check library. +{% tabs %} +{% highlight C# tabtitle="C#" %} ->Note: ->1. The rules are framed automatically using the root word, the possible words and affix file. ->2. If you pass null for the parameters `affPath` and `possibleWords`, then it will add a single root word to dictionary. ->3. This API is included starting from `v20.2.0.xx`. +List spellDictCollection = new List(); +string personalDictPath = string.Empty; +int cacheCount = 2; +// Initialize dictionaries +SpellChecker.InitializeDictionaries(spellDictCollection, personalDictPath, cacheCount); -The following code example demonstrates how to add a new root word to the dictionary along with the rule to form the possible words. +{% endhighlight %} +{% endtabs %} + +If dictionaries are initialized using the InitializeDictionaries method, the default constructor of the SpellChecker should be used to perform spell checks and retrieve suggestions. This approach prevents the reinitialization of already loaded dictionaries. + +To write a Web API for word-by-word spell checking, refer to the [link](https://help.syncfusion.com/document-processing/word/word-processor/angular/web-services/core#spell-check-word-by-word). + + +### Optimized spell check + +The Document Editor provides an option to perform spell checking page by page when loading documents. By default, this property is set to false, so the spell check web API is called for each word in the document. To optimize the frequency of spell check API calls, you can enable the [enableOptimizedSpellCheck](https://ej2.syncfusion.com/angular/documentation/api/document-editor/spellchecker#get-enableoptimizedspellcheck-boolean) property. + +The following code example illustrates how to enable optimized spell checking. + +```typescript + +this.container.documentEditor.spellChecker.enableOptimizedSpellCheck = true; -```csharp -SpellChecker spellChecker = new SpellChecker(); -// Adds the specified new root word to the dictionary along with the rule to form the possible words. -spellChecker.AddNewWord("en.dic","en.aff", "construct", new string[] { "constructs", "reconstruct", "constructed", "constructive" }); ``` ## Context menu -Right click on error word to open the context menu with spell check options. Please see below screenshot for your reference. - -![Spell check option in context menu](images/spell-check-menu.png) +Right-click on an error word to open the context menu with spell check options. See the screenshot below for reference. -### Suggestions +### More suggestions -Context menu shows the suggestions for mis-spelled words. By clicking on the required word from suggestion, the error word gets replaced automatically. +The context menu shows suggestions for misspelled words. By clicking the required word from the suggestions, the error word is replaced automatically. -### Add To Dictionary +### Add to dictionary -Using this option, you can add the current word to the dictionary. So that the spell checker does not consider that word as error in future. +This option allows the current word to be added to the dictionary. As a result, the spell checker will not treat the word as an error in the future ### Ignore Once and Ignore All -If you do not wish to add the word to dictionary and do not want to show error, use Ignore Once or Ignore All options. +If the word should not be added to the dictionary and should not be marked as an error, the Ignore Once or Ignore All options can be used. -Ignore: ignore only the current occurrence of a word from error. +**Ignore**: Ignores only the current occurrence of a word. -Ignore All: ignore all occurrence of a word from error in the entire document. +**Ignore All:** Ignores all occurrences of a word in the entire document. ### Spelling -Using this option, you can open spell check dialog. Please see below screenshot for your reference. +This option allows the spell check dialog to be opened. Refer to the following screenshot for additional details. -![Spell check dialog](images/spell-check-dialog.png) +## Spelling in status bar -* Refer to the [Spell checker](https://help.syncfusion.com/document-processing/word/word-processor/angular/web-services/core#spell-check) link for configuring spell checker in server-side. \ No newline at end of file +The Spelling option is available in the status bar once spell check is enabled. It allows you to enable or disable spell check and control underline behavior directly from the status bar. \ No newline at end of file diff --git a/Document-Processing/Word/Word-Processor/angular/track-changes.md b/Document-Processing/Word/Word-Processor/angular/track-changes.md index 9d33acdd6a..1e1ceb7ab7 100644 --- a/Document-Processing/Word/Word-Processor/angular/track-changes.md +++ b/Document-Processing/Word/Word-Processor/angular/track-changes.md @@ -1,78 +1,208 @@ --- layout: post -title: Track changes in Angular Document editor component | Syncfusion -description: Learn here all about Track changes in Syncfusion Angular Document editor component of Syncfusion Essential JS 2 and more. -platform: document-processing +title: Track Changes in Angular DOCX Editor | Syncfusion +description: Learn how to enable Track Changes in Angular DOCX Editor and manage document revisions by accepting or rejecting edits made by multiple reviewers. control: Track changes +platform: document-processing documentation: ug domainurl: ##DomainURL## --- -# Track changes in Angular Document editor component +# Track Change in Angular DOCX Editor -Track Changes allows you to keep a record of changes or edits made to a document. You can then choose to accept or reject the modifications. It is a useful tool for managing changes made by several reviewers to the same document. If track changes option is enabled, all editing operations are preserved as revisions in Document Editor. +Syncfusion® Angular DOCX Editor (Document Editor) supports Track Changes functionality, which allows you to keep a record of changes or edits made to a document. You can then choose to accept or reject these modifications. It is a useful tool for managing changes made by several reviewers to the same document. When the Track Changes option is enabled, all editing operations are preserved as revisions in the Document Editor. -## Enable track changes in Document Editor +## Enable Track changes + +Track Changes can be enabled using the [enableTrackChanges](https://ej2.syncfusion.com/angular/documentation/api/document-editor-container/index-default#enabletrackchanges) property. When enabled, all editing operations are recorded and preserved as revisions in the Document Editor. The following example demonstrates how to enable track changes. -``` - -``` +{% tabs %} +{% highlight ts tabtitle="app.ts" %} ->Track changes are document level settings. When opening a document, if the document does not have track changes enabled, then enableTrackChanges will be disabled even if we set [enableTrackChanges] = true in the initial rendering. If you want to enable track changes for all the documents, then we recommend enabling track changes during the document change event. The following example demonstrates how to enable Track changes for the all the Document while Opening. +import { Component } from '@angular/core'; +import { + DocumentEditorContainerModule, + ToolbarService +} from '@syncfusion/ej2-angular-documenteditor'; -```typescript - +@Component({ + selector: 'app-root', + standalone: true, + imports: [DocumentEditorContainerModule], + providers: [ToolbarService], + template: ` + + + + ` +}) +export class App {} + +{% endhighlight %} +{% endtabs %} + +N> Track changes are document level settings. When opening a document, if the document does not have track changes enabled, then enableTrackChanges will be disabled even if we set enableTrackChanges: true in the initial rendering. If you want to enable track changes for all the documents, then we recommend enabling track changes in documentChange event. + +The following example demonstrates how to enable track changes for the all the document while opening. + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + + + + onDocumentChange(): void { if (this.container !== null) { this.container.documentEditor.enableTrackChanges = true; } } -``` + +{% endhighlight %} +{% endtabs %} + +## Show or hide revisions pane + +The Show or Hide Revisions Pane in the Document Editor allows users to toggle the visibility of the revisions pane, providing flexibility in managing tracked changes within the document. + +The following example code illustrates how to show or hide the revisions pane. + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + +import { Component, ViewChild } from '@angular/core'; +import { + DocumentEditorContainerComponent, + DocumentEditorContainerModule, + ToolbarService +} from '@syncfusion/ej2-angular-documenteditor'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [DocumentEditorContainerModule], + providers: [ToolbarService], + template: ` + + + + + + + + ` +}) +export class App { + + @ViewChild('container') + public container!: DocumentEditorContainerComponent; + + onCreated(): void { + // Example: initially hide revisions pane + this.container.documentEditor.showRevisions = false; + } + + showRevisions(): void { + this.container.documentEditor.showRevisions = true; + } + + hideRevisions(): void { + this.container.documentEditor.showRevisions = false; + } +} + +{% endhighlight %} +{% endtabs %} + +N> The hosted Web API URL is for demo and evaluation purposes only. For production, host your own web service using the [GitHub Web Service example](https://github.com/SyncfusionExamples/EJ2-Document-Editor-Web-Services) or the [Docker image](https://hub.docker.com/r/syncfusion/word-processor-server). ## Get all tracked revisions -The following example demonstrate how to get all tracked revision from current document. +Retrieves all tracked revisions from the current document using the revisions collection in the Document Editor. + +The following example demonstrates how to get all tracked revisions from the current document. + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + + + -```typescript /** * Get revisions from the current document */ -let revisions : RevisionCollection = this.documentEditor.revisions; -``` +const revisions = this.container.documentEditor.revisions; + +{% endhighlight %} +{% endtabs %} + +## Accept or reject all changes + +Handles all tracked changes in the document at once, either by accepting or rejecting them. This helps quickly finalize or discard edits without reviewing each change individually. -## Accept or Reject all changes programmatically +The following example demonstrates how to accept or reject all changes. -The following example demonstrates how to accept/reject all changes. +{% tabs %} +{% highlight ts tabtitle="app.ts" %} + + + -```typescript /** * Get revisions from the current document */ -let revisions : RevisionCollection = this.documentEditor.revisions; - +const revisions = this.container.documentEditor.revisions; /** * Accept all tracked changes */ revisions.acceptAll(); - /** * Reject all tracked changes */ revisions.rejectAll(); -``` + +{% endhighlight %} +{% endtabs %} ## Accept or reject a specific revision -The following example demonstrates how to accept/reject specific revision in the Document Editor. +Applies changes to a specific tracked revision in the document, allowing precise control to accept or reject individual edits. + +The following example demonstrates how to accept or reject a specific revision in the Document Editor. + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} -```typescript /** * Get revisions from the current document */ -let revisions : RevisionCollection = this.documentEditor.revisions; +const revisions = this.container.documentEditor.revisions; /** * Accept specific changes */ @@ -81,158 +211,131 @@ revisions.get(0).accept(); * Reject specific changes */ revisions.get(1).reject(); -``` + +{% endhighlight %} +{% endtabs %} ## Navigate between the tracked changes -The following example demonstrates how to navigate tracked revision programmatically. +Navigates through tracked changes in the document programmatically, enabling easy movement to the next or previous revision from the current selection. + +The following example demonstrates how to navigate through tracked revisions programmatically. + +{% tabs %} +{% highlight ts tabtitle="app.ts" %} -```typescript /** * Navigate to next tracked change from the current selection. */ -this.documentEditor.selection.navigateNextRevision(); - +this.container.documentEditor.selection.navigateNextRevision(); /** * Navigate to previous tracked change from the current selection. */ -this.documentEditor.selection.navigatePreviousRevision(); -``` - -## Filtering changes based on user +this.container.documentEditor.selection.navigatePreviousRevision(); -In DocumentEditor, we have built-in review panel in which we have provided support for filtering changes based on the user. - -![Track changes](images/tracked-changes.png) +{% endhighlight %} +{% endtabs %} ## Custom metadata along with author -The Document Editor provides options to customize revisions using [`revisionSettings`](https://ej2.syncfusion.com/angular/documentation/api/document-editor/documenteditorsettingsmodel#revisionsettings). The [`customData`](https://ej2.syncfusion.com/angular/documentation/api/document-editor/revisionsettings#customdata) property allows you to attach additional metadata to tracked revisions in the Word Processor. This metadata can represent roles, tags, or any custom identifier for the revision. To display this metadata along with the author name in the Track Changes pane, you must enable the [`showCustomDataWithAuthor`](https://ej2.syncfusion.com/angular/documentation/api/document-editor/revisionsettings#showcustomdatawithauthor) property. +The Document Editor allows customizing revisions using [revisionSettings](https://ej2.syncfusion.com/angular/documentation/api/document-editor/documenteditorsettingsmodel#revisionsettings). The [customData](https://ej2.syncfusion.com/angular/documentation/api/document-editor/revisionsettings#customdata) property allows attaching additional metadata to tracked revisions. This metadata can represent roles, tags, or any custom identifier for a revision. To display this metadata along with the author name in the Track Changes pane, the [showCustomDataWithAuthor](https://ej2.syncfusion.com/angular/documentation/api/document-editor/revisionsettings#showcustomdatawithauthor) property must be enabled. + +The following example illustrates how to enable and update custom metadata for track changes revisions. -The following example code illustrates how to enable and update custom metadata for track changes revisions. +{% tabs %} +{% highlight ts tabtitle="app.ts" %} -```ts -import { Component, OnInit, ViewChild } from '@angular/core'; +import { Component, ViewChild } from '@angular/core'; import { - ToolbarService, DocumentEditorContainerComponent, + DocumentEditorContainerModule, + ToolbarService } from '@syncfusion/ej2-angular-documenteditor'; -import { DocumentEditorContainerModule } from '@syncfusion/ej2-angular-documenteditor'; + @Component({ - selector: 'app-container', + selector: 'app-root', standalone: true, imports: [DocumentEditorContainerModule], providers: [ToolbarService], - template: ` + template: ` + + - `, + ` }) -export class AppComponent implements OnInit { - @ViewChild('documenteditor_default') - public container?: DocumentEditorContainerComponent; - public Settings = { +export class App { + + @ViewChild('container') + public container!: DocumentEditorContainerComponent; + + public settings = { revisionSettings: { customData: 'Developer', - showCustomDataWithAuthor: true, - }}; - ngOnInit(): void {} + showCustomDataWithAuthor: true + } + }; } -``` -The Track Changes pane will display the author name along with the custom metadata, as shown in the screenshot below. -![Custom metadata along with author](images/track-changes-customData.png) +{% endhighlight %} +{% endtabs %} ->Note: -* When you export the document as SFDT, the customData value is stored in the revision collection. When you reopen the SFDT, the custom data is automatically restored and displayed in the Track Changes pane. -* Other than SFDT export (e.g. DOCX and other), the customData is not preserved, as it is specific to the Document Editor component. - -## Protect the document in track changes only mode - -Document Editor provides support for protecting the document with `RevisionsOnly` protection. In this protection, all the users are allowed to view the document and do their corrections, but they cannot accept or reject any tracked changes in the document. Later, the author can view their corrections and accept or reject the changes. - -Document editor provides an option to protect and unprotect document using [`enforceProtection`](https://ej2.syncfusion.com/angular/documentation/api/document-editor/editor#enforceprotection) and [`stopProtection`](https://ej2.syncfusion.com/angular/documentation/api/document-editor/editor#stopprotection) API. - -The following example code illustrates how to enforce and stop protection in Document editor container. - -```typescript -import { Component, ViewEncapsulation, ViewChild } from '@angular/core'; -import { DocumentEditorContainerComponent, ToolbarService } from '@syncfusion/ej2-angular-documenteditor'; - -@Component({ - selector: 'app-container', - // specifies the template string for the Document Editor component - template: `
    - -
    `, - encapsulation: ViewEncapsulation.None, - providers: [ToolbarService] -}) -export class AppComponent { - @ViewChild('document_editor') - public container: DocumentEditorContainerComponent; - - public protectDocument(): void { - //enforce protection - container.documentEditor.editor.enforceProtection('123', 'RevisionsOnly'); - } - - public unProtectDocument(): void { - //stop the document protection - container.documentEditor.editor.stopProtection('123'); - } -} -``` +The Track Changes pane will display the author name along with the custom metadata, as shown in the screenshot below. -> The Web API hosted link `https://document.syncfusion.com/web-services/docx-editor/api/documenteditor/` utilized in the Document Editor's serviceUrl property is intended solely for demonstration and evaluation purposes. For production deployment, please host your own web service with your required server configurations. You can refer and reuse the [GitHub Web Service example](https://github.com/SyncfusionExamples/EJ2-DocumentEditor-WebServices) or [Docker image](https://hub.docker.com/r/syncfusion/word-processor-server) for hosting your own web service and use for the serviceUrl property. +![Custom metadata along with author in track changes pane](./images/custom-metadata-author-trackchanges.png) -Tracked changes only protection can be enabled in UI by using [Restrict Editing pane](./document-management#restrict-editing-pane) +N> When the document is exported as SFDT, the customData value is stored in the revision collection. Upon reopening the SFDT, the custom data is automatically restored and displayed in the Track Changes pane.In formats other than SFDT (such as DOCX and others), the customData is not preserved, as it is specific to the Document Editor component -![Enable track changes only protection](images/tracked-changes.png) +## Restrict accept or reject by author ->Note: In enforce Protection method, first parameter denotes password and second parameter denotes protection type. Possible values of protection type are `NoProtection |ReadOnly |FormFieldsOnly |CommentsOnly |RevisionsOnly`. In stop protection method, parameter denotes the password. +Accepting or rejecting changes can be restricted based on the author’s name. -## Event +The following example demonstrates how to restrict an author from accept or reject changes. -You can restrict the accept and reject changes based on the author name. The following example demonstrates how to restrict an author from accept/reject changes. +{% tabs %} +{% highlight ts tabtitle="app.ts" %} -```typescript -import { Component, OnInit, ViewChild } from '@angular/core'; +import { Component, ViewChild } from '@angular/core'; import { - ToolbarService, DocumentEditorContainerComponent, -} from '@syncfusion/ej2-angular-documenteditor'; -import { ClickEventArgs } from '@syncfusion/ej2-navigations'; -import { - CustomToolbarItemModel, DocumentEditorContainerModule, + ToolbarService } from '@syncfusion/ej2-angular-documenteditor'; @Component({ - selector: 'app-container', + selector: 'app-root', standalone: true, imports: [DocumentEditorContainerModule], providers: [ToolbarService], template: ` - - - `, +
    + + + +
    + ` }) -export class AppComponent implements OnInit { - @ViewChild('documenteditor_default') - public container?: DocumentEditorContainerComponent; +export class App { + + @ViewChild('container') + public container!: DocumentEditorContainerComponent; - ngOnInit(): void {} - beforeAcceptRejectChanges(args: { author: string; cancel: boolean }) { + // Event gets triggered before accepting/rejecting changes + beforeAcceptRejectChanges(args: any): void { // Check the author of the revision if (args.author !== 'Hary') { // Cancel the accept/reject action @@ -240,8 +343,22 @@ export class AppComponent implements OnInit { } } } -``` + +{% endhighlight %} +{% endtabs %} + +## Filter Changes by User + +In the Document Editor, a built-in review panel is available that supports filtering changes based on the user. + +![Filter changes by user in review panel](./images/filter-changes-by-user.png) ## Online Demo -Explore how to track and review changes in Word documents using the Angular Document Editor in this live demo [here](https://document.syncfusion.com/demos/docx-editor/angular/#/tailwind3/document-editor/track-changes). \ No newline at end of file +Explore how to track and review changes in Word documents using the Angular Document Editor in this live demo [here](https://document.syncfusion.com/demos/docx-editor/angular/#/tailwind3/document-editor/track-changes). + +## Video tutorial + +To learn more about Track Changes in the Document Editor component, refer to the video below. + +{% youtube "https://www.youtube.com/watch?v=Ke27Mip4bN0" %} \ No newline at end of file diff --git a/Document-Processing/Word/Word-Processor/angular/web-services/core.md b/Document-Processing/Word/Word-Processor/angular/web-services/core.md index b7597be627..e491339baa 100644 --- a/Document-Processing/Word/Word-Processor/angular/web-services/core.md +++ b/Document-Processing/Word/Word-Processor/angular/web-services/core.md @@ -225,134 +225,178 @@ The following example code illustrates how to write a Web API for restrict editi [HttpPost] [EnableCors("AllowAllOrigins")] [Route("RestrictEditing")] - public string[] RestrictEditing([FromBody]CustomRestrictParameter param) + public string[] RestrictEditing([FromBody] CustomRestrictParameter param) { - if (param.passwordBase64 == "" && param.passwordBase64 == null) + if (param.passwordBase64 == "" || param.passwordBase64 == null) return null; - return WordDocument.ComputeHash(param.passwordBase64, param.saltBase64, param.spinCount); + return WordDocument.ComputeHash(param.passwordBase64, param.saltBase64, param.spinCount, param.algorithmSid); } - public class CustomRestrictParameter { public string passwordBase64 { get; set; } public string saltBase64 { get; set; } public int spinCount { get; set; } + public string algorithmSid { get; set; } } ``` ## Spell Check -Document Editor supports performing spell checking for any input text. You can perform spell checking for the text in Document Editor and it will provide suggestions for the mis-spelled words through dialog and in context menu. Document editor client-side script requires this Web API to show error words and list suggestions in context menu. This Web API returns the json type of spell-checked word which contains details about error words if any and suggestions. +Document Editor supports spell checking for input text. It identifies misspelled words and provides suggestions through a dialog and the context menu. The Document Editor client-side script requires this Web API to display error words and suggestions. This Web API returns a JSON response containing details about misspelled words and their suggestions. -To know more about configure spell check, please check this [link](https://github.com/SyncfusionExamples/EJ2-DocumentEditor-WebServices). +### Dictionary setup -In startup.cs file, you can configure the spell check files like below: +The Document Editor performs spell checking using [Hunspell dictionary files](https://github.com/wooorm/dictionaries). These dictionaries can be obtained from their respective sources. -```csharp - public Startup(IConfiguration configuration, IHostingEnvironment env) +To set up spell checking, place the required dictionary files, including the .dic, .aff, and JSON configuration file, inside the `App_Data` folder in your project. To support a personal dictionary, place an empty .dic file in the same `App_Data` folder. + +Refer to the following screenshot for the folder structure. + +![Dictionary setup in Angular DOCX Editor](../images/spellcheck-dictionary-setup.png) + +The JSON file should contain the configuration details in the following format: + +{% tabs %} +{% highlight C# tabtitle="C#" %} + +[ + { + "LanguadeID": 1033, + "DictionaryPath": "en_US.dic", + "AffixPath": "en_US.aff", + "PersonalDictPath": "customDict.dic" + } +] + +{% endhighlight %} +{% endtabs %} + +### Configure spell check service + +- Add the [Syncfusion.EJ2.SpellChecker.AspNet.Core](https://www.nuget.org/packages/Syncfusion.EJ2.SpellChecker.AspNet.Core/) NuGet package to your project. + +- In the `Startup.cs` file, configure the spell check files as shown below: + +{% tabs %} +{% highlight C# tabtitle="C#" %} + +public Startup(IConfiguration configuration, IWebHostEnvironment env) +{ + var builder = new ConfigurationBuilder() + .SetBasePath(env.ContentRootPath) + .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) + .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) + .AddEnvironmentVariables(); + + Configuration = builder.Build(); + + path = Configuration["SPELLCHECK_DICTIONARY_PATH"]; + string jsonFileName = Configuration["SPELLCHECK_JSON_FILENAME"]; + //check the spell check dictionary path environment variable value and assign default data folder + //if it is null. + path = string.IsNullOrEmpty(path) ? Path.Combine(env.ContentRootPath, "App_Data") : Path.Combine(env.ContentRootPath, path); + //Set the default spellcheck.json file if the json filename is empty. + jsonFileName = string.IsNullOrEmpty(jsonFileName) ? Path.Combine(path, "spellcheck.json") : Path.Combine(path, jsonFileName); + if (File.Exists(jsonFileName)) { - var builder = new ConfigurationBuilder() - .SetBasePath(env.ContentRootPath) - .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) - .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) - .AddEnvironmentVariables(); - - Configuration = builder.Build(); - _contentRootPath = env.ContentRootPath; - - path = Configuration["SPELLCHECK_DICTIONARY_PATH"]; - string jsonFileName = Configuration["SPELLCHECK_JSON_FILENAME"]; - //check the spell check dictionary path environment variable value and assign default data folder - //if it is null. - path = string.IsNullOrEmpty(path) ? Path.Combine(env.ContentRootPath, "App_Data") : Path.Combine(env.ContentRootPath, path); - //Set the default spellcheck.json file if the json filename is empty. - jsonFileName = string.IsNullOrEmpty(jsonFileName) ? Path.Combine(path, "spellcheck.json") : Path.Combine(path, jsonFileName); - if (System.IO.File.Exists(jsonFileName)) + string jsonImport = File.ReadAllText(jsonFileName); + List spellChecks = JsonConvert.DeserializeObject>(jsonImport); + List spellDictCollection = new List(); + string personalDictPath = null; + //construct the dictionary file path using customer provided path and dictionary name + if (spellChecks != null) { - string jsonImport = System.IO.File.ReadAllText(jsonFileName); - List spellChecks = JsonConvert.DeserializeObject>(jsonImport); - spellDictCollection = new List(); - //construct the dictionary file path using customer provided path and dictionary name foreach (var spellCheck in spellChecks) { spellDictCollection.Add(new DictionaryData(spellCheck.LanguadeID, Path.Combine(path, spellCheck.DictionaryPath), Path.Combine(path, spellCheck.AffixPath))); personalDictPath = Path.Combine(path, spellCheck.PersonalDictPath); } } + SpellChecker.InitializeDictionaries(spellDictCollection, personalDictPath, 3); } -``` +} -Document editor provides options to spell check word by word and spellcheck page by page when loading the documents. +{% endhighlight %} +{% endtabs %} -### Spell check word by word +### Web API for word-by-word spell check -This Web API performs the spell check word by word and return the json which contains information about error words and suggestions if any. By default, spell check word by word is performed in Document editor when enabling spell check in client-side. +This Web API performs spell checking word by word and returns a JSON response containing information about error words and suggestions, if any. By default, word-by-word spell checking is performed in the Document Editor when spell check is enabled on the client side. -The following example code illustrates how to write a Web API for spell check word by word. +The following example code illustrates how to write a Web API for word-by-word spell checking. -```csharp - [AcceptVerbs("Post")] - [HttpPost] - [EnableCors("AllowAllOrigins")] - [Route("SpellCheck")] - public string SpellCheck([FromBody] SpellCheckJsonData spellChecker) - { - try - { - SpellChecker spellCheck = new SpellChecker(spellDictionary, personalDictPath); - spellCheck.GetSuggestions(spellChecker.LanguageID, spellChecker.TexttoCheck, spellChecker.CheckSpelling, spellChecker.CheckSuggestion, spellChecker.AddWord); - return Newtonsoft.Json.JsonConvert.SerializeObject(spellCheck); - } - catch - { - return "{\"SpellCollection\":[],\"HasSpellingError\":false,\"Suggestions\":null}"; - } - } +{% tabs %} +{% highlight C# tabtitle="C#" %} - public class SpellCheckJsonData +[AcceptVerbs("Post")] +[HttpPost] +[EnableCors("AllowAllOrigins")] +[Route("SpellCheck")] +public string SpellCheck([FromBody] SpellCheckJsonData spellChecker) +{ + try { - public int LanguageID { get; set; } - public string TexttoCheck { get; set; } - public bool CheckSpelling { get; set; } - public bool CheckSuggestion { get; set; } - public bool AddWord { get; set; } + SpellChecker spellCheck = new SpellChecker(); + spellCheck.GetSuggestions(spellChecker.LanguageID, spellChecker.TexttoCheck, spellChecker.CheckSpelling, spellChecker.CheckSuggestion, spellChecker.AddWord); + return Newtonsoft.Json.JsonConvert.SerializeObject(spellCheck); } -``` - -### Spell check page by page - -This Web API performs the spell check page by page and return the json which contains information about error words and suggestions if any. By [enabling optimized spell check](../spell-check#enableoptimizedspellcheck) in client-side, you can perform spellcheck page by page when loading the documents. - -The following example code illustrates how to write a Web API for spell check page by page. - -```csharp - [AcceptVerbs("Post")] - [HttpPost] - [EnableCors("AllowAllOrigins")] - [Route("SpellCheckByPage")] - public string SpellCheckByPage([FromBody] SpellCheckJsonData spellChecker) + catch { + return "{\"SpellCollection\":[],\"HasSpellingError\":false,\"Suggestions\":null}"; + } +} +public class SpellCheckJsonData +{ + public int LanguageID { get; set; } + public string TexttoCheck { get; set; } + public bool CheckSpelling { get; set; } + public bool CheckSuggestion { get; set; } + public bool AddWord { get; set; } +} + +{% endhighlight %} +{% endtabs %} + +### Web API for page-by-page spell check + +This Web API performs spell checking page by page and returns a JSON response containing information about error words and suggestions, if any. By [enabling optimized spell check](https://help.syncfusion.com/document-processing/word/word-processor/angular/spell-check#optimized-spell-check) on the client side, you can perform page-by-page spell checking when loading documents. + +The following example code illustrates how to write a Web API for page-by-page spell checking. + +{% tabs %} +{% highlight C# tabtitle="C#" %} + +[AcceptVerbs("Post")] +[HttpPost] +[EnableCors("AllowAllOrigins")] +[Route("SpellCheckByPage")] +public string SpellCheckByPage([FromBody] SpellCheckJsonData spellChecker) +{ try - { - SpellChecker spellCheck = new SpellChecker(spellDictionary, personalDictPath); - spellCheck.CheckSpelling(spellChecker.LanguageID, spellChecker.TexttoCheck); - return Newtonsoft.Json.JsonConvert.SerializeObject(spellCheck); - } - catch - { - return "{\"SpellCollection\":[],\"HasSpellingError\":false,\"Suggestions\":null}"; - } + { + SpellChecker spellCheck = new SpellChecker(); + spellCheck.CheckSpelling(spellChecker.LanguageID, spellChecker.TexttoCheck); + return Newtonsoft.Json.JsonConvert.SerializeObject(spellCheck); } - - public class SpellCheckJsonData + catch { - public int LanguageID { get; set; } - public string TexttoCheck { get; set; } - public bool CheckSpelling { get; set; } - public bool CheckSuggestion { get; set; } - public bool AddWord { get; set; } + return "{\"SpellCollection\":[],\"HasSpellingError\":false,\"Suggestions\":null}"; } -``` +} + +public class SpellCheckJsonData +{ + public int LanguageID { get; set; } + public string TexttoCheck { get; set; } + public bool CheckSpelling { get; set; } + public bool CheckSuggestion { get; set; } + public bool AddWord { get; set; } +} + +{% endhighlight %} +{% endtabs %} + +>N You can find the [GitHub Web Service example](https://github.com/SyncfusionExamples/EJ2-DocumentEditor-WebServices) then configure the dictionary set up to make use for spell check or use the [Docker image](https://hub.docker.com/r/syncfusion/word-processor-server) to host your own web service. ## Save as file formats other than SFDT and DOCX From 1660ac15158516400b0766fab1531ee5199b2e39 Mon Sep 17 00:00:00 2001 From: Sujitha Siva Date: Mon, 29 Jun 2026 23:26:48 +0530 Subject: [PATCH 2/2] Resolved spelling error --- .../Word/Word-Processor/angular/web-services/core.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Document-Processing/Word/Word-Processor/angular/web-services/core.md b/Document-Processing/Word/Word-Processor/angular/web-services/core.md index e491339baa..4d9d712644 100644 --- a/Document-Processing/Word/Word-Processor/angular/web-services/core.md +++ b/Document-Processing/Word/Word-Processor/angular/web-services/core.md @@ -56,7 +56,7 @@ The following example code illustrates how to write a Web API for importing Word The web browsers do not support to display metafile images like EMF and WMF and also TIFF format images. As a fallback approach, you can convert the metafile/TIFF format image to raster image using any image converter in the `MetafileImageParsed` event and this fallback raster image will be displayed in the client-side Document editor component. ->Note: In `MetafileImageParsedEventArgs` event argument, you can get the metafile stream using `MetafileStream` property and you can get the `IsMetafile` boolean value to determine whether the image is meta file images(WMF,EMF) or Tiff format images. In below example, we have converted the TIFF to raster image in `ConvertTiffToRasterImage()` method using `Bitmiracle https://www.nuget.org/packages/BitMiracle.LibTiff.NET`. +>Note: In `MetafileImageParsedEventArgs` event argument, you can get the metafile stream using `MetafileStream` property and you can get the `IsMetafile` boolean value to determine whether the image is meta file images(WMF,EMF) or TIFF format images. In below example, we have converted the TIFF to raster image in `ConvertTiffToRasterImage()` method using `Bitmiracle https://www.nuget.org/packages/BitMiracle.LibTiff.NET`. The following example code illustrates how to use `MetafileImageParsed` event for creating fallback raster image for metafile present in a Word document.