Skip to content

Commit 6a5ca6d

Browse files
Merge branch 'development' into EJ2-1011961-ug
2 parents d3b4c44 + 1844ec5 commit 6a5ca6d

76 files changed

Lines changed: 3584 additions & 2200 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Document-Processing-toc.html

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,6 +1059,9 @@
10591059
<li><a href="/document-processing/pdf/pdf-viewer/react/how-to/custom-fonts">Custom fonts</a></li>
10601060
<li><a href="/document-processing/pdf/pdf-viewer/react/forms/form-field-events">Form Field events</a></li>
10611061
<li><a href="/document-processing/pdf/pdf-viewer/react/forms/form-fields-api">APIs</a></li>
1062+
<li><a href="/document-processing/pdf/pdf-viewer/react/forms/flatten-form-fields">Flatten form fields</a></li>
1063+
<li><a href="/document-processing/pdf/pdf-viewer/react/forms/read-form-field-values">Read form fields</a></li>
1064+
<li><a href="/document-processing/pdf/pdf-viewer/react/forms/submit-form-data">Submit form data</a></li>
10621065
</ul>
10631066
</li>
10641067
<li><a href="/document-processing/pdf/pdf-viewer/react/organize-pages/overview">Organize Pages</a>
@@ -1899,15 +1902,33 @@
18991902
<li>
19001903
UI
19011904
<ul>
1902-
<li><a href="/document-processing/pdf/pdf-viewer/maui/Toolbar">Toolbar</a></li>
1905+
<li>
1906+
<a href="/document-processing/pdf/pdf-viewer/maui/Toolbar">Toolbar</a>
1907+
<ul>
1908+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Toolbar">Overview</a></li>
1909+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Toolbar-Customization">Customize Toolbar</a></li>
1910+
</ul>
1911+
</li>
19031912
<li><a href="/document-processing/pdf/pdf-viewer/maui/UI-Customization">Customization</a></li>
19041913
</ul>
19051914
</li>
19061915
<li><a href="/document-processing/pdf/pdf-viewer/maui/Magnification">Magnification</a></li>
19071916
<li><a href="/document-processing/pdf/pdf-viewer/maui/Text-Search">Text Search</a></li>
19081917
<li><a href="/document-processing/pdf/pdf-viewer/maui/Text-Selection">Text Selection</a></li>
19091918
<li><a href="/document-processing/pdf/pdf-viewer/maui/Redaction">Redaction</a></li>
1910-
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling">Form Filling</a></li>
1919+
<li>
1920+
<a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Overview">Form Filling</a>
1921+
<ul>
1922+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Overview">Overview</a></li>
1923+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Edit">Edit Form Fields</a></li>
1924+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Collection">Form Field Collection</a></li>
1925+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Customization">Customize Form Fields</a></li>
1926+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Show-Hide">Show and Hide Form Fields</a></li>
1927+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Validation">Form Field Validation</a></li>
1928+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Events">Form Field Events</a></li>
1929+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Import-Export">Import and Export Form Data</a></li>
1930+
</ul>
1931+
</li>
19111932
<li>
19121933
<a href="/document-processing/pdf/pdf-viewer/maui/Annotations-Overview">Annotations</a>
19131934
<ul>
@@ -3122,6 +3143,34 @@
31223143
</li>
31233144
</ul>
31243145
</li>
3146+
<li>
3147+
<li>SmartDataExtractor
3148+
<ul>
3149+
<li>
3150+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/overview">SmartFormRecognizer</a>
3151+
<li> NET
3152+
<ul>
3153+
<li>
3154+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/smart-form-recognizer">OverView</a>
3155+
</li>
3156+
<li>
3157+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/assemblies-required">Assemblies Required</a>
3158+
</li>
3159+
<li>
3160+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/nuGet-packages-required">NuGet Packages Required</a>
3161+
</li>
3162+
<li>
3163+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/working-with-recognize-option">Working With Recognize Options</a>
3164+
</li>
3165+
<li>
3166+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/recognize-forms">Recognize Forms</a>
3167+
</li>
3168+
</ul>
3169+
</li>
3170+
</li>
3171+
</ul>
3172+
</li>
3173+
</li>
31253174
<li>
31263175
<a href="/document-processing/word/overview">Word</a>
31273176
<ul>

Document-Processing/PDF/PDF-Library/javascript/DigitalSignature.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,69 @@ ldocument.destroy();
521521
{% endhighlight %}
522522
{% endtabs %}
523523

524+
## Adding a timestamp in digital signature
525+
526+
This example shows how to apply a digital signature with a trusted timestamp, ensuring the signature remains valid even after the certificate expires. A timestamp callback contacts a Time Stamping Authority (TSA) to add an official time record to the signature. This provides long‑term proof of when the document was signed.
527+
528+
{% tabs %}
529+
{% highlight typescript tabtitle="TypeScript" %}
530+
531+
import { PdfDocument, PdfPage, PdfForm, PdfSignatureField, PdfSignature, CryptographicStandard, DigestAlgorithm } from '@syncfusion/ej2-pdf';
532+
533+
// Load the document
534+
let document: PdfDocument = new PdfDocument(data);
535+
// Gets the first page of the document
536+
let page: PdfPage = document.getPage(0);
537+
// Access the PDF form
538+
let form: PdfForm = document.form;
539+
// Create a new signature field
540+
let field: PdfSignatureField = new PdfSignatureField(page, 'Signature', {x: 10, y: 10, width: 100, height: 50});
541+
// Create a timestamp callback
542+
async function timestampCallback(request: Uint8Array): Promise<{ response: Uint8Array }> {
543+
// Implement timestamp response logic here
544+
return { response: new Uint8Array() }; // Placeholder return
545+
}
546+
// Create a new signature using PFX data, private key and call back function for timestamp
547+
const signature: PdfSignature = PdfSignature.create(certData, password, { cryptographicStandard: CryptographicStandard.cms, digestAlgorithm: DigestAlgorithm.sha256 }, timestampCallback);
548+
// Sets the signature to the field
549+
field.setSignature(signature);
550+
// Add the field into PDF form
551+
form.add(field);
552+
// Save the document
553+
await document.saveAsync('output.pdf');
554+
// Destroy the document
555+
document.destroy();
556+
557+
{% endhighlight %}
558+
{% highlight javascript tabtitle="JavaScript" %}
559+
560+
// Load the document
561+
var document = new ej.pdf.PdfDocument(data);
562+
// Gets the first page of the document
563+
var page = document.getPage(0);
564+
// Access the PDF form
565+
var form = document.form;
566+
// Create a new signature field
567+
var field = new ej.pdf.PdfSignatureField(page, 'Signature', {x: 10, y: 10, width: 100, height: 50});
568+
// Create a timestamp callback
569+
async function timestampCallback(request) {
570+
// Implement timestamp response logic here
571+
return { response: new Uint8Array() }; // Placeholder return
572+
}
573+
// Create a new signature using PFX data, private key and call back function for timestamp
574+
const signature = PdfSignature.create(certData, password, { cryptographicStandard: ej.pdf.CryptographicStandard.cms, digestAlgorithm: ej.pdf.DigestAlgorithm.sha256 }, timestampCallback);
575+
// Sets the signature to the field
576+
field.setSignature(signature);
577+
// Add the field into PDF form
578+
form.add(field);
579+
// Save the document
580+
await document.saveAsync('output.pdf');
581+
// Destroy the document
582+
document.destroy();
583+
584+
{% endhighlight %}
585+
{% endtabs %}
586+
524587
## Drawing text/image in the Signature Appearance
525588

526589
This example demonstrates how to create a visible signature field, apply a CMS (SHA-256) digital signature with signer information, customize the signature appearance using a base64-encoded image, and save the signed PDF document.

Document-Processing/PDF/PDF-Library/javascript/Redaction.md

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Redaction permanently removes confidential or sensitive information from a PDF.
1818
{% tabs %}
1919
{% highlight typescript tabtitle="TypeScript" %}
2020
import { PdfDocument } from '@syncfusion/ej2-pdf';
21-
import { PdfRedactor, PdfRedactionRegion } from '@syncfusion/ej2-pdf-data-extract';
21+
import { PdfRedactor, PdfRedactionRegion, ApplicationPlatform } from '@syncfusion/ej2-pdf-data-extract';
2222

2323
// Load the document
2424
let document: PdfDocument = new PdfDocument(data);
@@ -28,15 +28,21 @@ let redactor: PdfRedactor = new PdfRedactor(document);
2828
let redactions: PdfRedactionRegion[] = [];
2929
redactions.push(new PdfRedactionRegion(0, {x: 10, y: 10, width: 100, height: 50}));
3030
redactor.add(redactions);
31+
// Define a canvas render callback that returns a canvas element and the application platform.
32+
const canvasRenderCallback = (): {canvas: any, applicationPlatform: ApplicationPlatform} => {
33+
const canvas = document.createElement('canvas');
34+
return { canvas: canvas, applicationPlatform: ApplicationPlatform.typescript };
35+
};
3136
// Apply redactions on the PDF document
32-
redactor.redact();
37+
await redactor.redact(callBack: canvasRenderCallback);
3338
// Save the document
3439
document.save('output.pdf');
3540
// Destroy the document
3641
document.destroy();
3742

