From fd2d31b09be88ac27db03c66b4d8f60b8c1b7301 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Tue, 11 Aug 2026 11:35:56 +0300 Subject: [PATCH 1/5] AI Search Gap: Enumerating Paragraphs in RadFixedDocument MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Decision Recommend — Clarify that fixed documents do not retain flow paragraphs and document the supported page/content model. Confidence: High Gap: Incomplete content Why Customer need: Determine how to enumerate paragraph content from a RadFixedDocument. Current gap: Existing documentation discusses flow paragraphs and fixed page content separately, without explicitly explaining that paragraphs are not available after fixed-layout rendering. Preferred approach: Extend the existing RadFixedDocument model article with a fixed-versus-flow explanation and the supported enumeration path. Not selected: Creating a new article would duplicate the existing model and editor documentation. --- libraries/radpdfprocessing/features/bookmarks.md | 2 ++ libraries/radpdfprocessing/model/radfixeddocument.md | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/libraries/radpdfprocessing/features/bookmarks.md b/libraries/radpdfprocessing/features/bookmarks.md index 08223886..9e82c090 100644 --- a/libraries/radpdfprocessing/features/bookmarks.md +++ b/libraries/radpdfprocessing/features/bookmarks.md @@ -47,6 +47,8 @@ To insert a bookmark in a document, add it to the `Bookmarks` collection. The fo +>tip To open the PDF with the bookmarks pane selected in a viewer application, set the document-level `PageMode` property to `PageMode.UseBookmarks`. + To remove a bookmark, use the same collection. In the following example, the second bookmark inside the document is removed: diff --git a/libraries/radpdfprocessing/model/radfixeddocument.md b/libraries/radpdfprocessing/model/radfixeddocument.md index d9dd5382..a627f0fd 100644 --- a/libraries/radpdfprocessing/model/radfixeddocument.md +++ b/libraries/radpdfprocessing/model/radfixeddocument.md @@ -103,6 +103,12 @@ You can merge PDF documents with the `Merge()` method of `RadFixedDocument`. Thi The code from **Example 5** merges the document created in [**Example 1**](#example1) with another `RadFixedDocument`. +### Fixed Content and Paragraphs + +`RadFixedDocument` does not expose a paragraph collection. A fixed document contains [RadFixedPage]({%slug radpdfprocessing-model-radfixedpage%}) instances, and each page exposes a `Content` collection of positioned content elements such as [TextFragment]({%slug radpdfprocessing-model-textfragment%}) objects. To inspect text in a fixed document, enumerate the pages and their content elements. + +`TextFragment` represents a fixed-layout text run. It does not retain flow paragraph boundaries, heading styles, or `StyleId` values. If you need paragraph or heading metadata, retain it while creating the document with [RadFixedDocumentEditor]({%slug radpdfprocessing-editing-radfixeddocumenteditor%}), before the flow content is rendered into fixed page content. For text that already exists in a PDF, use the [search API]({%slug radpdfprocessing-features-search%}) or public text-position APIs to locate known text rather than looking for `Paragraph` objects. + ## Document Information `RadFixedDocument` exposes a `DocumentInfo` property of type [RadFixedDocumentInfo]({%slug radpdfprocessing-model-radfixeddocumentinfo%}), intended to hold additional information about the document. From 86dae7ea1a8a57fad68ced4e09128f10989ba39f Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Tue, 11 Aug 2026 17:16:23 +0300 Subject: [PATCH 2/5] AI Search Gap: Accessing FirstRangeArray MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Decision Recommend — Update the existing custom-function formula documentation with the accessibility limitation and public replacement APIs. Confidence: High Gap: Incomplete content Why Customer need: Retrieve the first referenced range or its evaluated array values. Current gap: Existing content covers range and array handling but does not explain that FirstRangeArray is internal. Preferred approach: Add guidance to the existing custom-functions resource. Not selected: A new article would duplicate existing array and custom-function guidance. --- .../features/formulas/custom-functions.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/libraries/radspreadprocessing/features/formulas/custom-functions.md b/libraries/radspreadprocessing/features/formulas/custom-functions.md index 067a693b..bdf3d004 100644 --- a/libraries/radspreadprocessing/features/formulas/custom-functions.md +++ b/libraries/radspreadprocessing/features/formulas/custom-functions.md @@ -246,6 +246,35 @@ public override bool IsSpillingArgument(int argumentIndex, RadExpression argumen } ``` +### Access the first range in a custom function + +To access the first range, use the public `CellReferenceRanges` collection and convert the first `CellReferenceRange` to a `CellRange`: + +```csharp +CellReferenceRangeExpression referenceExpression = context.Arguments[0] as CellReferenceRangeExpression; +if (referenceExpression == null || referenceExpression.CellReferenceRanges.Count == 0) +{ + return ErrorExpressions.ValueError; +} + +CellReferenceRange firstRange = referenceExpression.CellReferenceRanges[0]; +CellRange cellRange = firstRange.ToCellRange(); +``` + +If you need the evaluated values instead of the range coordinates, evaluate the expression and inspect the first nested `ArrayExpression`: + +```csharp +ArrayExpression rangesValue = referenceExpression.GetValue() as ArrayExpression; +if (rangesValue == null || rangesValue.RowCount == 0 || rangesValue.ColumnCount == 0) +{ + return ErrorExpressions.ValueError; +} + +ArrayExpression firstRangeArray = rangesValue[0, 0] as ArrayExpression; +``` + +`ArrayExpression` exposes `RowCount`, `ColumnCount`, and an indexer for reading the evaluated expressions. + For the full description of spill behavior and the dynamic array model, see [Dynamic Array Formulas]({%slug radspreadprocessing-features-formulas-dynamic-array-formulas%}). ## See Also From 1ca804aa90c07d1798d389e014a837cfe3b5190a Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Tue, 11 Aug 2026 17:51:43 +0300 Subject: [PATCH 3/5] AI Search Gap: COM Full-Rebuild Equivalent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Decision Recommend — Clarify the existing calculation-chain documentation using the exact COM Interop terminology. Confidence: High Gap: Incomplete content with terminology mismatch Why Customer need: Know whether Telerik provides a replacement for Application.CalculateFullRebuild(). Current gap: Existing content explains automatic recalculation but does not explicitly answer the COM Interop comparison. Preferred approach: Update the existing calculation-chain article, avoiding duplicate content. Add a section explaining that no public full-rebuild method exists; recalculation is dependency-driven and automatic Not selected: New KB article ranks lower because the existing formula documentation already owns this behavior. --- .../radspreadprocessing/features/formulas/calculation-chain.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/radspreadprocessing/features/formulas/calculation-chain.md b/libraries/radspreadprocessing/features/formulas/calculation-chain.md index afe926a4..1b1696c4 100644 --- a/libraries/radspreadprocessing/features/formulas/calculation-chain.md +++ b/libraries/radspreadprocessing/features/formulas/calculation-chain.md @@ -17,6 +17,8 @@ position: 6 ## How the Calculation Chain Works +RadSpreadProcessing does not recalculate all formulas in all open workbooks, regardless of whether they need recalculation. Instead, the library tracks formula dependencies internally and automatically recalculates affected formulas when their referenced values or formulas change. You do not need to rebuild the calculation chain manually. + When a cell value changes, **RadSpreadProcessing** needs to recalculate every formula that directly or indirectly references that cell. The calculation chain maintains a directed dependency graph of all formula cells in the workbook. The library uses this graph to determine the minimal set of formulas that require recalculation and the correct order in which to evaluate them. The calculation chain covers the following scenarios: From 073fa672cac2b55b276f94e86cfaedeb79685f1c Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Wed, 12 Aug 2026 10:49:07 +0300 Subject: [PATCH 4/5] AI Search Gap: PKCS#12 Certificate-Loading Guidance Is Incomplete MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Decision Recommend with confirmation — Expand the existing RadPdfProcessing digital-signature getting-started article with verified PKCS#12/PFX certificate-loading guidance after confirming the .NET API and target versions. Confidence: Medium Gap: Missing example or troubleshooting Why Customer need: Load a PKCS#12 file and use the resulting certificate to sign a PDF. Current gap: Documentation starts with an existing X509Certificate2 but omits the file-loading step. Preferred approach: Extend the existing certificate prerequisites/signing workflow. Not selected: A new KB article, because certificate preparation belongs in the existing digital-signature getting-started resource. --- .../features/digital-signature/getting-started.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libraries/radpdfprocessing/features/digital-signature/getting-started.md b/libraries/radpdfprocessing/features/digital-signature/getting-started.md index 04fcf9e1..5c77d84a 100644 --- a/libraries/radpdfprocessing/features/digital-signature/getting-started.md +++ b/libraries/radpdfprocessing/features/digital-signature/getting-started.md @@ -24,6 +24,20 @@ Before you sign a document, make sure you have the required inputs and document 3. Choose whether the signature will be visible or invisible in the document. 4. Prepare a stream that supports both reading and writing for the export operation. +### Load a PKCS#12 Certificate from a File + +In .NET 10, use the [`X509CertificateLoader.LoadPkcs12FromFile`](https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.x509certificateloader.loadpkcs12fromfile?view=net-10.0) method to load a PKCS#12 (`.pfx` or `.p12`) certificate from disk. The method returns an `X509Certificate2` object that you can pass to the `Signature` constructor: + +```csharp +using System.Security.Cryptography.X509Certificates; +using Telerik.Documents.Fixed.Model.DigitalSignatures; + +X509Certificate2 certificate = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password"); +Signature signature = new Signature(certificate); +``` + +The certificate must contain the private key required for signing. For target frameworks other than .NET 10, use a certificate-loading approach supported by the target framework to create the required `X509Certificate2` instance. + ## Signing a Document Use this workflow to sign a PDF document: From c8c075554913704e44a8ea42001d19120cf721a0 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Wed, 12 Aug 2026 14:02:04 +0300 Subject: [PATCH 5/5] AI Search Gap: Public Key Infrastructure (PKI) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Decision Recommend with confirmation — Add PKI terminology to the existing RadPdfProcessing digital-signature overview, scoped to certificate-based signing and validation. Confidence: Medium Gap: Terminology mismatch / missing metadata Why Customer need: Understand how PKI relates to Telerik Document Processing. Current gap: The docs cover X.509 certificates, trusted roots, certificate chains, revocation, and digital signatures, but do not use “PKI” or “Public Key Infrastructure.” Preferred approach: Add the terminology to the existing digital-signature overview rather than create a generic PKI article. Not selected: A standalone PKI guide, because the repositories do not show Telerik APIs for certificate issuance, certificate-authority management, or general PKI administration. --- .../radpdfprocessing/features/digital-signature/overview.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/radpdfprocessing/features/digital-signature/overview.md b/libraries/radpdfprocessing/features/digital-signature/overview.md index 73dae211..914ce5b4 100644 --- a/libraries/radpdfprocessing/features/digital-signature/overview.md +++ b/libraries/radpdfprocessing/features/digital-signature/overview.md @@ -1,9 +1,9 @@ --- title: Overview -description: The digital signature feature in RadPdfProcessing enables you to sign and validate PDF documents using X509 certificates and signature fields. +description: The digital signature feature in RadPdfProcessing enables you to sign and validate PDF documents using X509 certificates, PKI certificate chains, and signature fields. page_title: Digital Signature - Overview slug: radpdfprocessing-features-digital-signature -tags: digital, signature, pdf, signing, validation, radpdfprocessing, x509, certificates, overview +tags: digital, signature, pdf, signing, validation, radpdfprocessing, x509, certificates, pki, public-key-infrastructure, overview position: 0 --- @@ -11,6 +11,8 @@ position: 0 The **digital signature** feature enables you to sign and validate a PDF document. A signature confirms that the document content originated from the signer and has not been modified. A signed document is considered valid when it has not been changed after signing, and all of its certificates have a valid trusted root certificate. +In a **Public Key Infrastructure (PKI)** workflow, RadPdfProcessing uses X.509 certificates, certificate chains, trusted roots, and revocation checks for PDF signing and validation. Certificate issuance and certificate-authority management are outside the library's scope. + Telerik **RadPdfProcessing** provides an API that allows you to: