Skip to content

Commit f09010b

Browse files
Merge branch 'development' into 1012852-localizationReact
2 parents 6e4b4db + 1844ec5 commit f09010b

99 files changed

Lines changed: 4857 additions & 2255 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: 55 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>
@@ -1905,15 +1908,33 @@
19051908
<li>
19061909
UI
19071910
<ul>
1908-
<li><a href="/document-processing/pdf/pdf-viewer/maui/Toolbar">Toolbar</a></li>
1911+
<li>
1912+
<a href="/document-processing/pdf/pdf-viewer/maui/Toolbar">Toolbar</a>
1913+
<ul>
1914+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Toolbar">Overview</a></li>
1915+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Toolbar-Customization">Customize Toolbar</a></li>
1916+
</ul>
1917+
</li>
19091918
<li><a href="/document-processing/pdf/pdf-viewer/maui/UI-Customization">Customization</a></li>
19101919
</ul>
19111920
</li>
19121921
<li><a href="/document-processing/pdf/pdf-viewer/maui/Magnification">Magnification</a></li>
19131922
<li><a href="/document-processing/pdf/pdf-viewer/maui/Text-Search">Text Search</a></li>
19141923
<li><a href="/document-processing/pdf/pdf-viewer/maui/Text-Selection">Text Selection</a></li>
19151924
<li><a href="/document-processing/pdf/pdf-viewer/maui/Redaction">Redaction</a></li>
1916-
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling">Form Filling</a></li>
1925+
<li>
1926+
<a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Overview">Form Filling</a>
1927+
<ul>
1928+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Overview">Overview</a></li>
1929+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Edit">Edit Form Fields</a></li>
1930+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Collection">Form Field Collection</a></li>
1931+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Customization">Customize Form Fields</a></li>
1932+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Show-Hide">Show and Hide Form Fields</a></li>
1933+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Validation">Form Field Validation</a></li>
1934+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Events">Form Field Events</a></li>
1935+
<li><a href="/document-processing/pdf/pdf-viewer/maui/Form-Filling-Import-Export">Import and Export Form Data</a></li>
1936+
</ul>
1937+
</li>
19171938
<li>
19181939
<a href="/document-processing/pdf/pdf-viewer/maui/Annotations-Overview">Annotations</a>
19191940
<ul>
@@ -3128,6 +3149,34 @@
31283149
</li>
31293150
</ul>
31303151
</li>
3152+
<li>
3153+
<li>SmartDataExtractor
3154+
<ul>
3155+
<li>
3156+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/overview">SmartFormRecognizer</a>
3157+
<li> NET
3158+
<ul>
3159+
<li>
3160+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/smart-form-recognizer">OverView</a>
3161+
</li>
3162+
<li>
3163+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/assemblies-required">Assemblies Required</a>
3164+
</li>
3165+
<li>
3166+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/nuGet-packages-required">NuGet Packages Required</a>
3167+
</li>
3168+
<li>
3169+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/working-with-recognize-option">Working With Recognize Options</a>
3170+
</li>
3171+
<li>
3172+
<a href="/document-processing/smartdataextractor/smartformrecognizer/net/recognize-forms">Recognize Forms</a>
3173+
</li>
3174+
</ul>
3175+
</li>
3176+
</li>
3177+
</ul>
3178+
</li>
3179+
</li>
31313180
<li>
31323181
<a href="/document-processing/word/overview">Word</a>
31333182
<ul>
@@ -5337,6 +5386,10 @@
53375386
<li><a href="/document-processing/excel/spreadsheet/react/how-to/create-a-object-structure">Create a object structure </a></li>
53385387
<li><a href="/document-processing/excel/spreadsheet/react/how-to/change-active-sheet">Changing the active sheet while importing a file</a></li>
53395388
<li><a href="/document-processing/excel/spreadsheet/react/how-to/identify-the-context-menu-opened">Identify the context menu opened</a></li>
5389+
<li><a href="/document-processing/excel/spreadsheet/react/how-to/find-replace-in-range">Find and replace the text within the selected range of cells</a></li>
5390+
<li><a href="/document-processing/excel/spreadsheet/react/how-to/add-dynamic-cell-template">Add dynamic cell templates</a></li>
5391+
<li><a href="/document-processing/excel/spreadsheet/react/how-to/add-cell-icon">Add an icon to the cell</a></li>
5392+
<li><a href="/document-processing/excel/spreadsheet/react/how-to/get-filtered-data">Get the filtered row data</a></li>
53405393
</ul>
53415394
</li>
53425395
<li><a href="/document-processing/excel/spreadsheet/react/mobile-responsiveness">Mobile Responsiveness</a></li>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
layout: post
3+
title: Add icons inside cells in React Spreadsheet component | Syncfusion
4+
description: Learn here all about adding icon inside cells using a custom template in Syncfusion React Spreadsheet component of Syncfusion Essential JS 2 and more.
5+
control: Spreadsheet
6+
platform: document-processing
7+
documentation: ug
8+
---
9+
10+
# Add Custom Icons to Cells in React Spreadsheet
11+
12+
In the Syncfusion Spreadsheet, you can render custom icons inside specific cells by defining a custom template property within the cell model. During the [beforeCellRender](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/index-default#beforecellrender) event, the icon element can be appended to the corresponding table cell (td) by checking whether the cell contains this template property.
13+
14+
The following sample demonstrates how to add icons to cells by assigning the template property in the cell definition. Additionally, a custom ribbon item named "Add Icon" is included under a new "Template" ribbon tab. When this ribbon item is selected, the Spreadsheet dynamically inserts an icon into the currently active cell.
15+
16+
{% tabs %}
17+
{% highlight js tabtitle="app.jsx" %}
18+
{% include code-snippet/spreadsheet/react/add-icon-in-cell-cs1/app/app.jsx %}
19+
{% endhighlight %}
20+
{% highlight ts tabtitle="app.tsx" %}
21+
{% include code-snippet/spreadsheet/react/add-icon-in-cell-cs1/app/app.tsx %}
22+
{% endhighlight %}
23+
{% endtabs %}
24+
25+
{% previewsample "/document-processing/code-snippet/spreadsheet/react/add-icon-in-cell-cs1" %}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
layout: post
3+
title: Dynamic cell template in React Spreadsheet component | Syncfusion
4+
description: Render dropdown templates inside cells in Syncfusion React Spreadsheet component of Syncfusion Essential JS 2 and more.
5+
control: Spreadsheet
6+
platform: document-processing
7+
documentation: ug
8+
---
9+
10+
# Create Dynamic Cell Templates with Dropdowns in React Spreadsheet
11+
12+
You can add templates to cells in the Syncfusion Spreadsheet component by dynamically assigning a custom template property directly to individual cells. When a cell has this custom template property, you can use the [beforeCellRender](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/index-default#beforecellrender) event to append the desired template element to the cell.
13+
14+
The following sample demonstrates how to insert a [Syncfusion Dropdown component](https://www.npmjs.com/package/@syncfusion/ej2-dropdowns) into Spreadsheet cells using this custom template property. Additionally, a custom ribbon item named "DropDown List" is included under a new "Template" ribbon tab. When this ribbon item is selected, the Spreadsheet dynamically inserts a dropdown into the currently active cell.
15+
16+
{% tabs %}
17+
{% highlight js tabtitle="app.jsx" %}
18+
{% include code-snippet/spreadsheet/react/dynamic-cell-template-cs1/app/app.jsx %}
19+
{% endhighlight %}
20+
{% highlight ts tabtitle="app.tsx" %}
21+
{% include code-snippet/spreadsheet/react/dynamic-cell-template-cs1/app/app.tsx %}
22+
{% endhighlight %}
23+
{% endtabs %}
24+
25+
{% previewsample "/document-processing/code-snippet/spreadsheet/react/dynamic-cell-template-cs1" %}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
layout: post
3+
title: Find and replace in range in React Spreadsheet component | Syncfusion
4+
description: Learn here all about performing find and replace limited to the range in Syncfusion React Spreadsheet component of Syncfusion Essential JS 2 and more.
5+
control: Spreadsheet
6+
platform: document-processing
7+
documentation: ug
8+
---
9+
10+
# Find and replace the text within the selected range of cells
11+
12+
In Syncfusion Spreadsheet, the "Replace All" action by default searches and replaces a text throughout the entire sheet, regardless of the selected range. To limit "Replace All" to only the selected range, you can customize the addressCollection based on the selectedRange in the [actionBegin](https://ej2.syncfusion.com/documentation/api/spreadsheet/index-default#actionbegin) event when the action is `beforeReplaceAll`.
13+
14+
The following sample demonstrates how to limit the "Replace All" operation to the currently selected range.
15+
16+
{% tabs %}
17+
{% highlight js tabtitle="app.jsx" %}
18+
{% include code-snippet/spreadsheet/react/find-and-replace-cs1/app/app.jsx %}
19+
{% endhighlight %}
20+
{% highlight ts tabtitle="app.tsx" %}
21+
{% include code-snippet/spreadsheet/react/find-and-replace-cs1/app/app.tsx %}
22+
{% endhighlight %}
23+
{% endtabs %}
24+
25+
{% previewsample "/document-processing/code-snippet/spreadsheet/react/find-and-replace-cs1" %}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
layout: post
3+
title: Retrieve filtered row data in React Spreadsheet component | Syncfusion
4+
description: Learn here all about getting filtered row data in Syncfusion React Spreadsheet component of Syncfusion Essential JS 2 and more.
5+
control: Spreadsheet
6+
platform: document-processing
7+
documentation: ug
8+
---
9+
10+
# Get filtered row data in React Spreadsheet
11+
12+
Filtering in the Syncfusion Spreadsheet allows you to display only the rows that match your criteria, hiding all others. You can enable filtering by setting the [allowFiltering](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/index-default#allowfiltering) property, and apply filters either through the UI or programmatically using the [applyFilter](https://ej2.syncfusion.com/react/documentation/api/spreadsheet/index-default#applyfilter) method. To identify which rows are filtered, iterate through the sheet's row collection and check the `isFiltered` property of each row object. This flag indicates whether a row is currently hidden due to filtering.
13+
14+
The following example shows how to get the filtered rows from the Spreadsheet:
15+
16+
{% tabs %}
17+
{% highlight js tabtitle="app.jsx" %}
18+
{% include code-snippet/spreadsheet/react/filter-cs2/app/app.jsx %}
19+
{% endhighlight %}
20+
{% highlight ts tabtitle="app.tsx" %}
21+
{% include code-snippet/spreadsheet/react/filter-cs2/app/app.tsx %}
22+
{% endhighlight %}
23+
{% highlight js tabtitle="datasource.jsx" %}
24+
{% include code-snippet/spreadsheet/react/filter-cs2/app/datasource.jsx %}
25+
{% endhighlight %}
26+
{% highlight ts tabtitle="datasource.tsx" %}
27+
{% include code-snippet/spreadsheet/react/filter-cs2/app/datasource.tsx %}
28+
{% endhighlight %}
29+
{% endtabs %}
30+
31+
{% previewsample "/document-processing/code-snippet/spreadsheet/react/filter-cs2" %}

Document-Processing/Excel/Spreadsheet/React/Open-Excel-File/from-google-drive.md renamed to Document-Processing/Excel/Spreadsheet/React/open-excel-file/from-google-drive.md

File renamed without changes.

Document-Processing/Excel/Spreadsheet/React/Save-Excel-File/to-google-drive.md renamed to Document-Processing/Excel/Spreadsheet/React/save-excel-file/to-google-drive.md

File renamed without changes.

Document-Processing/PDF/PDF-Library/NET/Working-with-Pages.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1590,3 +1590,122 @@ loadedDocument.Close(True)
15901590
{% endtabs %}
15911591

15921592
You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/PDF-Examples/tree/master/Pages/Insert-New-Page-in-Existing-PDF-with-Same-Size/.NET).
1593+
1594+
## Page-level actions in PDF documents
1595+
1596+
Added full support for page‑level actions in the .NET PDF library, enabling developers to add, retrieve, edit, and remove actions triggered by PDF page events such as `OnOpen` and `OnClose`.
1597+
1598+
Refer to the following code example to define custom behavior for PDF page‑level actions.
1599+
1600+
{% tabs %}
1601+
1602+
{% highlight c# tabtitle="C# [Cross-platform]" %}
1603+
1604+
using Syncfusion.Pdf;
1605+
using Syncfusion.Pdf.Interactive;
1606+
1607+
// Create a new PDF document.
1608+
using (PdfDocument document = new PdfDocument())
1609+
{
1610+
// Add a page to the document.
1611+
PdfPage page1 = document.Pages.Add();
1612+
document.Actions.AfterOpen =
1613+
// Create and add new JavaScript action to execute when the first page opens
1614+
Page1.Actions.OnOpen = new PdfJavaScriptAction("app.alert(\"Welcome! This page has just been opened.\");");
1615+
// Create and add new URI action to execute when the first page closes
1616+
Page1.Actions.OnClose = new PdfUriAction("http://www.google.com");
1617+
// Add second page to the document.
1618+
PdfPage page2 = document.Pages.Add();
1619+
// Create a sound action
1620+
PdfSoundAction soundAction = new PdfSoundAction("Startup.wav");
1621+
soundAction.Sound.Bits = 16;
1622+
soundAction.Sound.Channels = PdfSoundChannels.Stereo;
1623+
soundAction.Sound.Encoding = PdfSoundEncoding.Signed;
1624+
soundAction.Volume = 0.9f;
1625+
// Set the sound action to execute when the second page opens
1626+
Page2.Actions.OnOpen = soundAction;
1627+
// Create and add new Launch action to execute when the second page closes
1628+
Page2.Actions.OnClose = new PdfLaunchAction("logo.png");
1629+
// Removing the close action on first page
1630+
Page1.Actions.OnClose = null;
1631+
// Removing both open and close actions on second page
1632+
Page2.Actions.Clear(true);
1633+
//Save the document
1634+
document.Save("Output.pdf");
1635+
}
1636+
1637+
{% endhighlight %}
1638+
1639+
{% highlight c# tabtitle="C# [Windows-specific]" %}
1640+
1641+
using Syncfusion.Pdf;
1642+
using Syncfusion.Pdf.Interactive;
1643+
1644+
// Create a new PDF document.
1645+
using (PdfDocument document = new PdfDocument())
1646+
{
1647+
// Add a page to the document.
1648+
PdfPage page1 = document.Pages.Add();
1649+
document.Actions.AfterOpen =
1650+
// Create and add new JavaScript action to execute when the first page opens
1651+
Page1.Actions.OnOpen = new PdfJavaScriptAction("app.alert(\"Welcome! This page has just been opened.\");");
1652+
// Create and add new URI action to execute when the first page closes
1653+
Page1.Actions.OnClose = new PdfUriAction("http://www.google.com");
1654+
// Add second page to the document.
1655+
PdfPage page2 = document.Pages.Add();
1656+
// Create a sound action
1657+
PdfSoundAction soundAction = new PdfSoundAction("Startup.wav");
1658+
soundAction.Sound.Bits = 16;
1659+
soundAction.Sound.Channels = PdfSoundChannels.Stereo;
1660+
soundAction.Sound.Encoding = PdfSoundEncoding.Signed;
1661+
soundAction.Volume = 0.9f;
1662+
// Set the sound action to execute when the second page opens
1663+
Page2.Actions.OnOpen = soundAction;
1664+
// Create and add new Launch action to execute when the second page closes
1665+
Page2.Actions.OnClose = new PdfLaunchAction("logo.png");
1666+
// Removing the close action on first page
1667+
Page1.Actions.OnClose = null;
1668+
// Removing both open and close actions on second page
1669+
Page2.Actions.Clear(true);
1670+
//Save the document
1671+
document.Save("Output.pdf");
1672+
}
1673+
1674+
{% endhighlight %}
1675+
1676+
{% highlight vb.net tabtitle="VB.NET [Windows-specific]" %}
1677+
1678+
Imports Syncfusion.Pdf
1679+
Imports Syncfusion.Pdf.Interactive
1680+
1681+
' Create a new PDF document.
1682+
Using document As New PdfDocument()
1683+
' Add a page to the document.
1684+
Dim page1 As PdfPage = document.Pages.Add()
1685+
' Create and add new JavaScript action to execute when the first page opens
1686+
page1.Actions.OnOpen = New PdfJavaScriptAction("app.alert(""Welcome! This page has just been opened."");")
1687+
' Create and add new URI action to execute when the first page closes
1688+
page1.Actions.OnClose = New PdfUriAction("http://www.google.com")
1689+
' Add second page to the document.
1690+
Dim page2 As PdfPage = document.Pages.Add()
1691+
' Create a sound action
1692+
Dim soundAction As New PdfSoundAction("Startup.wav")
1693+
soundAction.Sound.Bits = 16
1694+
soundAction.Sound.Channels = PdfSoundChannels.Stereo
1695+
soundAction.Sound.Encoding = PdfSoundEncoding.Signed
1696+
soundAction.Volume = 0.9F
1697+
' Set the sound action to execute when the second page opens
1698+
page2.Actions.OnOpen = soundAction
1699+
' Create and add new Launch action to execute when the second page closes
1700+
page2.Actions.OnClose = New PdfLaunchAction("logo.png")
1701+
' Removing the close action on first page
1702+
page1.Actions.OnClose = Nothing
1703+
' Removing both open and close actions on second page
1704+
page2.Actions.Clear(True)
1705+
' Save the document
1706+
document.Save("Output.pdf")
1707+
End Using
1708+
1709+
{% endhighlight %}
1710+
1711+
{% endtabs %}

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.

0 commit comments

Comments
 (0)