3843
{% endhighlight %}
3944
{% highlight javascript tabtitle="JavaScript" %}
45+
4046
// Load the document
4147
var document = new ej.pdf.PdfDocument(data);
4248
// Create a new text extractor
@@ -45,23 +51,30 @@ var redactor = new ej.pdfdataextract.PdfRedactor(document);
4551
var redactions = [];
4652
redactions.push(new PdfRedactionRegion(0, {x: 10, y: 10, width: 100, height: 50}));
4753
redactor.add(redactions);
54+
// Define a canvas render callback that returns a canvas element and the application platform.
55+
const canvasRenderCallback = (): {canvas, applicationPlatform} => {
56+
const canvas = document.createElement('canvas');
57+
return { canvas: canvas, applicationPlatform: ej.pdf.ApplicationPlatform.typescript };
58+
};
4859
// Apply redactions on the PDF document
49-
redactor.redact();
60+
await redactor.redact(canvasRenderCallback);
5061
// Save the document
5162
document.save('output.pdf');
5263
// Destroy the document
5364
document.destroy();
5465
{% endhighlight %}
5566
{% endtabs %}
5667

68+
N> Use PdfRedactor.redact(callback) when you need to redact images along with other PDF content. In contrast, PdfRedactor.redactSync() is faster because it runs synchronously, but it cannot redact images—only text and other non‑image elements.
69+
5770
## Fill color on the redacted area
5871

5972
You can apply a solid fill color to cover the redacted content. This is the most common approach for redaction.
6073

6174
{% tabs %}
6275
{% highlight typescript tabtitle="TypeScript" %}
6376
import { PdfDocument } from '@syncfusion/ej2-pdf';
64-
import { PdfRedactor, PdfRedactionRegion} from '@syncfusion/ej2-pdf-data-extract';
77+
import { PdfRedactor, PdfRedactionRegion, ApplicationPlatform } from '@syncfusion/ej2-pdf-data-extract';
6578

