diff --git a/_includes/sidelist-programming/programming-android.html b/_includes/sidelist-programming/programming-android.html
index f36b63e..681ec0e 100644
--- a/_includes/sidelist-programming/programming-android.html
+++ b/_includes/sidelist-programming/programming-android.html
@@ -207,6 +207,7 @@
ImageTagType
IntermediateResultUnitType
LogMode
+ MeasureUnit
RegionObjectElementType
SectionType
TransformMatrixType
@@ -242,6 +243,11 @@
ImageProcessor
MultiFrameResultCrossFilter
ProactiveImageSourceAdapter
+ LayoutAnalysisParameter
+ LayoutAnalysisResult
+ LayoutAnalyzer
+ LayoutAxis
+ LayoutElement
UtilityException
UtilityModule
@@ -249,6 +255,8 @@
Enumerations
@@ -551,6 +559,7 @@
@@ -794,6 +803,7 @@
Enumerations
@@ -555,6 +563,7 @@
@@ -798,6 +807,7 @@
- AllModuleDeviation
- AustralianPostEncodingTable
+ - AutoDetectColorInversion
- BarcodeAngleRangeArray
- BarcodeBytesLengthRangeArray
- BarcodeFormatIds
diff --git a/programming/android/api-reference/capture-vision-router/single-file-processing.md b/programming/android/api-reference/capture-vision-router/single-file-processing.md
index ed20f8f..1b0fbf0 100644
--- a/programming/android/api-reference/capture-vision-router/single-file-processing.md
+++ b/programming/android/api-reference/capture-vision-router/single-file-processing.md
@@ -23,6 +23,9 @@ This page introduces the `capture` APIs of the `CaptureVisionRouter` that design
| [`capture(fileBytes,templateName)`](#capturefilebytestemplatename) | Processes a single image or a file containing a single image to derive important information with the file bytes in the memory. |
| [`capture(imageData,templateName)`](#captureimagedatatemplatename) | Processes a single image or a file containing a single image to derive important information with an [`ImageData`](../core/basic-structures/image-data.md) object. |
| [`capture(bitmap,templateName)`](#capturebitmaptemplatename) | Processes a single image or a file containing a single image to derive important information with a `Bitmap`. |
+| [`captureMultiPages(filePath,templateName)`](#capturemultipagesfilepathtemplatename) | Processes a multi-page file to derive important information with the file path. |
+| [`captureMultiPages(fileBytes,templateName)`](#capturemultipagesfilebytestemplatename) | Processes a multi-page file to derive important information with the file bytes in the memory. |
+| [`captureMultiPages(fileFetcher,templateName)`](#capturemultipagesfilefetchertemplatename) | Processes a multi-page file to derive important information with a `FileFetcher`. |
## capture(filePath,templateName)
@@ -158,3 +161,69 @@ Possible errors:
| EC_TEMPLATE_NAME_INVALID | -10036 | The target template name is invalid. |
| EC_CALL_REJECTED_WHEN_CAPTURING | -10062 | Function call is rejected when capturing in progress. |
| EC_MULTI_PAGES_NOT_SUPPORTED | -10066 | The api does not support multi-page files. Please use FileFetcher instead. |
+
+## captureMultiPages(filePath,templateName)
+
+Processes a multi-page file to derive important information with the file path.
+
+```java
+CapturedResult[] captureMultiPages(String filePath, String templateName);
+```
+
+**Parameters**
+
+`[in] filePath`: The file path and name that you want to capture data from.
+
+`[in] templateName`: Specifies a "CaptureVisionTemplate" to use. The following value are available for this parameter:
+
+- One of the [`EnumPresetTemplate`]({{ site.dcv_android_api }}capture-vision-router/enum/preset-template.html?lang=android) member. This is available only if you have never upload a new template via `initSettings` or `initSettingsFromFile`.
+- A string that represents one of the template name that you have uploaded via `initSettings` or `initSettingsFromFile`.
+- "" (empty string) to use the default template. The first template will be used if you have uploaded a template file via `initSettingsFromFile` or `initSettings`.
+
+**Return Value**
+
+An array of [`CapturedResult`]({{ site.dcv_android_api }}capture-vision-router/auxiliary-classes/captured-result.html) objects which contains the derived information from each page of the file.
+
+## captureMultiPages(fileBytes,templateName)
+
+Processes a multi-page file to derive important information with the file bytes in the memory.
+
+```java
+CapturedResult[] captureMultiPages(byte[] fileBytes, String templateName);
+```
+
+**Parameters**
+
+`[in] fileBytes`: A byte array that points to a file in memory.
+
+`[in] templateName`: Specifies a "CaptureVisionTemplate" to use. The following value are available for this parameter:
+
+- One of the [`EnumPresetTemplate`]({{ site.dcv_android_api }}capture-vision-router/enum/preset-template.html?lang=android) member. This is available only if you have never upload a new template via `initSettings` or `initSettingsFromFile`.
+- A string that represents one of the template name that you have uploaded via `initSettings` or `initSettingsFromFile`.
+- "" (empty string) to use the default template. The first template will be used if you have uploaded a template file via `initSettingsFromFile` or `initSettings`.
+
+**Return Value**
+
+An array of [`CapturedResult`]({{ site.dcv_android_api }}capture-vision-router/auxiliary-classes/captured-result.html) objects which contains the derived information from each page of the file.
+
+## captureMultiPages(fileFetcher,templateName)
+
+Processes a multi-page file to derive important information with a [`FileFetcher`]({{ site.dcv_android_api }}utility/file-fetcher.html).
+
+```java
+CapturedResult[] captureMultiPages(FileFetcher fileFetcher, String templateName);
+```
+
+**Parameters**
+
+`[in] fileFetcher`: A [`FileFetcher`]({{ site.dcv_android_api }}utility/file-fetcher.html) object.
+
+`[in] templateName`: Specifies a "CaptureVisionTemplate" to use. The following value are available for this parameter:
+
+- One of the [`EnumPresetTemplate`]({{ site.dcv_android_api }}capture-vision-router/enum/preset-template.html?lang=android) member. This is available only if you have never upload a new template via `initSettings` or `initSettingsFromFile`.
+- A string that represents one of the template name that you have uploaded via `initSettings` or `initSettingsFromFile`.
+- "" (empty string) to use the default template. The first template will be used if you have uploaded a template file via `initSettingsFromFile` or `initSettings`.
+
+**Return Value**
+
+An array of [`CapturedResult`]({{ site.dcv_android_api }}capture-vision-router/auxiliary-classes/captured-result.html) objects which contains the derived information from each page of the file.
diff --git a/programming/android/api-reference/core/basic-structures/quadrilateral.md b/programming/android/api-reference/core/basic-structures/quadrilateral.md
index a6a8d76..0967385 100644
--- a/programming/android/api-reference/core/basic-structures/quadrilateral.md
+++ b/programming/android/api-reference/core/basic-structures/quadrilateral.md
@@ -39,6 +39,7 @@ class Quadrilateral
| [`transformByMatrix`](#transformbymatrix) | Transforms the coordinates of the quadrilateral by a transformation matrix. |
| [`getBoundingRect`](#getboundingrect) | Get the bounding rectangle of the quadrilateral. |
| [`getArea`](#getarea) | Get the area of the quadrilateral. |
+| [`getCentrePoint`](#getcentrepoint) | Get the centre point of the quadrilateral. |
### points
@@ -156,3 +157,15 @@ int getArea();
**Return Value**
The area of the quadrilateral.
+
+### getCentrePoint
+
+Gets the centre point of the quadrilateral.
+
+```java
+Point getCentrePoint();
+```
+
+**Return Value**
+
+The centre point of the quadrilateral.
diff --git a/programming/android/api-reference/core/enum/measure-unit.md b/programming/android/api-reference/core/enum/measure-unit.md
new file mode 100644
index 0000000..657e70f
--- /dev/null
+++ b/programming/android/api-reference/core/enum/measure-unit.md
@@ -0,0 +1,21 @@
+---
+layout: default-layout
+title: MeasureUnit - Dynamsoft Capture Vision Android Enumerations
+description: The enumeration MeasureUnit of Dynamsoft Capture Vision Android edition describes the unit of measurement for a value.
+keywords: measure unit, pixel, percentage
+codeAutoHeight: true
+---
+
+# Enumeration MeasureUnit
+
+`MeasureUnit` describes the unit of measurement for a value.
+
+```java
+public @interface EnumMeasureUnit
+{
+ /**The value is an absolute pixel count.*/
+ public static final int MU_PIXEL = 0;
+ /**The value is a percentage of the reference dimension (e.g. 25 = 25%).*/
+ public static final int MU_PERCENTAGE = 1;
+}
+```
diff --git a/programming/android/api-reference/utility/enum/layout-element-source.md b/programming/android/api-reference/utility/enum/layout-element-source.md
new file mode 100644
index 0000000..f392031
--- /dev/null
+++ b/programming/android/api-reference/utility/enum/layout-element-source.md
@@ -0,0 +1,23 @@
+---
+layout: default-layout
+title: LayoutElementSource - Dynamsoft Capture Vision Android Enumerations
+description: The enumeration LayoutElementSource of Dynamsoft Capture Vision Android edition describes the origin of a layout element.
+keywords: layout element source
+codeAutoHeight: true
+---
+
+# Enumeration LayoutElementSource
+
+`LayoutElementSource` describes the origin of a layout element.
+
+```java
+public @interface EnumLayoutElementSource
+{
+ /**No element exists at this logical grid position.*/
+ public static final int LES_NONE = 0;
+ /**Element is provided from the original input array.*/
+ public static final int LES_INPUT = 1;
+ /**Element is reconstructed or filled in by the algorithm.*/
+ public static final int LES_INFERRED = 2;
+}
+```
diff --git a/programming/android/api-reference/utility/enum/layout-pattern.md b/programming/android/api-reference/utility/enum/layout-pattern.md
new file mode 100644
index 0000000..28f54ba
--- /dev/null
+++ b/programming/android/api-reference/utility/enum/layout-pattern.md
@@ -0,0 +1,23 @@
+---
+layout: default-layout
+title: LayoutPattern - Dynamsoft Capture Vision Android Enumerations
+description: The enumeration LayoutPattern of Dynamsoft Capture Vision Android edition describes the layout pattern for quadrilateral analysis.
+keywords: layout pattern
+codeAutoHeight: true
+---
+
+# Enumeration LayoutPattern
+
+`LayoutPattern` describes the layout pattern for quadrilateral analysis.
+
+```java
+public @interface EnumLayoutPattern
+{
+ /**Algorithm automatically detects the best layout pattern.*/
+ public static final int LP_UNKNOWN = 0;
+ /**Elements are organized into sequential lines (rows or columns).*/
+ public static final int LP_LINES = 1;
+ /**Elements are organized into a strict grid/matrix structure.*/
+ public static final int LP_MATRIX = 2;
+}
+```
diff --git a/programming/android/api-reference/utility/layout-analysis-parameter.md b/programming/android/api-reference/utility/layout-analysis-parameter.md
new file mode 100644
index 0000000..8d118db
--- /dev/null
+++ b/programming/android/api-reference/utility/layout-analysis-parameter.md
@@ -0,0 +1,65 @@
+---
+layout: default-layout
+title: LayoutAnalysisParameter - Dynamsoft Capture Vision Android Edition API Reference
+description: The class LayoutAnalysisParameter of Dynamsoft Capture Vision Android edition provides parameters for layout analysis.
+keywords: layout analysis parameter, Java, Kotlin
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+---
+
+# LayoutAnalysisParameter
+
+The `LayoutAnalysisParameter` class provides parameters to constrain the layout analysis.
+
+## Definition
+
+*Namespace:* com.dynamsoft.utility
+
+*Assembly:* DynamsoftCaptureVisionBundle.aar
+
+```java
+class LayoutAnalysisParameter
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+| --------- | ---- | ----------- |
+| [`pattern`](#pattern) | *int* | Desired layout pattern. Use LP_UNKNOWN for auto-detection. |
+| [`axes`](#axes) | *LayoutAxis[]* | Configuration for primary axis [0] and secondary axis [1]. |
+| [`inputImageWidth`](#inputimagewidth) | *int* | Width of the reference image. Required when spacingUnit is MU_PERCENTAGE. |
+| [`inputImageHeight`](#inputimageheight) | *int* | Height of the reference image. Required when spacingUnit is MU_PERCENTAGE. |
+
+### pattern
+
+Desired layout pattern. Use LP_UNKNOWN for auto-detection.
+
+```java
+@EnumLayoutPattern
+int pattern;
+```
+
+### axes
+
+Configuration for primary axis [0] and secondary axis [1].
+
+```java
+LayoutAxis[] axes;
+```
+
+### inputImageWidth
+
+Width of the reference image. Required when spacingUnit is MU_PERCENTAGE.
+
+```java
+int inputImageWidth;
+```
+
+### inputImageHeight
+
+Height of the reference image. Required when spacingUnit is MU_PERCENTAGE.
+
+```java
+int inputImageHeight;
+```
diff --git a/programming/android/api-reference/utility/layout-analysis-result.md b/programming/android/api-reference/utility/layout-analysis-result.md
new file mode 100644
index 0000000..fbe305d
--- /dev/null
+++ b/programming/android/api-reference/utility/layout-analysis-result.md
@@ -0,0 +1,83 @@
+---
+layout: default-layout
+title: LayoutAnalysisResult - Dynamsoft Capture Vision Android Edition API Reference
+description: The class LayoutAnalysisResult of Dynamsoft Capture Vision Android edition represents the results of a layout analysis.
+keywords: layout analysis result, Java, Kotlin
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+---
+
+# LayoutAnalysisResult
+
+The `LayoutAnalysisResult` class represents the comprehensive results of the layout analysis.
+
+## Definition
+
+*Namespace:* com.dynamsoft.utility
+
+*Assembly:* DynamsoftCaptureVisionBundle.aar
+
+```java
+class LayoutAnalysisResult
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+| --------- | ---- | ----------- |
+| [`inferredQuads`](#inferredquads) | *Quadrilateral[]* | Array of newly generated quadrilaterals. |
+| [`elements`](#elements) | *LayoutElement[][]* | A 2D array of layout elements [rowCount][colCount]. |
+| [`rowCount`](#rowcount) | *int* | Number of rows in the analyzed layout. |
+| [`colCount`](#colcount) | *int* | Maximum number of columns across all rows. |
+| [`detectedPattern`](#detectedpattern) | *int* | The actual layout pattern identified by the engine. |
+| [`errorCode`](#errorcode) | *int* | 0 for success, non-zero for error. |
+
+### inferredQuads
+
+Array of newly generated quadrilaterals.
+
+```java
+Quadrilateral[] inferredQuads;
+```
+
+### elements
+
+A 2D array of layout elements [rowCount][colCount].
+
+```java
+LayoutElement[][] elements;
+```
+
+### rowCount
+
+Number of rows in the analyzed layout.
+
+```java
+int rowCount;
+```
+
+### colCount
+
+Maximum number of columns across all rows.
+
+```java
+int colCount;
+```
+
+### detectedPattern
+
+The actual layout pattern identified by the engine.
+
+```java
+@EnumLayoutPattern
+int detectedPattern;
+```
+
+### errorCode
+
+0 for success, non-zero for error.
+
+```java
+int errorCode;
+```
diff --git a/programming/android/api-reference/utility/layout-analyzer.md b/programming/android/api-reference/utility/layout-analyzer.md
new file mode 100644
index 0000000..4f03437
--- /dev/null
+++ b/programming/android/api-reference/utility/layout-analyzer.md
@@ -0,0 +1,64 @@
+---
+layout: default-layout
+title: LayoutAnalyzer - Dynamsoft Capture Vision Android Edition API Reference
+description: The class LayoutAnalyzer of Dynamsoft Capture Vision Android edition provides quadrilateral layout analysis functionality.
+keywords: layout analyzer, quadrilateral, Java, Kotlin
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+---
+
+# LayoutAnalyzer
+
+The `LayoutAnalyzer` class provides static methods to analyze the spatial distribution of quadrilaterals.
+
+## Definition
+
+*Namespace:* com.dynamsoft.utility
+
+*Assembly:* DynamsoftCaptureVisionBundle.aar
+
+```java
+class LayoutAnalyzer
+```
+
+## Methods
+
+| Method | Description |
+| ------ | ----------- |
+| [`analyze(inputQuads)`](#analyzeinputquads) | Analyzes the spatial distribution of quadrilaterals. |
+| [`analyze(inputQuads,parameter)`](#analyzeinputquadsparameter) | Analyzes the spatial distribution of quadrilaterals with optional constraints. |
+
+### analyze(inputQuads)
+
+Analyzes the spatial distribution of quadrilaterals.
+
+```java
+static LayoutAnalysisResult analyze(Quadrilateral[] inputQuads);
+```
+
+**Parameters**
+
+`[in] inputQuads`: Array of input quadrilaterals.
+
+**Return Value**
+
+A [`LayoutAnalysisResult`](layout-analysis-result.md) object, or null on failure.
+
+### analyze(inputQuads,parameter)
+
+Analyzes the spatial distribution of quadrilaterals with optional constraints.
+
+```java
+static LayoutAnalysisResult analyze(Quadrilateral[] inputQuads, LayoutAnalysisParameter parameter);
+```
+
+**Parameters**
+
+`[in] inputQuads`: Array of input quadrilaterals.
+
+`[in] parameter`: Optional parameters to constrain the analysis.
+
+**Return Value**
+
+A [`LayoutAnalysisResult`](layout-analysis-result.md) object, or null on failure.
diff --git a/programming/android/api-reference/utility/layout-axis.md b/programming/android/api-reference/utility/layout-axis.md
new file mode 100644
index 0000000..1be3223
--- /dev/null
+++ b/programming/android/api-reference/utility/layout-axis.md
@@ -0,0 +1,83 @@
+---
+layout: default-layout
+title: LayoutAxis - Dynamsoft Capture Vision Android Edition API Reference
+description: The class LayoutAxis of Dynamsoft Capture Vision Android edition provides axis configuration for layout analysis.
+keywords: layout axis, Java, Kotlin
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+---
+
+# LayoutAxis
+
+The `LayoutAxis` class provides configuration for a single axis in layout analysis.
+
+## Definition
+
+*Namespace:* com.dynamsoft.utility
+
+*Assembly:* DynamsoftCaptureVisionBundle.aar
+
+```java
+class LayoutAxis
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+| --------- | ---- | ----------- |
+| [`elementCount`](#elementcount) | *int* | Expected number of elements along this axis. Use -1 for auto-detection. |
+| [`isStaggered`](#isstaggered) | *boolean* | Whether the layout uses an offset/staggered pattern. |
+| [`angle`](#angle) | *int* | Target angle [0, 180]. Use -1 for auto-detection. |
+| [`isEqualSpacing`](#isequalspacing) | *boolean* | Force equal gaps between elements. When false, spacing is ignored. |
+| [`spacing`](#spacing) | *int* | Spacing between elements along this axis. Use -1 for auto-detection. |
+| [`spacingUnit`](#spacingunit) | *int* | Interpretation mode for the spacing value. |
+
+### elementCount
+
+Expected number of elements along this axis. Use -1 for auto-detection.
+
+```java
+int elementCount;
+```
+
+### isStaggered
+
+Whether the layout uses an offset/staggered pattern.
+
+```java
+boolean isStaggered;
+```
+
+### angle
+
+Target angle [0, 180]. Use -1 for auto-detection.
+
+```java
+int angle;
+```
+
+### isEqualSpacing
+
+Force equal gaps between elements. When false, spacing is ignored.
+
+```java
+boolean isEqualSpacing;
+```
+
+### spacing
+
+Spacing between elements along this axis. Use -1 for auto-detection.
+
+```java
+int spacing;
+```
+
+### spacingUnit
+
+Interpretation mode for the spacing value.
+
+```java
+@EnumMeasureUnit
+int spacingUnit;
+```
diff --git a/programming/android/api-reference/utility/layout-element.md b/programming/android/api-reference/utility/layout-element.md
new file mode 100644
index 0000000..11f97a4
--- /dev/null
+++ b/programming/android/api-reference/utility/layout-element.md
@@ -0,0 +1,47 @@
+---
+layout: default-layout
+title: LayoutElement - Dynamsoft Capture Vision Android Edition API Reference
+description: The class LayoutElement of Dynamsoft Capture Vision Android edition represents an element in a layout analysis.
+keywords: layout element, Java, Kotlin
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+---
+
+# LayoutElement
+
+The `LayoutElement` class represents an element in a layout analysis.
+
+## Definition
+
+*Namespace:* com.dynamsoft.utility
+
+*Assembly:* DynamsoftCaptureVisionBundle.aar
+
+```java
+class LayoutElement
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+| --------- | ---- | ----------- |
+| [`quad`](#quad) | *Quadrilateral* | Geometric coordinates of the element. |
+| [`source`](#source) | *int* | Origin of the element. |
+
+### quad
+
+Geometric coordinates of the element.
+
+```java
+Quadrilateral quad;
+```
+
+### source
+
+Origin of the element.
+
+```java
+@EnumLayoutElementSource
+int source;
+```
diff --git a/programming/android/release-notes/android-3.md b/programming/android/release-notes/android-3.md
index 3d1280b..713ff32 100644
--- a/programming/android/release-notes/android-3.md
+++ b/programming/android/release-notes/android-3.md
@@ -9,6 +9,63 @@ noTitleIndex: true
# Release Notes - DynamsoftCaptureVision Android v3.x
+## 3.6.1000 (07/30/2026)
+
+### Highlights
+
+#### Multi-Threaded Barcode Decoding
+
+- **Get results sooner with parallel processing** - Barcode decoding now uses a breadth-first strategy that decomposes a single DBR Task into one Localization Work and one or more Decoding Works. This improves thread utilization and reduces the chance that a slow `DeblurMode` attempt blocks other faster decoding attempts, helping valid results come back sooner.
+
+#### DataMatrix Color Inversion Detection
+
+- **Handle normal and inverted DataMatrix more efficiently** - Added [`AutoDetectColorInversion`]({{ site.dcvb_parameters_reference }}barcode-format-specification/auto-detect-color-inversion.html) to automatically handle both normal and inverted DataMatrix barcodes. Instead of processing the whole image twice, the SDK applies dual-polarity handling only to localized DataMatrix regions, which makes processing faster in dual-polarity scenarios.
+
+#### Barcode Layout Analysis
+
+- **Decode dense grid barcodes more completely** - Added [`LayoutAnalyzer`]({{ site.dcvb_android_api }}utility/layout-analyzer.html) to organize barcode locations into logical line or matrix layouts and infer unrecognized barcode regions when gaps exist, enabling workflows such as fast first-pass decoding, missing-region inference, and targeted second-pass decoding on dense N*M barcode layouts.
+
+#### Cross-Version License Support
+
+- **Use a single license across SDK versions** - Full License 1.0 keys (starting with "f") that are non-perpetual are no longer version-checked, so the same key can be used across SDK versions without reactivation.
+
+#### Text Line Orientation Detection
+
+- **Improved handling of rotated text lines** - Added [`OrientationDetectionModes`]({{ site.dcvb_parameters_reference }}label-recognizer-task-settings/orientation-detection-modes.html) to detect text line orientation and correct it for further processing. Two modes are available: `ODM_SPATIAL_REFERENCES` and `ODM_CHARS_ORIENTATION_NEURAL_NETWORK`.
+- **Current limitations** - This capability is currently effective only in MRZ scenarios and supports only upright and upside-down text lines (0 degrees and 180 degrees). It does not yet handle 90 degrees, 270 degrees, or arbitrary rotation angles.
+
+### New
+
+- Added [`AutoDetectColorInversion`]({{ site.dcvb_parameters_reference }}barcode-format-specification/auto-detect-color-inversion.html) parameter for `BarcodeFormatSpecification` to support automatic color-inversion detection for DataMatrix barcodes.
+
+- Added [`LayoutAnalyzer`]({{ site.dcvb_android_api }}utility/layout-analyzer.html) class with [`analyze()`]({{ site.dcvb_android_api }}utility/layout-analyzer.html#analyze) static method for quadrilateral layout analysis.
+
+- Added [`LayoutPattern`]({{ site.dcvb_android_api }}utility/enum-layout-pattern.html) enumeration with values `LP_UNKNOWN`, `LP_LINES`, and `LP_MATRIX`.
+
+- Added [`LayoutElementSource`]({{ site.dcvb_android_api }}utility/enum-layout-element-source.html) enumeration with values `LES_NONE`, `LES_INPUT`, and `LES_INFERRED`.
+
+- Added [`MeasureUnit`]({{ site.dcvb_android_api }}core/enum-measure-unit.html) enumeration with values `MU_PIXEL` and `MU_PERCENTAGE`.
+
+- Added [`LayoutAxis`]({{ site.dcvb_android_api }}utility/layout-axis.html), [`LayoutAnalysisParameter`]({{ site.dcvb_android_api }}utility/layout-analysis-parameter.html), [`LayoutElement`]({{ site.dcvb_android_api }}utility/layout-element.html), and [`LayoutAnalysisResult`]({{ site.dcvb_android_api }}utility/layout-analysis-result.html) for layout analysis configuration and results.
+
+- Added a new `GridBarcodeScanner` sample (with `sample_grid.png`) to demonstrate how to use [`LayoutAnalyzer`]({{ site.dcvb_android_api }}utility/layout-analyzer.html) for barcode grid layout detection and logical row/column mapping.
+
+- Added [`OrientationDetectionModes`]({{ site.dcvb_parameters_reference }}label-recognizer-task-settings/orientation-detection-modes.html) parameter for the [`SST_LOCALIZE_TEXT_LINES`]({{ site.dcvb_parameters_reference }}label-recognizer-task-settings/stage-localize-text-lines.html) stage with two supported modes: `ODM_SPATIAL_REFERENCES` and `ODM_CHARS_ORIENTATION_NEURAL_NETWORK`.
+
+- Added `TextLineOrientationCls.data` model file for text line orientation classification.
+
+### Changed
+
+- [`MaxParallelTasks`]({{ site.dcvb_parameters_reference }}capture-vision-template/max-parallel-tasks.html) now controls the total number of Work-level threads in the CVR thread pool. For DBR tasks, each Localization Work and Decoding Work occupies one thread slot. DLR and DDN tasks continue to occupy one thread per task.
+
+- [`set_device_friendly_name()`]({{ site.dcvb_android_api }}license/license-manager.html#set_device_friendly_name) now enforces parameter constraints: maximum 64 characters, allowed characters are letters (a-z, A-Z), digits (0-9), hyphen (-), underscore (_), and period (.), and must start and end with a letter or digit. Returns [`EC_PARAMETER_VALUE_INVALID`]({{ site.dcvb_android_api }}core/enum-error-code.html) if constraints are not met.
+
+- Improved the default display behavior of corner adjustment points in `ImageEditorView`. Previously, users had to tap the view before the corner adjustment points became visible.
+
+### Fixed
+
+- Fixed an issue in GS1-Databar AI `17` (YYMMDD) results where the month field could be missing a leading zero.
+
## 3.4.3000 (07/07/2026)
### Security Updates
diff --git a/programming/android/release-notes/index.md b/programming/android/release-notes/index.md
index f1c9971..2e013a6 100644
--- a/programming/android/release-notes/index.md
+++ b/programming/android/release-notes/index.md
@@ -9,6 +9,7 @@ noTitleIndex: true
# Release Notes Index - DynamsoftCaptureVisionBundle Android
+- [3.6.1000 (07/30/2026)](android-3.html#361000-07302026)
- [3.4.3000 (07/07/2026)](android-3.html#343000-07072026)
- [3.4.1300 (05/20/2026)](android-3.html#341300-05202026)
- [3.4.1200 (04/02/2026)](android-3.html#341200-04022026)
diff --git a/programming/ios/api-reference/capture-vision-router/single-file-processing.md b/programming/ios/api-reference/capture-vision-router/single-file-processing.md
index cff6e83..b16d796 100644
--- a/programming/ios/api-reference/capture-vision-router/single-file-processing.md
+++ b/programming/ios/api-reference/capture-vision-router/single-file-processing.md
@@ -16,6 +16,9 @@ noTitleIndex: true
| [`captureFromFileBytes`](#capturefromfilebytes) | Capture data from a given file in memory. |
| [`captureFromBuffer`](#capturefrombuffer) | Capture data from the memory buffer via a `DSImageData` object. |
| [`captureFromImage`](#capturefromimage) | Capture data from the given image. |
+| [`captureMultiPagesFromFile`](#capturemultipagesfromfile) | Capture data from a multi-page file specified by the file path. |
+| [`captureMultiPagesFromFileBytes`](#capturemultipagesfromfilebytes) | Capture data from a multi-page file in memory. |
+| [`captureMultiPagesFromFileFetcher`](#capturemultipagesfromfilefetcher) | Capture data from a multi-page file via a `DSFileFetcher`. |
## captureFromFile
@@ -191,3 +194,99 @@ Possible errors:
| EC_TEMPLATE_NAME_INVALID | -10036 | The target template name is invalid. |
| EC_CALL_REJECTED_WHEN_CAPTURING | -10062 | Function call is rejected when capturing in progress. |
| EC_MULTI_PAGES_NOT_SUPPORTED | -10066 | The api does not support multi-page files. Please use FileFetcher instead. |
+
+## captureMultiPagesFromFile
+
+Capture data from a multi-page file specified by the file path.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+- (NSArray *)captureMultiPagesFromFile:(NSString *)file
+ templateName:(NSString *)templateName;
+```
+2.
+```swift
+func captureMultiPagesFromFile(_ file: String, templateName: String) -> [CapturedResult]
+```
+
+**Parameters**
+
+`file`: The file path and name that you want to capture data from.
+
+`templateName`: Specifies a "CaptureVisionTemplate" to use. The following value are available for this parameter:
+
+- One of the [`DSPresetTemplate`]({{ site.dcv_ios_api }}capture-vision-router/enum/preset-template.html?lang=objc,swift) member. This is available only if you have never upload a new template via `initSettings` or `initSettingsFromFile`.
+- A string that represents one of the template name that you have uploaded via `initSettings` or `initSettingsFromFile`.
+- "" (empty string) to use the default template. The first template will be used if you have uploaded a template file via `initSettingsFromFile` or `initSettings`.
+
+**Return Value**
+
+An array of [`DSCapturedResult`]({{ site.dcv_ios_api }}capture-vision-router/auxiliary-classes/captured-result.html) objects.
+
+## captureMultiPagesFromFileBytes
+
+Capture data from a multi-page file in memory.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+- (NSArray *)captureMultiPagesFromFileBytes:(NSData *)fileBytes
+ templateName:(NSString *)templateName;
+```
+2.
+```swift
+func captureMultiPagesFromFileBytes(_ fileBytes: Data, templateName: String) -> [CapturedResult]
+```
+
+**Parameters**
+
+`fileBytes`: A `NSData` object that points to a file in memory.
+
+`templateName`: Specifies a "CaptureVisionTemplate" to use. The following value are available for this parameter:
+
+- One of the [`DSPresetTemplate`]({{ site.dcv_ios_api }}capture-vision-router/enum/preset-template.html?lang=objc,swift) member. This is available only if you have never upload a new template via `initSettings` or `initSettingsFromFile`.
+- A string that represents one of the template name that you have uploaded via `initSettings` or `initSettingsFromFile`.
+- "" (empty string) to use the default template. The first template will be used if you have uploaded a template file via `initSettingsFromFile` or `initSettings`.
+
+**Return Value**
+
+An array of [`DSCapturedResult`]({{ site.dcv_ios_api }}capture-vision-router/auxiliary-classes/captured-result.html) objects.
+
+## captureMultiPagesFromFileFetcher
+
+Capture data from a multi-page file via a [`DSFileFetcher`]({{ site.dcv_ios_api }}utility/file-fetcher.html).
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+- (NSArray *)captureMultiPagesFromFileFetcher:(DSFileFetcher *)fetcher
+ templateName:(NSString *)templateName;
+```
+2.
+```swift
+func captureMultiPagesFromFileFetcher(_ fetcher: FileFetcher, templateName: String) -> [CapturedResult]
+```
+
+**Parameters**
+
+`fetcher`: A [`DSFileFetcher`]({{ site.dcv_ios_api }}utility/file-fetcher.html) object.
+
+`templateName`: Specifies a "CaptureVisionTemplate" to use. The following value are available for this parameter:
+
+- One of the [`DSPresetTemplate`]({{ site.dcv_ios_api }}capture-vision-router/enum/preset-template.html?lang=objc,swift) member. This is available only if you have never upload a new template via `initSettings` or `initSettingsFromFile`.
+- A string that represents one of the template name that you have uploaded via `initSettings` or `initSettingsFromFile`.
+- "" (empty string) to use the default template. The first template will be used if you have uploaded a template file via `initSettingsFromFile` or `initSettings`.
+
+**Return Value**
+
+An array of [`DSCapturedResult`]({{ site.dcv_ios_api }}capture-vision-router/auxiliary-classes/captured-result.html) objects.
diff --git a/programming/ios/api-reference/core/enum/measure-unit.md b/programming/ios/api-reference/core/enum/measure-unit.md
new file mode 100644
index 0000000..d40bdf3
--- /dev/null
+++ b/programming/ios/api-reference/core/enum/measure-unit.md
@@ -0,0 +1,34 @@
+---
+layout: default-layout
+title: MeasureUnit - Dynamsoft Capture Vision iOS Enumerations
+description: The enumeration MeasureUnit of Dynamsoft Capture Vision iOS edition describes the unit of measurement for a value.
+keywords: measure unit, pixel, percentage
+codeAutoHeight: true
+---
+
+# Enumeration MeasureUnit
+
+`MeasureUnit` describes the unit of measurement for a value.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+typedef NS_ENUM(NSInteger, DSMeasureUnit) {
+ /**The value is an absolute pixel count.*/
+ DSMeasureUnitPixel = 0,
+ /**The value is a percentage of the reference dimension (e.g. 25 = 25%).*/
+ DSMeasureUnitPercentage = 1
+} NS_SWIFT_NAME(MeasureUnit);
+```
+2.
+```swift
+enum MeasureUnit : Int {
+ /**The value is an absolute pixel count.*/
+ case pixel = 0
+ /**The value is a percentage of the reference dimension (e.g. 25 = 25%).*/
+ case percentage = 1
+}
+```
diff --git a/programming/ios/api-reference/utility/enum/layout-element-source.md b/programming/ios/api-reference/utility/enum/layout-element-source.md
new file mode 100644
index 0000000..ff90769
--- /dev/null
+++ b/programming/ios/api-reference/utility/enum/layout-element-source.md
@@ -0,0 +1,38 @@
+---
+layout: default-layout
+title: LayoutElementSource - Dynamsoft Capture Vision iOS Enumerations
+description: The enumeration LayoutElementSource of Dynamsoft Capture Vision iOS edition describes the origin of a layout element.
+keywords: layout element source
+codeAutoHeight: true
+---
+
+# Enumeration LayoutElementSource
+
+`LayoutElementSource` describes the origin of a layout element.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+typedef NS_ENUM(NSInteger, DSLayoutElementSource) {
+ /**No element exists at this logical grid position.*/
+ DSLayoutElementSourceNone = 0,
+ /**Element is provided from the original input array.*/
+ DSLayoutElementSourceInput = 1,
+ /**Element is reconstructed or filled in by the algorithm.*/
+ DSLayoutElementSourceInferred = 2
+} NS_SWIFT_NAME(LayoutElementSource);
+```
+2.
+```swift
+enum LayoutElementSource : Int {
+ /**No element exists at this logical grid position.*/
+ case none = 0
+ /**Element is provided from the original input array.*/
+ case input = 1
+ /**Element is reconstructed or filled in by the algorithm.*/
+ case inferred = 2
+}
+```
diff --git a/programming/ios/api-reference/utility/enum/layout-pattern.md b/programming/ios/api-reference/utility/enum/layout-pattern.md
new file mode 100644
index 0000000..1b8417f
--- /dev/null
+++ b/programming/ios/api-reference/utility/enum/layout-pattern.md
@@ -0,0 +1,38 @@
+---
+layout: default-layout
+title: LayoutPattern - Dynamsoft Capture Vision iOS Enumerations
+description: The enumeration LayoutPattern of Dynamsoft Capture Vision iOS edition describes the layout pattern for quadrilateral analysis.
+keywords: layout pattern
+codeAutoHeight: true
+---
+
+# Enumeration LayoutPattern
+
+`LayoutPattern` describes the layout pattern for quadrilateral analysis.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+typedef NS_ENUM(NSInteger, DSLayoutPattern) {
+ /**Algorithm automatically detects the best layout pattern.*/
+ DSLayoutPatternUnknown = 0,
+ /**Elements are organized into sequential lines (rows or columns).*/
+ DSLayoutPatternLines = 1,
+ /**Elements are organized into a strict grid/matrix structure.*/
+ DSLayoutPatternMatrix = 2
+} NS_SWIFT_NAME(LayoutPattern);
+```
+2.
+```swift
+enum LayoutPattern : Int {
+ /**Algorithm automatically detects the best layout pattern.*/
+ case unknown = 0
+ /**Elements are organized into sequential lines (rows or columns).*/
+ case lines = 1
+ /**Elements are organized into a strict grid/matrix structure.*/
+ case matrix = 2
+}
+```
diff --git a/programming/ios/api-reference/utility/layout-analysis-parameter.md b/programming/ios/api-reference/utility/layout-analysis-parameter.md
new file mode 100644
index 0000000..df49c47
--- /dev/null
+++ b/programming/ios/api-reference/utility/layout-analysis-parameter.md
@@ -0,0 +1,108 @@
+---
+layout: default-layout
+title: DSLayoutAnalysisParameter - Dynamsoft Capture Vision iOS Edition API Reference
+description: The class DSLayoutAnalysisParameter of Dynamsoft Capture Vision iOS edition provides parameters for layout analysis.
+keywords: layout analysis parameter, objective-c, swift
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+---
+
+# DSLayoutAnalysisParameter
+
+The `DSLayoutAnalysisParameter` class provides parameters to constrain the layout analysis.
+
+## Definition
+
+*Assembly:* DynamsoftCaptureVisionBundle.xcframework
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NS_SWIFT_NAME(LayoutAnalysisParameter)
+@interface DSLayoutAnalysisParameter : NSObject
+```
+2.
+```swift
+class LayoutAnalysisParameter : NSObject
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+| --------- | ---- | ----------- |
+| [`pattern`](#pattern) | *DSLayoutPattern* | Desired layout pattern. Use DSLayoutPatternUnknown for auto-detection. |
+| [`axes`](#axes) | *NSArray \** | Configuration for primary axis [0] and secondary axis [1]. |
+| [`inputImageWidth`](#inputimagewidth) | *NSInteger* | Width of the reference image. Required when spacingUnit is MU_PERCENTAGE. |
+| [`inputImageHeight`](#inputimageheight) | *NSInteger* | Height of the reference image. Required when spacingUnit is MU_PERCENTAGE. |
+
+### pattern
+
+Desired layout pattern. Use DSLayoutPatternUnknown for auto-detection.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) DSLayoutPattern pattern;
+```
+2.
+```swift
+var pattern: LayoutPattern { get set }
+```
+
+### axes
+
+Configuration for primary axis [0] and secondary axis [1].
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, strong) NSArray *axes;
+```
+2.
+```swift
+var axes: [LayoutAxis] { get set }
+```
+
+### inputImageWidth
+
+Width of the reference image. Required when spacingUnit is MU_PERCENTAGE.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) NSInteger inputImageWidth;
+```
+2.
+```swift
+var inputImageWidth: Int { get set }
+```
+
+### inputImageHeight
+
+Height of the reference image. Required when spacingUnit is MU_PERCENTAGE.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) NSInteger inputImageHeight;
+```
+2.
+```swift
+var inputImageHeight: Int { get set }
+```
diff --git a/programming/ios/api-reference/utility/layout-analysis-result.md b/programming/ios/api-reference/utility/layout-analysis-result.md
new file mode 100644
index 0000000..0f6e8d8
--- /dev/null
+++ b/programming/ios/api-reference/utility/layout-analysis-result.md
@@ -0,0 +1,144 @@
+---
+layout: default-layout
+title: DSLayoutAnalysisResult - Dynamsoft Capture Vision iOS Edition API Reference
+description: The class DSLayoutAnalysisResult of Dynamsoft Capture Vision iOS edition represents the results of a layout analysis.
+keywords: layout analysis result, objective-c, swift
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+---
+
+# DSLayoutAnalysisResult
+
+The `DSLayoutAnalysisResult` class represents the comprehensive results of the layout analysis.
+
+## Definition
+
+*Assembly:* DynamsoftCaptureVisionBundle.xcframework
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NS_SWIFT_NAME(LayoutAnalysisResult)
+@interface DSLayoutAnalysisResult : NSObject
+```
+2.
+```swift
+class LayoutAnalysisResult : NSObject
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+| --------- | ---- | ----------- |
+| [`inferredQuads`](#inferredquads) | *NSArray \** | Array of newly generated quadrilaterals. |
+| [`elements`](#elements) | *NSArray \*> \** | A 2D array of layout elements [rowCount][colCount]. |
+| [`rowCount`](#rowcount) | *NSInteger* | Number of rows in the analyzed layout. |
+| [`colCount`](#colcount) | *NSInteger* | Maximum number of columns across all rows. |
+| [`detectedPattern`](#detectedpattern) | *DSLayoutPattern* | The actual layout pattern identified by the engine. |
+| [`errorCode`](#errorcode) | *NSInteger* | 0 for success, non-zero for error. |
+
+### inferredQuads
+
+Array of newly generated quadrilaterals.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, strong) NSArray *inferredQuads;
+```
+2.
+```swift
+var inferredQuads: [Quadrilateral] { get set }
+```
+
+### elements
+
+A 2D array of layout elements [rowCount][colCount].
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, strong) NSArray *> *elements;
+```
+2.
+```swift
+var elements: [[LayoutElement]] { get set }
+```
+
+### rowCount
+
+Number of rows in the analyzed layout.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) NSInteger rowCount;
+```
+2.
+```swift
+var rowCount: Int { get set }
+```
+
+### colCount
+
+Maximum number of columns across all rows.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) NSInteger colCount;
+```
+2.
+```swift
+var colCount: Int { get set }
+```
+
+### detectedPattern
+
+The actual layout pattern identified by the engine.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) DSLayoutPattern detectedPattern;
+```
+2.
+```swift
+var detectedPattern: LayoutPattern { get set }
+```
+
+### errorCode
+
+0 for success, non-zero for error.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) NSInteger errorCode;
+```
+2.
+```swift
+var errorCode: Int { get set }
+```
diff --git a/programming/ios/api-reference/utility/layout-analyzer.md b/programming/ios/api-reference/utility/layout-analyzer.md
new file mode 100644
index 0000000..c01be9f
--- /dev/null
+++ b/programming/ios/api-reference/utility/layout-analyzer.md
@@ -0,0 +1,91 @@
+---
+layout: default-layout
+title: DSLayoutAnalyzer - Dynamsoft Capture Vision iOS Edition API Reference
+description: The class DSLayoutAnalyzer of Dynamsoft Capture Vision iOS edition provides quadrilateral layout analysis functionality.
+keywords: layout analyzer, quadrilateral, objective-c, swift
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+---
+
+# DSLayoutAnalyzer
+
+The `DSLayoutAnalyzer` class provides static methods to analyze the spatial distribution of quadrilaterals.
+
+## Definition
+
+*Assembly:* DynamsoftCaptureVisionBundle.xcframework
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NS_SWIFT_NAME(LayoutAnalyzer)
+@interface DSLayoutAnalyzer : NSObject
+```
+2.
+```swift
+class LayoutAnalyzer : NSObject
+```
+
+## Methods
+
+| Method | Description |
+| ------ | ----------- |
+| [`analyze(inputQuads:)`](#analyzeinputquads) | Analyzes the spatial distribution of quadrilaterals. |
+| [`analyze(inputQuads:parameter:)`](#analyzeinputquadsparameter) | Analyzes the spatial distribution of quadrilaterals with optional constraints. |
+
+### analyze(inputQuads:)
+
+Analyzes the spatial distribution of quadrilaterals.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
++ (nullable DSLayoutAnalysisResult *)analyze:(NSArray *)inputQuads;
+```
+2.
+```swift
+class func analyze(_ inputQuads: [Quadrilateral]) -> LayoutAnalysisResult?
+```
+
+**Parameters**
+
+`inputQuads`: Array of input quadrilaterals.
+
+**Return Value**
+
+A [`DSLayoutAnalysisResult`](layout-analysis-result.md) object, or nil on failure.
+
+### analyze(inputQuads:parameter:)
+
+Analyzes the spatial distribution of quadrilaterals with optional constraints.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
++ (nullable DSLayoutAnalysisResult *)analyze:(NSArray *)inputQuads
+ parameter:(nullable DSLayoutAnalysisParameter *)parameter;
+```
+2.
+```swift
+class func analyze(_ inputQuads: [Quadrilateral], parameter: LayoutAnalysisParameter?) -> LayoutAnalysisResult?
+```
+
+**Parameters**
+
+`inputQuads`: Array of input quadrilaterals.
+
+`parameter`: Optional parameters to constrain the analysis.
+
+**Return Value**
+
+A [`DSLayoutAnalysisResult`](layout-analysis-result.md) object, or nil on failure.
diff --git a/programming/ios/api-reference/utility/layout-axis.md b/programming/ios/api-reference/utility/layout-axis.md
new file mode 100644
index 0000000..174608e
--- /dev/null
+++ b/programming/ios/api-reference/utility/layout-axis.md
@@ -0,0 +1,144 @@
+---
+layout: default-layout
+title: DSLayoutAxis - Dynamsoft Capture Vision iOS Edition API Reference
+description: The class DSLayoutAxis of Dynamsoft Capture Vision iOS edition provides axis configuration for layout analysis.
+keywords: layout axis, objective-c, swift
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+---
+
+# DSLayoutAxis
+
+The `DSLayoutAxis` class provides configuration for a single axis in layout analysis.
+
+## Definition
+
+*Assembly:* DynamsoftCaptureVisionBundle.xcframework
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NS_SWIFT_NAME(LayoutAxis)
+@interface DSLayoutAxis : NSObject
+```
+2.
+```swift
+class LayoutAxis : NSObject
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+| --------- | ---- | ----------- |
+| [`elementCount`](#elementcount) | *NSInteger* | Expected number of elements along this axis. Use -1 for auto-detection. |
+| [`isStaggered`](#isstaggered) | *BOOL* | Whether the layout uses an offset/staggered pattern. |
+| [`angle`](#angle) | *NSInteger* | Target angle [0, 180]. Use -1 for auto-detection. |
+| [`isEqualSpacing`](#isequalspacing) | *BOOL* | Force equal gaps between elements. When false, spacing is ignored. |
+| [`spacing`](#spacing) | *NSInteger* | Spacing between elements along this axis. Use -1 for auto-detection. |
+| [`spacingUnit`](#spacingunit) | *DSMeasureUnit* | Interpretation mode for the spacing value. |
+
+### elementCount
+
+Expected number of elements along this axis. Use -1 for auto-detection.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) NSInteger elementCount;
+```
+2.
+```swift
+var elementCount: Int { get set }
+```
+
+### isStaggered
+
+Whether the layout uses an offset/staggered pattern.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) BOOL isStaggered;
+```
+2.
+```swift
+var isStaggered: Bool { get set }
+```
+
+### angle
+
+Target angle [0, 180]. Use -1 for auto-detection.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) NSInteger angle;
+```
+2.
+```swift
+var angle: Int { get set }
+```
+
+### isEqualSpacing
+
+Force equal gaps between elements. When false, spacing is ignored.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) BOOL isEqualSpacing;
+```
+2.
+```swift
+var isEqualSpacing: Bool { get set }
+```
+
+### spacing
+
+Spacing between elements along this axis. Use -1 for auto-detection.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) NSInteger spacing;
+```
+2.
+```swift
+var spacing: Int { get set }
+```
+
+### spacingUnit
+
+Interpretation mode for the spacing value.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) DSMeasureUnit spacingUnit;
+```
+2.
+```swift
+var spacingUnit: MeasureUnit { get set }
+```
diff --git a/programming/ios/api-reference/utility/layout-element.md b/programming/ios/api-reference/utility/layout-element.md
new file mode 100644
index 0000000..9c2bddc
--- /dev/null
+++ b/programming/ios/api-reference/utility/layout-element.md
@@ -0,0 +1,72 @@
+---
+layout: default-layout
+title: DSLayoutElement - Dynamsoft Capture Vision iOS Edition API Reference
+description: The class DSLayoutElement of Dynamsoft Capture Vision iOS edition represents an element in a layout analysis.
+keywords: layout element, objective-c, swift
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+---
+
+# DSLayoutElement
+
+The `DSLayoutElement` class represents an element in a layout analysis.
+
+## Definition
+
+*Assembly:* DynamsoftCaptureVisionBundle.xcframework
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NS_SWIFT_NAME(LayoutElement)
+@interface DSLayoutElement : NSObject
+```
+2.
+```swift
+class LayoutElement : NSObject
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+| --------- | ---- | ----------- |
+| [`quad`](#quad) | *DSQuadrilateral \** | Geometric coordinates of the element. |
+| [`source`](#source) | *DSLayoutElementSource* | Origin of the element. |
+
+### quad
+
+Geometric coordinates of the element.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, strong) DSQuadrilateral *quad;
+```
+2.
+```swift
+var quad: Quadrilateral { get set }
+```
+
+### source
+
+Origin of the element.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, assign) DSLayoutElementSource source;
+```
+2.
+```swift
+var source: LayoutElementSource { get set }
+```
diff --git a/programming/ios/release-notes/index.md b/programming/ios/release-notes/index.md
index b1081d7..38f7c8c 100644
--- a/programming/ios/release-notes/index.md
+++ b/programming/ios/release-notes/index.md
@@ -9,6 +9,7 @@ noTitleIndex: true
# Release Notes Index - DynamsoftCaptureVisionBundle iOS
+- [3.6.1000 (07/30/2026)](ios-3.html#361000-07302026)
- [3.4.3000 (07/07/2026)](ios-3.html#343000-07072026)
- [3.4.1200 (04/02/2026)](ios-3.html#341200-04022026)
- [3.4.1000 (02/05/2026)](ios-3.html#341000-02052026)
diff --git a/programming/ios/release-notes/ios-3.md b/programming/ios/release-notes/ios-3.md
index f2d3b25..f70f39b 100644
--- a/programming/ios/release-notes/ios-3.md
+++ b/programming/ios/release-notes/ios-3.md
@@ -9,6 +9,65 @@ noTitleIndex: true
# Release Notes - DynamsoftCaptureVision iOS v3.x
+## 3.6.1000 (07/30/2026)
+
+### Highlights
+
+#### Multi-Threaded Barcode Decoding
+
+- **Get results sooner with parallel processing** - Barcode decoding now uses a breadth-first strategy that decomposes a single DBR Task into one Localization Work and one or more Decoding Works. This improves thread utilization and reduces the chance that a slow `DeblurMode` attempt blocks other faster decoding attempts, helping valid results come back sooner.
+
+#### DataMatrix Color Inversion Detection
+
+- **Handle normal and inverted DataMatrix more efficiently** - Added [`AutoDetectColorInversion`]({{ site.dcvb_parameters_reference }}barcode-format-specification/auto-detect-color-inversion.html) to automatically handle both normal and inverted DataMatrix barcodes. Instead of processing the whole image twice, the SDK applies dual-polarity handling only to localized DataMatrix regions, which makes processing faster in dual-polarity scenarios.
+
+#### Barcode Layout Analysis
+
+- **Decode dense grid barcodes more completely** - Added [`DSLayoutAnalyzer`]({{ site.dcvb_ios_api }}utility/layout-analyzer.html) to organize barcode locations into logical line or matrix layouts and infer unrecognized barcode regions when gaps exist, enabling workflows such as fast first-pass decoding, missing-region inference, and targeted second-pass decoding on dense N*M barcode layouts.
+
+#### Cross-Version License Support
+
+- **Use a single license across SDK versions** - Full License 1.0 keys (starting with "f") that are non-perpetual are no longer version-checked, so the same key can be used across SDK versions without reactivation.
+
+#### Text Line Orientation Detection
+
+- **Improved handling of rotated text lines** - Added [`OrientationDetectionModes`]({{ site.dcvb_parameters_reference }}label-recognizer-task-settings/orientation-detection-modes.html) to detect text line orientation and correct it for further processing. Two modes are available: `ODM_SPATIAL_REFERENCES` and `ODM_CHARS_ORIENTATION_NEURAL_NETWORK`.
+- **Current limitations** - This capability is currently effective only in MRZ scenarios and supports only upright and upside-down text lines (0 degrees and 180 degrees). It does not yet handle 90 degrees, 270 degrees, or arbitrary rotation angles.
+
+### New
+
+- Added [`AutoDetectColorInversion`]({{ site.dcvb_parameters_reference }}barcode-format-specification/auto-detect-color-inversion.html) parameter for `BarcodeFormatSpecification` to support automatic color-inversion detection for DataMatrix barcodes.
+
+- Added [`DSLayoutAnalyzer`]({{ site.dcvb_ios_api }}utility/layout-analyzer.html) class with [`analyze()`]({{ site.dcvb_ios_api }}utility/layout-analyzer.html#analyze) static method for quadrilateral layout analysis.
+
+- Added [`DSLayoutPattern`]({{ site.dcvb_ios_api }}utility/enum-layout-pattern.html) enumeration with values `DSLayoutPatternUnknown`, `DSLayoutPatternLines`, and `DSLayoutPatternMatrix`.
+
+- Added [`DSLayoutElementSource`]({{ site.dcvb_ios_api }}utility/enum-layout-element-source.html) enumeration with values `DSLayoutElementSourceNone`, `DSLayoutElementSourceInput`, and `DSLayoutElementSourceInferred`.
+
+- Added [`DSMeasureUnit`]({{ site.dcvb_ios_api }}core/enum-measure-unit.html) enumeration with values `DSMeasureUnitPixel` and `DSMeasureUnitPercentage`.
+
+- Added [`DSLayoutAxis`]({{ site.dcvb_ios_api }}utility/layout-axis.html), [`DSLayoutAnalysisParameter`]({{ site.dcvb_ios_api }}utility/layout-analysis-parameter.html), [`DSLayoutElement`]({{ site.dcvb_ios_api }}utility/layout-element.html), and [`DSLayoutAnalysisResult`]({{ site.dcvb_ios_api }}utility/layout-analysis-result.html) for layout analysis configuration and results.
+
+- Added a new `GridBarcodeScanner` sample (with `sample_grid.png`) to demonstrate how to use [`DSLayoutAnalyzer`]({{ site.dcvb_ios_api }}utility/layout-analyzer.html) for barcode grid layout detection and logical row/column mapping.
+
+- Added [`OrientationDetectionModes`]({{ site.dcvb_parameters_reference }}label-recognizer-task-settings/orientation-detection-modes.html) parameter for the [`SST_LOCALIZE_TEXT_LINES`]({{ site.dcvb_parameters_reference }}label-recognizer-task-settings/stage-localize-text-lines.html) stage with two supported modes: `ODM_SPATIAL_REFERENCES` and `ODM_CHARS_ORIENTATION_NEURAL_NETWORK`.
+
+- Added `TextLineOrientationCls.data` model file for text line orientation classification.
+
+### Changed
+
+- [`MaxParallelTasks`]({{ site.dcvb_parameters_reference }}capture-vision-template/max-parallel-tasks.html) now controls the total number of Work-level threads in the CVR thread pool. For DBR tasks, each Localization Work and Decoding Work occupies one thread slot. DLR and DDN tasks continue to occupy one thread per task.
+
+- [`set_device_friendly_name()`]({{ site.dcvb_ios_api }}license/license-manager.html#set_device_friendly_name) now enforces parameter constraints: maximum 64 characters, allowed characters are letters (a-z, A-Z), digits (0-9), hyphen (-), underscore (_), and period (.), and must start and end with a letter or digit. Returns [`EC_PARAMETER_VALUE_INVALID`]({{ site.dcvb_ios_api }}core/enum-error-code.html) if constraints are not met.
+
+- Replaced `ONNX` model format with `CoreML` model format, resulting in a smaller package size. Note: barcode localization using neural network models now requires a minimum deployment target of iOS 16.
+
+- Improved the default display behavior of corner adjustment points in `ImageEditorView`. Previously, users had to tap the view before the corner adjustment points became visible.
+
+### Fixed
+
+- Fixed an issue in GS1-Databar AI `17` (YYMMDD) results where the month field could be missing a leading zero.
+
## 3.4.3000 (07/07/2026)
### Security Updates