6679
// Load an existing PDF document
6780
let document: PdfDocument = new PdfDocument(data);
@@ -76,14 +89,21 @@ redaction.fillColor = {r: 255, g: 0, b: 0};
7689
redactions.push(redaction);
7790
// Add redactions with specified options.
7891
redactor.add(redactions);
92+
// Define a canvas render callback that returns a canvas element and the application platform.
93+
const canvasRenderCallback = (): {canvas: any, applicationPlatform: ApplicationPlatform} => {
94+
const canvas = document.createElement('canvas');
95+
return { canvas: canvas, applicationPlatform: ApplicationPlatform.typescript };
96+
};
7997
// Apply redactions on the PDF document
80-
redactor.redact();
98+
await redactor.redact(callBack: canvasRenderCallback);
8199
// Save the document
82100
document.save('output.pdf');
83101
// Destroy the document
84102
document.destroy();
103+
85104
{% endhighlight %}
86105
{% highlight javascript tabtitle="JavaScript" %}
106+
87107
// Load an existing PDF document
88108
var document = new ej.pdf.PdfDocument(data);
89109
// Add redactions to the collection
@@ -97,8 +117,13 @@ redaction.fillColor = {r: 255, g: 0, b: 0};
97117
redactions.push(redaction);
98118
// Add redactions with specified options.
99119
redactor.add(redactions);
120+
// Define a canvas render callback that returns a canvas element and the application platform.
121+
const canvasRenderCallback = (): {canvas, applicationPlatform} => {
122+
const canvas = document.createElement('canvas');
123+
return { canvas: canvas, applicationPlatform: ej.pdf.ApplicationPlatform.typescript };
124+
};
100125
// Apply redactions on the PDF document
101-
redactor.redact();
126+
await redactor.redact(canvasRenderCallback);
102127
// Save the document
103128
document.save('output.pdf');
104129
// Destroy the document
@@ -113,7 +138,7 @@ Customize the redacted region by drawing text or graphics over it, using `PdfRed
113138
{% tabs %}
114139
{% highlight typescript tabtitle="TypeScript" %}
115140
import { PdfDocument } from '@syncfusion/ej2-pdf';
116-
import { PdfRedactor, PdfRedactionRegion } from '@syncfusion/ej2-pdf-data-extract';
141+
import { PdfRedactor, PdfRedactionRegion, ApplicationPlatform } from '@syncfusion/ej2-pdf-data-extract';
117142

118143
// Load an existing PDF document
119144
let document = new PdfDocument(data);
@@ -136,8 +161,13 @@ redactions.push(redaction);
136161
let redactor = new PdfRedactor(document);
137162
// Add redactions with specified options
138163
redactor.add(redactions);
164+
// Define a canvas render callback that returns a canvas element and the application platform.
165+
const canvasRenderCallback = (): {canvas: any, applicationPlatform: ApplicationPlatform} => {
166+
const canvas = document.createElement('canvas');
167+
return { canvas: canvas, applicationPlatform: ApplicationPlatform.typescript };
168+
};
139169
// Apply redactions on the PDF document
140-
redactor.redact();
170+
await redactor.redact(callBack: canvasRenderCallback);
141171
// Save the document
142172
document.save('output.pdf');
143173
// Destroy the document
@@ -166,9 +196,15 @@ redaction = new ej.pdf.PdfRedactionRegion(0, { x: 40, y: 43, width: 80, height:
166196
redactions.push(redaction);
167197
// Initialize redactor
168198
var redactor = new ej.pdf.PdfRedactor(document);
169-
// Add redactions and apply them
199+
// Add redactions with specified options
170200
redactor.add(redactions);
171-
redactor.redact();
201+
// Define a canvas render callback that returns a canvas element and the application platform.
202+
const canvasRenderCallback = (): {canvas, applicationPlatform} => {
203+
const canvas = document.createElement('canvas');
204+
return { canvas: canvas, applicationPlatform: ej.pdf.ApplicationPlatform.typescript };
205+
};
206+
// Apply redactions on the PDF document
207+
await redactor.redact(canvasRenderCallback);
172208
// Save and dispose
173209
document.save('output.pdf');
174210
document.destroy();

Document-Processing/PDF/PDF-Viewer/maui/Add-Remove-Modify-Annotations.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
---
22
layout: post
33
title: Add, Remove, and Edit Annotations in .NET MAUI PDF Viewer | Syncfusion
4-
description: Learn here all about adding, removing and editing annotations in a PDF document using Syncfusion<sup>®</sup> .NET MAUI PDF Viewer (SfPdfViewer) control.
4+
description: Learn how to add, remove, and edit annotations in a PDF document using the Syncfusion<sup>®</sup> .NET MAUI PDF Viewer (SfPdfViewer) control.
55
platform: document-processing
66
control: SfPdfViewer
77
documentation: ug
88
keywords: .net maui pdf viewer, .net maui view pdf, pdf viewer in .net maui, .net maui open pdf, maui pdf viewer, maui pdf view
99
---
1010

11-
# Add, Remove, and Edit Annotations in .NET MAUI PDF Viewer (SfPdfViewer)
11+
# Add, Remove, and Edit Annotations
1212

1313
This section will review the various functions in the [SfPdfViewer](https://help.syncfusion.com/cr/maui/Syncfusion.Maui.PdfViewer.SfPdfViewer.html) for adding, removing, and editing annotations in a PDF document.
1414

@@ -190,3 +190,9 @@ private void OnAnnotationAdded(object sender, AnnotationEventArgs e)
190190

191191
{% endhighlight %}
192192
{% endtabs %}
193+
194+
## See Also
195+
- [Annotations Overview](../annotations-overview)
196+
- [Select and Deselect Annotations](../select-deselect-annotations)
197+
- [Import and Export Annotations](../import-export-annotations)
198+
- [Undo and Redo](../undo-redo)

Document-Processing/PDF/PDF-Viewer/maui/Annotation-Collection.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
layout: post
33
title: Annotation Collection in .NET MAUI PDF Viewer control | Syncfusion
4-
description: Learn here all about annotation collection in Syncfusion<sup>®</sup> .NET MAUI PDF Viewer (SfPdfViewer) control and its uses.
4+
description: Learn how to access and manage the annotation collection in the Syncfusion<sup>®</sup> .NET MAUI PDF Viewer (SfPdfViewer) control.
55
platform: document-processing
66
control: SfPdfViewer
77
documentation: ug
@@ -61,3 +61,8 @@ private void OnAnnotationsLoaded(object? sender, EventArgs e)
6161

6262
{% endhighlight %}
6363
{% endtabs %}
64+
65+
## See Also
66+
- [Add, Remove, and Modify Annotations](../add-remove-modify-annotations)
67+
- [Annotations Overview](../annotations-overview)
68+
- [Select and Deselect Annotations](../select-deselect-annotations)

Document-Processing/PDF/PDF-Viewer/maui/Annotations-Comment.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
layout: post
33
title: Comments in .NET MAUI PDF Viewer | Syncfusion
4-
description: Learn here all about how to add comments or replies to annotations in Syncfusion<sup>®</sup> .NET MAUI PDF Viewer (SfPdfViewer) control.
4+
description: Learn how to add and manage comments or replies on annotations in the Syncfusion<sup>®</sup> .NET MAUI PDF Viewer (SfPdfViewer) control.
55
platform: document-processing
66
control: SfPdfViewer
77
documentation: ug
@@ -92,3 +92,7 @@ Comments and replies can be deleted through the context menu available under the
9292
3. Select Delete from the context menu.
9393

9494
**Note :** Deleting the root comment from the comment panel also deletes the associated annotation.
95+
96+
## See Also
97+
- [Add, Remove, and Modify Annotations](../add-remove-modify-annotations)
98+
- [Annotations Overview](../annotations-overview)

0 commit comments

Comments
 (0)