diff --git a/_includes/sidelist-programming/programming-cpp.html b/_includes/sidelist-programming/programming-cpp.html
index 144846f..47488db 100644
--- a/_includes/sidelist-programming/programming-cpp.html
+++ b/_includes/sidelist-programming/programming-cpp.html
@@ -26,7 +26,7 @@
@@ -282,15 +294,15 @@
CLicenseModule
- DynamsoftIdentityUtility
+ DynamsoftImageProcessing
- DynamsoftImageProcessing
+ DynamsoftIdentityUtility
diff --git a/_includes/sidelist-programming/programming-dotnet.html b/_includes/sidelist-programming/programming-dotnet.html
index f94fd49..503b311 100644
--- a/_includes/sidelist-programming/programming-dotnet.html
+++ b/_includes/sidelist-programming/programming-dotnet.html
@@ -232,6 +232,7 @@
EnumPDFReadingMode
EnumRasterDataSource
EnumRegionObjectElementType
+ MeasureUnit
EnumSectionType
EnumTransformMatrixType
EnumVideoFrameQuality
@@ -248,6 +249,11 @@
ImageIO
ImageProcessor
ImageDrawer
+ LayoutAnalyzer
+ LayoutAxis
+ LayoutAnalysisParameter
+ LayoutElement
+ LayoutAnalysisResult
MultiFrameResultCrossFilter
ProactiveImageSourceAdapter
UtilityModule
@@ -256,6 +262,8 @@
Enums
@@ -266,15 +274,15 @@
LicenseModule
- DynamsoftIdentityUtility
+ DynamsoftImageProcessing
- DynamsoftImageProcessing
+ DynamsoftIdentityUtility
diff --git a/_includes/sidelist-programming/programming-java.html b/_includes/sidelist-programming/programming-java.html
index f3017c0..a6f7c63 100644
--- a/_includes/sidelist-programming/programming-java.html
+++ b/_includes/sidelist-programming/programming-java.html
@@ -234,6 +234,7 @@
EnumPDFReadingMode
EnumRasterDataSource
EnumRegionObjectElementType
+ EnumMeasureUnit
EnumSectionType
EnumTransformMatrixType
EnumVideoFrameQuality
@@ -250,6 +251,11 @@
ImageIO
ImageProcessor
ImageDrawer
+ LayoutAnalyzer
+ LayoutAxis
+ LayoutAnalysisParameter
+ LayoutElement
+ LayoutAnalysisResult
MultiFrameResultCrossFilter
ProactiveImageSourceAdapter
UtilityException
@@ -259,6 +265,8 @@
Enums
@@ -271,15 +279,15 @@
LicenseModule
- DynamsoftIdentityUtility
+ DynamsoftImageProcessing
- DynamsoftImageProcessing
+ DynamsoftIdentityUtility
diff --git a/_includes/sidelist-programming/programming-python.html b/_includes/sidelist-programming/programming-python.html
index 0d48a73..4b0cab7 100644
--- a/_includes/sidelist-programming/programming-python.html
+++ b/_includes/sidelist-programming/programming-python.html
@@ -227,6 +227,7 @@
EnumPDFReadingMode
EnumRasterDataSource
EnumRegionObjectElementType
+ EnumMeasureUnit
EnumSectionType
EnumTransformMatrixType
EnumVideoFrameQuality
@@ -243,6 +244,11 @@
ImageIO
ImageProcessor
ImageDrawer
+ LayoutAnalyzer
+ LayoutAxis
+ LayoutAnalysisParameter
+ LayoutElement
+ LayoutAnalysisResult
MultiFrameResultCrossFilter
ProactiveImageSourceAdapter
UtilityModule
@@ -251,6 +257,8 @@
Enums
@@ -261,15 +269,15 @@
LicenseModule
- DynamsoftIdentityUtility
+ DynamsoftImageProcessing
- DynamsoftImageProcessing
+ DynamsoftIdentityUtility
diff --git a/_includes/sidelist-programming/sidelist-parameters-organization.html b/_includes/sidelist-programming/sidelist-parameters-organization.html
index 0edc79f..8b28955 100644
--- a/_includes/sidelist-programming/sidelist-parameters-organization.html
+++ b/_includes/sidelist-programming/sidelist-parameters-organization.html
@@ -182,6 +182,7 @@
@@ -425,6 +426,7 @@
- AllModuleDeviation
- AustralianPostEncodingTable
+ - AutoDetectColorInversion
- BarcodeAngleRangeArray
- BarcodeBytesLengthRangeArray
- BarcodeFormatIds
diff --git a/programming/cplusplus/api-reference/capture-vision-router/capture-vision-router.md b/programming/cplusplus/api-reference/capture-vision-router/capture-vision-router.md
index e002c10..9f62e79 100644
--- a/programming/cplusplus/api-reference/capture-vision-router/capture-vision-router.md
+++ b/programming/cplusplus/api-reference/capture-vision-router/capture-vision-router.md
@@ -10,7 +10,7 @@ breadcrumbText: CVR C++ CCaptureVisionRouter Class
# CCaptureVisionRouter
-The `CCaptureVisionRouter` class is what a user uses to interact with image-processing and semantic-processing products in their applications. It accepts an image source and returns processing results which may contain [Final results]({{site.dcvb_architecture}}output.html#final-results?lang=cpp) or [Intermediate Results]({{site.dcvb_architecture}}output.html#intermediate-results?lang=cpp).
+The `CCaptureVisionRouter` class is what a user uses to interact with image-processing and semantic-processing products in their applications. It accepts an image source and returns processing results which may contain [Final results]({{site.dcvb_architecture}}output.html#final-results) or [Intermediate Results]({{site.dcvb_architecture}}output.html#intermediate-results).
## Definition
diff --git a/programming/cplusplus/api-reference/capture-vision-router/enum-capture-state.md b/programming/cplusplus/api-reference/capture-vision-router/enum-capture-state.md
index 679ac25..4d25982 100644
--- a/programming/cplusplus/api-reference/capture-vision-router/enum-capture-state.md
+++ b/programming/cplusplus/api-reference/capture-vision-router/enum-capture-state.md
@@ -13,10 +13,6 @@ breadcrumbText: CaptureState
`CaptureState` describes the state of data capturing.
-
- >- C++
- >
->
```cpp
typedef enum CaptureState
{
diff --git a/programming/cplusplus/api-reference/capture-vision-router/enum-image-source-state.md b/programming/cplusplus/api-reference/capture-vision-router/enum-image-source-state.md
index 36a44f3..1e18584 100644
--- a/programming/cplusplus/api-reference/capture-vision-router/enum-image-source-state.md
+++ b/programming/cplusplus/api-reference/capture-vision-router/enum-image-source-state.md
@@ -15,10 +15,6 @@ codeAutoHeight: true
`ImageSourceState` describes the state of an object that conforms to the `ImageSourceAdapter` interface and is designated as the image source in a `CaptureVisionRouter` object.
-
- >- C++
- >
->
```cpp
typedef enum ImageSourceState
{
diff --git a/programming/cplusplus/api-reference/capture-vision-router/single-file-processing.md b/programming/cplusplus/api-reference/capture-vision-router/single-file-processing.md
index e1b45b7..eb96ae6 100644
--- a/programming/cplusplus/api-reference/capture-vision-router/single-file-processing.md
+++ b/programming/cplusplus/api-reference/capture-vision-router/single-file-processing.md
@@ -88,6 +88,7 @@ Processes an image or file containing multiple pages to derive important informa
```cpp
CCapturedResultArray* CaptureMultiPages(const char* filePath, const char* templateName="");
CCapturedResultArray* CaptureMultiPages(const unsigned char *fileBytes, int fileSize, const char* templateName="");
+CCapturedResultArray* CaptureMultiPages(utility::CFileFetcher* fileFetcher, const char* templateName="");
```
**Parameters**
@@ -100,6 +101,8 @@ CCapturedResultArray* CaptureMultiPages(const unsigned char *fileBytes, int file
`[in] fileSize` Specifies the size of the image in bytes.
+`[in] fileFetcher` Specifies a `CFileFetcher` instance that provides the files to process.
+
**Remarks**
- There are two types of `CaptureVisionTemplate`: the [preset ones]({{ site.dcvb_cpp_api }}capture-vision-router/auxiliary-classes/preset-template.html) which come with the SDK and the custom ones that get initialized when the user calls [InitSettings]({{ site.dcvb_cpp_api }}capture-vision-router/settings.html#initsettings) / [InitSettingsFromFile]({{ site.dcvb_cpp_api }}capture-vision-router/settings.html#initsettingsfromfile).
@@ -146,4 +149,5 @@ else
[CImageData]({{ site.dcvb_cpp_api }}core/basic-structures/image-data.html)
[CCapturedResultArray]({{ site.dcvb_cpp_api }}capture-vision-router/auxiliary-classes/captured-result-array.html)
-[CCapturedResult]({{ site.dcvb_cpp_api }}capture-vision-router/auxiliary-classes/captured-result.html)
\ No newline at end of file
+[CCapturedResult]({{ site.dcvb_cpp_api }}capture-vision-router/auxiliary-classes/captured-result.html)
+[CFileFetcher]({{ site.dcvb_cpp_api }}utility/file-fetcher.html)
\ No newline at end of file
diff --git a/programming/cplusplus/api-reference/core/basic-structures/pdf-reading-parameter.md b/programming/cplusplus/api-reference/core/basic-structures/pdf-reading-parameter.md
index ba5bada..0eefede 100644
--- a/programming/cplusplus/api-reference/core/basic-structures/pdf-reading-parameter.md
+++ b/programming/cplusplus/api-reference/core/basic-structures/pdf-reading-parameter.md
@@ -30,7 +30,7 @@ class CPDFReadingParameter
### mode
-The mode of PDF reading.
+The mode of PDF reading. Defaults to `PDFRM_MULTIMODAL`.
```cpp
PDFReadingMode mode
diff --git a/programming/cplusplus/api-reference/core/enum-buffer-overflow-protection-mode.md b/programming/cplusplus/api-reference/core/enum-buffer-overflow-protection-mode.md
index 55e1262..87fef4a 100644
--- a/programming/cplusplus/api-reference/core/enum-buffer-overflow-protection-mode.md
+++ b/programming/cplusplus/api-reference/core/enum-buffer-overflow-protection-mode.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`BufferOverflowProtectionMode` describes the protection modes to manage situations when the `ImageSourceAdapter`'s buffer exceeds its capacity.
-
- >- C++
- >
->
```cpp
typedef enum BufferOverflowProtectionMode
{
diff --git a/programming/cplusplus/api-reference/core/enum-captured-result-item-type.md b/programming/cplusplus/api-reference/core/enum-captured-result-item-type.md
index 75fa276..f53053d 100644
--- a/programming/cplusplus/api-reference/core/enum-captured-result-item-type.md
+++ b/programming/cplusplus/api-reference/core/enum-captured-result-item-type.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`CapturedResultItemType` defines the various categories of items that can be recognized and captured.
-
- >- C++
- >
->
```cpp
typedef enum CapturedResultItemType
{
diff --git a/programming/cplusplus/api-reference/core/enum-colour-channel-usage-type.md b/programming/cplusplus/api-reference/core/enum-colour-channel-usage-type.md
index 3093eb7..3560826 100644
--- a/programming/cplusplus/api-reference/core/enum-colour-channel-usage-type.md
+++ b/programming/cplusplus/api-reference/core/enum-colour-channel-usage-type.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`ColourChannelUsageType` enumerates the different ways color channels can be utilized in image processing. This allows for flexible image analysis and manipulation by specifying how color data should be handled.
-
- >- C++
- >
->
```cpp
typedef enum ColourChannelUsageType
{
diff --git a/programming/cplusplus/api-reference/core/enum-corner-type.md b/programming/cplusplus/api-reference/core/enum-corner-type.md
index d7b8ed4..71565f5 100644
--- a/programming/cplusplus/api-reference/core/enum-corner-type.md
+++ b/programming/cplusplus/api-reference/core/enum-corner-type.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`CornerType` categorizes the nature of a corner based on the intersection of its adjoining sides.
-
- >- C++
- >
->
```cpp
typedef enum CornerType
{
diff --git a/programming/cplusplus/api-reference/core/enum-cross-verification-status.md b/programming/cplusplus/api-reference/core/enum-cross-verification-status.md
index bf5f7f3..948857c 100644
--- a/programming/cplusplus/api-reference/core/enum-cross-verification-status.md
+++ b/programming/cplusplus/api-reference/core/enum-cross-verification-status.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`CrossVerificationStatus` describes the status of the captured results.
-
- >- C++
- >
->
```cpp
typedef enum CrossVerificationStatus
{
diff --git a/programming/cplusplus/api-reference/core/enum-error-code.md b/programming/cplusplus/api-reference/core/enum-error-code.md
index 675bb8c..e1a347e 100644
--- a/programming/cplusplus/api-reference/core/enum-error-code.md
+++ b/programming/cplusplus/api-reference/core/enum-error-code.md
@@ -10,10 +10,6 @@ codeAutoHeight: true
`ErrorCode` enumerates the specific error codes that the SDK may return, providing a systematic way to identify and handle errors encountered during its operation.
-
- >- C++
- >
->
```cpp
typedef enum ErrorCode
{
diff --git a/programming/cplusplus/api-reference/core/enum-grayscale-enhancement-mode.md b/programming/cplusplus/api-reference/core/enum-grayscale-enhancement-mode.md
index d166dc3..562b3f5 100644
--- a/programming/cplusplus/api-reference/core/enum-grayscale-enhancement-mode.md
+++ b/programming/cplusplus/api-reference/core/enum-grayscale-enhancement-mode.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`GrayscaleEnhancementMode` specifies the method employed to enhance images in grayscale.
-
- >- C++
- >
->
```cpp
typedef enum GrayscaleEnhancementMode
{
diff --git a/programming/cplusplus/api-reference/core/enum-grayscale-transformation-mode.md b/programming/cplusplus/api-reference/core/enum-grayscale-transformation-mode.md
index eb2c927..a05d723 100644
--- a/programming/cplusplus/api-reference/core/enum-grayscale-transformation-mode.md
+++ b/programming/cplusplus/api-reference/core/enum-grayscale-transformation-mode.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`GrayscaleTransformationMode` specifies the method employed to transform images in grayscale.
-
- >- C++
- >
->
```cpp
typedef enum GrayscaleTransformationMode
{
diff --git a/programming/cplusplus/api-reference/core/enum-image-capture-distance-mode.md b/programming/cplusplus/api-reference/core/enum-image-capture-distance-mode.md
index d8c20d3..a8c71b6 100644
--- a/programming/cplusplus/api-reference/core/enum-image-capture-distance-mode.md
+++ b/programming/cplusplus/api-reference/core/enum-image-capture-distance-mode.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`ImageCaptureDistanceMode` describes the shooting mode of the image. It is used in the `overlap` mode of `Panorama`.
-
- >- C++
- >
->
```cpp
typedef enum ImageCaptureDistanceMode
{
diff --git a/programming/cplusplus/api-reference/core/enum-image-file-format.md b/programming/cplusplus/api-reference/core/enum-image-file-format.md
index b465a17..19103c3 100644
--- a/programming/cplusplus/api-reference/core/enum-image-file-format.md
+++ b/programming/cplusplus/api-reference/core/enum-image-file-format.md
@@ -15,10 +15,6 @@ codeAutoHeight: true
`ImageFileFormat` categorizes the possible formats of image files.
-
- >- C++
- >
->
```cpp
typedef enum ImageFileFormat
{
diff --git a/programming/cplusplus/api-reference/core/enum-image-pixel-format.md b/programming/cplusplus/api-reference/core/enum-image-pixel-format.md
index 1a2a889..9241558 100644
--- a/programming/cplusplus/api-reference/core/enum-image-pixel-format.md
+++ b/programming/cplusplus/api-reference/core/enum-image-pixel-format.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`ImagePixelFormat` defines the range of pixel formats that an image can have, specifying how color and transparency data are represented in each pixel of the image.
-
- >- C++
- >
->
```cpp
typedef enum ImagePixelFormat
{
diff --git a/programming/cplusplus/api-reference/core/enum-image-tag-type.md b/programming/cplusplus/api-reference/core/enum-image-tag-type.md
index 2778d23..aa75be5 100644
--- a/programming/cplusplus/api-reference/core/enum-image-tag-type.md
+++ b/programming/cplusplus/api-reference/core/enum-image-tag-type.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`ImageTagType` categorizes images based on their source, distinguishing between images extracted from video streams (video frame) and those loaded from static files (file image).
-
- >- C++
- >
->
```cpp
typedef enum ImageTagType
{
diff --git a/programming/cplusplus/api-reference/core/enum-measure-unit.md b/programming/cplusplus/api-reference/core/enum-measure-unit.md
new file mode 100644
index 0000000..7819e09
--- /dev/null
+++ b/programming/cplusplus/api-reference/core/enum-measure-unit.md
@@ -0,0 +1,25 @@
+---
+layout: default-layout
+title: MeasureUnit - Dynamsoft Core Enumerations
+description: Reference for the MeasureUnit enumeration in Dynamsoft Core C++ Edition, specifying how a numeric value is interpreted relative to a reference dimension.
+keywords: MeasureUnit, pixel, percentage
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+breadcrumbText: MeasureUnit
+codeAutoHeight: true
+---
+
+# Enumeration MeasureUnit
+
+`MeasureUnit` specifies how a numeric value should be interpreted relative to a reference dimension. It is used wherever a numeric parameter (e.g., spacing, ROI coordinates) can be expressed either as an absolute pixel count or as a proportion of a reference size.
+
+```cpp
+typedef enum MeasureUnit
+{
+ /** The value is an absolute pixel count. */
+ MU_PIXEL = 0,
+ /** The value is a percentage of the reference dimension (e.g. 25 = 25%). */
+ MU_PERCENTAGE = 1
+} MeasureUnit;
+```
diff --git a/programming/cplusplus/api-reference/core/enum-pdf-reading-mode.md b/programming/cplusplus/api-reference/core/enum-pdf-reading-mode.md
index eca3b57..4a20b21 100644
--- a/programming/cplusplus/api-reference/core/enum-pdf-reading-mode.md
+++ b/programming/cplusplus/api-reference/core/enum-pdf-reading-mode.md
@@ -14,20 +14,23 @@ codeAutoHeight: true
`PDFReadingMode` describes the PDF reading modes.
-
- >- C++
- >
->
```cpp
typedef enum PDFReadingMode
{
- /** Outputs vector data found in the PDFs. */
+ /**
+ * Deprecated. Covered by PDFRM_MULTIMODAL.
+ */
PDFRM_VECTOR = 0x01,
- /** The default value.
- * Outputs raster data found in the PDFs.
- * Depending on the argument Resolution, the SDK may rasterize the PDF pages.
- * Check the template for available argument settings. */
+ /**
+ * Renders the entire page as a bitmap regardless of object type.
+ */
PDFRM_RASTER = 0x02,
+ /**
+ * Extracts multimodal information from a PDF, including vector graphics,
+ * text content, and embedded images, which can be used for subsequent
+ * tasks such as barcode reading, text recognition, and document analysis.
+ */
+ PDFRM_MULTIMODAL = 0x03,
/** Reserved setting for PDF reading mode.*/
#if defined(_WIN32) || defined(_WIN64)
PDFRM_REV = 0x80000000,
diff --git a/programming/cplusplus/api-reference/core/enum-raster-data-source.md b/programming/cplusplus/api-reference/core/enum-raster-data-source.md
index 1c5705d..49d1630 100644
--- a/programming/cplusplus/api-reference/core/enum-raster-data-source.md
+++ b/programming/cplusplus/api-reference/core/enum-raster-data-source.md
@@ -13,10 +13,6 @@ breadcrumbText: RasterDataSource
`RasterDataSource` describes the target types.
-
- >- C++
- >
->
```cpp
typedef enum RasterDataSource
{
diff --git a/programming/cplusplus/api-reference/core/enum-region-object-element-type.md b/programming/cplusplus/api-reference/core/enum-region-object-element-type.md
index 6f2a31d..dc62d1e 100644
--- a/programming/cplusplus/api-reference/core/enum-region-object-element-type.md
+++ b/programming/cplusplus/api-reference/core/enum-region-object-element-type.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`RegionObjectElementType` specifies the exact subclass type within the `RegionObjectElement` hierarchy. This enumeration facilitates the identification and differentiation of various processed elements in an image.
-
- >- C++
- >
->
```cpp
typedef enum RegionObjectElementType
{
diff --git a/programming/cplusplus/api-reference/core/enum-section-type.md b/programming/cplusplus/api-reference/core/enum-section-type.md
index 980539a..2eda848 100644
--- a/programming/cplusplus/api-reference/core/enum-section-type.md
+++ b/programming/cplusplus/api-reference/core/enum-section-type.md
@@ -15,10 +15,6 @@ codeAutoHeight: true
`SectionType` categorizes the distinct segments within the image processing algorithm, pinpointing the exact phase responsible for generating a specific `IntermediateResult`.
-
- >- C++
- >
->
```cpp
typedef enum SectionType
{
diff --git a/programming/cplusplus/api-reference/core/enum-target-type.md b/programming/cplusplus/api-reference/core/enum-target-type.md
index 450a3a0..bebc99f 100644
--- a/programming/cplusplus/api-reference/core/enum-target-type.md
+++ b/programming/cplusplus/api-reference/core/enum-target-type.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`TargetType` describes the target types.
-
- >- C++
- >
->
```cpp
typedef enum TargetType
{
diff --git a/programming/cplusplus/api-reference/core/enum-transform-matrix-type.md b/programming/cplusplus/api-reference/core/enum-transform-matrix-type.md
index 841418b..bc9b792 100644
--- a/programming/cplusplus/api-reference/core/enum-transform-matrix-type.md
+++ b/programming/cplusplus/api-reference/core/enum-transform-matrix-type.md
@@ -13,10 +13,6 @@ breadcrumbText: TransformMatrixType
`TransformMatrixType` describes the transform matrix types.
-
- >- C++
- >
->
```cpp
typedef enum TransformMatrixType
{
diff --git a/programming/cplusplus/api-reference/core/enum-video-frame-quality.md b/programming/cplusplus/api-reference/core/enum-video-frame-quality.md
index 2a919c2..b801441 100644
--- a/programming/cplusplus/api-reference/core/enum-video-frame-quality.md
+++ b/programming/cplusplus/api-reference/core/enum-video-frame-quality.md
@@ -14,10 +14,6 @@ codeAutoHeight: true
`VideoFrameQuality` describes the quality of video frames.
-
- >- C++
- >
->
```cpp
typedef enum VideoFrameQuality {
/**The frame quality is measured to be high.*/
diff --git a/programming/cplusplus/api-reference/id-utility/identity-processor.md b/programming/cplusplus/api-reference/id-utility/identity-processor.md
index 9eb77ea..9d73035 100644
--- a/programming/cplusplus/api-reference/id-utility/identity-processor.md
+++ b/programming/cplusplus/api-reference/id-utility/identity-processor.md
@@ -40,6 +40,14 @@ int FindPortraitZone(const CScaledColourImageUnit* scaledColourImgUnit,
const CDetectedQuadsUnit* detectedQuadsUnit,
const CDeskewedImageUnit* deskewedImageUnit,
CQuadrilateral& portraitZone);
+
+int FindPortraitZone(const CScaledColourImageUnit* scaledColourImgUnit,
+ const CLocalizedTextLinesUnit* localizedTextLinesUnit,
+ const CRecognizedTextLinesUnit* recognizedTextLinesUnit,
+ const CDetectedQuadsUnit* detectedQuadsUnit,
+ const CDeskewedImageUnit* deskewedImageUnit,
+ CQuadrilateral& portraitZone,
+ bool& isBlankPortrait);
```
**Parameters**
@@ -56,6 +64,8 @@ int FindPortraitZone(const CScaledColourImageUnit* scaledColourImgUnit,
`[out] portraitZone` The output quadrilateral representing the portrait zone location. Returns an empty quadrilateral if not found.
+`[out] isBlankPortrait` A boolean indicating whether the portrait zone is considered blank.
+
**Return Value**
Returns 0 if successful, otherwise returns an error code.
diff --git a/programming/cplusplus/api-reference/index.md b/programming/cplusplus/api-reference/index.md
index 7761e15..d77ef11 100644
--- a/programming/cplusplus/api-reference/index.md
+++ b/programming/cplusplus/api-reference/index.md
@@ -39,8 +39,8 @@ needAutoGenerateSidebar: false
### Enums
-- [`CaptureState`]({{ site.dcvb_cpp_api }}capture-vision-router/enum-capture-state.html?lang=cpp)
-- [`ImageSourceState`]({{ site.dcvb_cpp_api }}capture-vision-router/enum-image-source-state.html?lang=cpp)
+- [`CaptureState`]({{ site.dcvb_cpp_api }}capture-vision-router/enum-capture-state.html)
+- [`ImageSourceState`]({{ site.dcvb_cpp_api }}capture-vision-router/enum-image-source-state.html)
## DynamsoftBarcodeReader
@@ -74,11 +74,11 @@ needAutoGenerateSidebar: false
### Enums
-- [`BarcodeFormat`]({{ site.dbr_cpp_api }}enum-barcode-format.html?lang=cpp)
-- [`DeblurMode`]({{ site.dbr_cpp_api }}enum-deblur-mode.html?lang=cpp)
-- [`ExtendedBarcodeResultType`]({{ site.dbr_cpp_api }}enum-extended-barcode-result-type.html?lang=cpp)
-- [`LocalizationMode`]({{ site.dbr_cpp_api }}enum-localization-mode.html?lang=cpp)
-- [`QRCodeErrorCorrectionLevel`]({{ site.dbr_cpp_api }}enum-qr-code-error-correction-level.html?lang=cpp)
+- [`BarcodeFormat`]({{ site.dbr_cpp_api }}enum-barcode-format.html)
+- [`DeblurMode`]({{ site.dbr_cpp_api }}enum-deblur-mode.html)
+- [`ExtendedBarcodeResultType`]({{ site.dbr_cpp_api }}enum-extended-barcode-result-type.html)
+- [`LocalizationMode`]({{ site.dbr_cpp_api }}enum-localization-mode.html)
+- [`QRCodeErrorCorrectionLevel`]({{ site.dbr_cpp_api }}enum-qr-code-error-correction-level.html)
## DynamsoftLabelRecognizer
@@ -128,7 +128,7 @@ needAutoGenerateSidebar: false
### Enums
-- [`ImageColourMode`]({{ site.ddn_cpp_api }}enum-image-colour-mode.html?lang=cpp)
+- [`ImageColourMode`]({{ site.ddn_cpp_api }}enum-image-colour-mode.html)
## DynamsoftCodeParser
@@ -141,8 +141,8 @@ needAutoGenerateSidebar: false
### Enums
-- [`MappingStatus`]({{ site.dcp_cpp_api }}enum-mapping-status.html?lang=cpp)
-- [`ValiadtionStatus`]({{ site.dcp_cpp_api }}enum-validation-status.html?lang=cpp)
+- [`MappingStatus`]({{ site.dcp_cpp_api }}enum-mapping-status.html)
+- [`ValiadtionStatus`]({{ site.dcp_cpp_api }}enum-validation-status.html)
## DynamsoftCore
@@ -197,25 +197,26 @@ needAutoGenerateSidebar: false
### Enums
-- [`BufferOverflowProtectionMode`]({{ site.dcvb_cpp_api }}core/enum-buffer-overflow-protection-mode.html?lang=cpp)
-- [`CapturedResultItemType`]({{ site.dcvb_cpp_api }}core/enum-captured-result-item-type.html?lang=cpp)
-- [`ColourChannelUsageType`]({{ site.dcvb_cpp_api }}core/enum-colour-channel-usage-type.html?lang=cpp)
-- [`CornerType`]({{ site.dcvb_cpp_api }}core/enum-corner-type.html?lang=cpp)
-- [`CrossVerificationStatus`]({{ site.dcvb_cpp_api }}core/enum-cross-verification-status.html?lang=cpp)
-- [`ErrorCode`]({{ site.dcvb_cpp_api }}core/enum-error-code.html?lang=cpp)
-- [`GrayscaleEnhancementMode`]({{ site.dcvb_cpp_api }}core/enum-grayscale-enhancement-mode.html?lang=cpp)
-- [`GrayscaleTransformationMode`]({{ site.dcvb_cpp_api }}core/enum-grayscale-transformation-mode.html?lang=cpp)
-- [`ImageCaptureDistanceMode`]({{ site.dcvb_cpp_api }}core/enum-image-capture-distance-mode.html?lang=cpp)
-- [`ImageFileFormat`]({{ site.dcvb_cpp_api }}core/enum-image-file-format.html?lang=cpp)
-- [`ImagePixelFormat`]({{ site.dcvb_cpp_api }}core/enum-image-pixel-format.html?lang=cpp)
-- [`ImageTagType`]({{ site.dcvb_cpp_api }}core/enum-image-tag-type.html?lang=cpp)
-- [`IntermediateResultUnitType`]({{ site.dcvb_cpp_api }}core/enum-intermediate-result-unit-type.html?lang=cpp)
-- [`PDFReadingMode`]({{ site.dcvb_cpp_api }}core/enum-pdf-reading-mode.html?lang=cpp)
-- [`RasterDataSource`]({{ site.dcvb_cpp_api }}core/enum-raster-data-source.html?lang=cpp)
-- [`RegionObjectElementType`]({{ site.dcvb_cpp_api }}core/enum-region-object-element-type.html?lang=cpp)
-- [`SectionType`]({{ site.dcvb_cpp_api }}core/enum-section-type.html?lang=cpp)
-- [`TransformMatrixType`]({{ site.dcvb_cpp_api }}core/enum-transform-matrix-type.html?lang=cpp)
-- [`VideoFrameQuality`]({{ site.dcvb_cpp_api }}core/enum-video-frame-quality.html?lang=cpp)
+- [`BufferOverflowProtectionMode`]({{ site.dcvb_cpp_api }}core/enum-buffer-overflow-protection-mode.html)
+- [`CapturedResultItemType`]({{ site.dcvb_cpp_api }}core/enum-captured-result-item-type.html)
+- [`ColourChannelUsageType`]({{ site.dcvb_cpp_api }}core/enum-colour-channel-usage-type.html)
+- [`CornerType`]({{ site.dcvb_cpp_api }}core/enum-corner-type.html)
+- [`CrossVerificationStatus`]({{ site.dcvb_cpp_api }}core/enum-cross-verification-status.html)
+- [`ErrorCode`]({{ site.dcvb_cpp_api }}core/enum-error-code.html)
+- [`GrayscaleEnhancementMode`]({{ site.dcvb_cpp_api }}core/enum-grayscale-enhancement-mode.html)
+- [`GrayscaleTransformationMode`]({{ site.dcvb_cpp_api }}core/enum-grayscale-transformation-mode.html)
+- [`ImageCaptureDistanceMode`]({{ site.dcvb_cpp_api }}core/enum-image-capture-distance-mode.html)
+- [`ImageFileFormat`]({{ site.dcvb_cpp_api }}core/enum-image-file-format.html)
+- [`ImagePixelFormat`]({{ site.dcvb_cpp_api }}core/enum-image-pixel-format.html)
+- [`ImageTagType`]({{ site.dcvb_cpp_api }}core/enum-image-tag-type.html)
+- [`IntermediateResultUnitType`]({{ site.dcvb_cpp_api }}core/enum-intermediate-result-unit-type.html)
+- [`PDFReadingMode`]({{ site.dcvb_cpp_api }}core/enum-pdf-reading-mode.html)
+- [`RasterDataSource`]({{ site.dcvb_cpp_api }}core/enum-raster-data-source.html)
+- [`RegionObjectElementType`]({{ site.dcvb_cpp_api }}core/enum-region-object-element-type.html)
+- [`MeasureUnit`]({{ site.dcvb_cpp_api }}core/enum-measure-unit.html)
+- [`SectionType`]({{ site.dcvb_cpp_api }}core/enum-section-type.html)
+- [`TransformMatrixType`]({{ site.dcvb_cpp_api }}core/enum-transform-matrix-type.html)
+- [`VideoFrameQuality`]({{ site.dcvb_cpp_api }}core/enum-video-frame-quality.html)
## DynamsoftUtility
@@ -226,13 +227,23 @@ needAutoGenerateSidebar: false
- [`CImageDrawer`]({{ site.dcvb_cpp_api }}utility/image-drawer.html)
- [`CImageIO`]({{ site.dcvb_cpp_api }}utility/image-io.html)
- [`CImageProcessor`]({{ site.dcvb_cpp_api }}utility/image-processor.html)
+- [`CLayoutAnalyzer`]({{ site.dcvb_cpp_api }}utility/layout-analyzer.html)
- [`CMultiFrameResultCrossFilter`]({{ site.dcvb_cpp_api }}utility/multi-frame-result-cross-filter.html)
- [`CProactiveImageSourceAdapter`]({{ site.dcvb_cpp_api }}utility/proactive-image-source-adapter.html)
- [`CUtilityModule`]({{ site.dcvb_cpp_api }}utility/utility-module.html)
+### Structs
+
+- [`LayoutAxis`]({{ site.dcvb_cpp_api }}utility/layout-axis.html)
+- [`LayoutAnalysisParameter`]({{ site.dcvb_cpp_api }}utility/layout-analysis-parameter.html)
+- [`LayoutElement`]({{ site.dcvb_cpp_api }}utility/layout-element.html)
+- [`LayoutAnalysisResult`]({{ site.dcvb_cpp_api }}utility/layout-analysis-result.html)
+
### Enums
- [`FilterType`]({{ site.dcvb_cpp_api }}utility/enum-filter-type.html)
+- [`LayoutPattern`]({{ site.dcvb_cpp_api }}utility/enum-layout-pattern.html)
+- [`LayoutElementSource`]({{ site.dcvb_cpp_api }}utility/enum-layout-element-source.html)
## DynamsoftLicense
@@ -242,6 +253,8 @@ needAutoGenerateSidebar: false
## DynamsoftImageProcessing
+### Classes
+
- [`CImageProcessingModule`]({{ site.dcvb_cpp_api }}image-processing/image-processing-module.html)
diff --git a/programming/cplusplus/api-reference/license/license-manager.md b/programming/cplusplus/api-reference/license/license-manager.md
index 1d51b74..90b6be7 100644
--- a/programming/cplusplus/api-reference/license/license-manager.md
+++ b/programming/cplusplus/api-reference/license/license-manager.md
@@ -60,12 +60,23 @@ static int SetDeviceFriendlyName(const char* name)
**Parameters**
-`[in] name` The friendly name of the device. If the length exceeds 255, it will be truncated.
+`[in] name` The friendly name of the device. It must satisfy all of the following constraints:
+
+- Maximum length: 64 characters.
+- Allowed characters: are letters (a-z, A-Z), digits (0-9), hyphen (-), underscore (_), and period (.)
+- Must start and end with a letter or digit (not `-`, `_`, or `.`).
+
+If the name does not meet these requirements, the function returns the error code `EC_PARAMETER_VALUE_INVALID`.
**Return value**
Returns 0 if the friendly name is set successfully, a negative value indicating an error otherwise.
+| Error Code | Value | Description |
+|---|---|---|
+| `EC_OK` | 0 | The friendly name is set successfully. |
+| `EC_PARAMETER_VALUE_INVALID` | -10038 | The name is invalid. It is either empty, exceeds 64 characters, contains disallowed characters, or starts/ends with a symbol. |
+
**Remarks**
This function must be called before function `InitLicense` to ensure correct functionality.
diff --git a/programming/cplusplus/api-reference/utility/enum-filter-type.md b/programming/cplusplus/api-reference/utility/enum-filter-type.md
index f03d361..0e22fe4 100644
--- a/programming/cplusplus/api-reference/utility/enum-filter-type.md
+++ b/programming/cplusplus/api-reference/utility/enum-filter-type.md
@@ -10,10 +10,6 @@ codeAutoHeight: true
`FilterType` describes the specified image filter applied to an input image.
-
- >- C++
- >
->
```cpp
typedef enum FilterType
{
diff --git a/programming/cplusplus/api-reference/utility/enum-layout-element-source.md b/programming/cplusplus/api-reference/utility/enum-layout-element-source.md
new file mode 100644
index 0000000..3db2a56
--- /dev/null
+++ b/programming/cplusplus/api-reference/utility/enum-layout-element-source.md
@@ -0,0 +1,26 @@
+---
+layout: default-layout
+title: LayoutElementSource - Dynamsoft Utility Enumerations
+description: Reference for the LayoutElementSource enumeration in Dynamsoft Utility C++ Edition, indicating the origin of an element in layout analysis results.
+keywords: LayoutElementSource, layout element, inferred, input
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+codeAutoHeight: true
+---
+
+# Enumeration LayoutElementSource
+
+`LayoutElementSource` indicates the origin of a layout element.
+
+```cpp
+typedef enum LayoutElementSource
+{
+ /** No element exists at this logical grid position (used for alignment in non-uniform rows). */
+ LES_NONE = 0,
+ /** Element is provided from the original input array. */
+ LES_INPUT = 1,
+ /** Element is reconstructed or filled in by the algorithm. */
+ LES_INFERRED = 2
+} LayoutElementSource;
+```
diff --git a/programming/cplusplus/api-reference/utility/enum-layout-pattern.md b/programming/cplusplus/api-reference/utility/enum-layout-pattern.md
new file mode 100644
index 0000000..8ebdd32
--- /dev/null
+++ b/programming/cplusplus/api-reference/utility/enum-layout-pattern.md
@@ -0,0 +1,26 @@
+---
+layout: default-layout
+title: LayoutPattern - Dynamsoft Utility Enumerations
+description: Reference for the LayoutPattern enumeration in Dynamsoft Utility C++ Edition, defining strategies for organizing quadrilaterals in layout analysis.
+keywords: LayoutPattern, layout, lines, matrix
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+codeAutoHeight: true
+---
+
+# Enumeration LayoutPattern
+
+`LayoutPattern` defines the strategy for the layout engine to organize quadrilaterals.
+
+```cpp
+typedef enum LayoutPattern
+{
+ /** Algorithm automatically detects the best layout pattern. */
+ LP_UNKNOWN = 0,
+ /** Elements are organized into sequential lines (rows or columns). */
+ LP_LINES = 1,
+ /** Elements are organized into a strict grid/matrix structure. */
+ LP_MATRIX = 2
+} LayoutPattern;
+```
diff --git a/programming/cplusplus/api-reference/utility/layout-analysis-parameter.md b/programming/cplusplus/api-reference/utility/layout-analysis-parameter.md
new file mode 100644
index 0000000..5c305be
--- /dev/null
+++ b/programming/cplusplus/api-reference/utility/layout-analysis-parameter.md
@@ -0,0 +1,77 @@
+---
+layout: default-layout
+title: LayoutAnalysisParameter - Dynamsoft Utility C++ Edition API Reference
+description: API reference for the LayoutAnalysisParameter structure in Dynamsoft Utility C++ Edition, providing input parameters to guide quadrilateral layout analysis.
+keywords: LayoutAnalysisParameter, layout analysis, parameter
+needAutoGenerateSidebar: true
+---
+
+# LayoutAnalysisParameter
+
+The `LayoutAnalysisParameter` structure holds input parameters to guide the layout analysis.
+
+## Definition
+
+*Assembly:* DynamsoftUtility
+
+*Header File:* DynamsoftUtility.h
+
+```cpp
+typedef struct LayoutAnalysisParameter
+{
+ LayoutPattern pattern;
+ LayoutAxis axes[2];
+ int inputImageWidth;
+ int inputImageHeight;
+ char reserved[32];
+} LayoutAnalysisParameter;
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+|-----------|------|-------------|
+| [`pattern`](#pattern) | *LayoutPattern* | Desired layout pattern. |
+| [`axes`](#axes) | *LayoutAxis[2]* | Configuration for Primary (0) and Secondary (1) axes. |
+| [`inputImageWidth`](#inputimagewidth) | *int* | Width of the source image in pixels. |
+| [`inputImageHeight`](#inputimageheight) | *int* | Height of the source image in pixels. |
+
+### pattern
+
+Desired layout pattern. Use `LP_UNKNOWN` for auto-detection.
+
+```cpp
+LayoutPattern pattern = LP_UNKNOWN;
+```
+
+**See Also**
+
+[LayoutPattern]({{ site.dcvb_cpp_api }}utility/enum-layout-pattern.html)
+
+### axes
+
+Configuration for Primary (axis 0) and Secondary (axis 1) axes.
+
+```cpp
+LayoutAxis axes[2];
+```
+
+**See Also**
+
+[LayoutAxis]({{ site.dcvb_cpp_api }}utility/layout-axis.html)
+
+### inputImageWidth
+
+Width of the source image in pixels. When provided, the engine uses this as a boundary reference to prevent inferred quads from extending beyond the image bounds. Default: 0 (no boundary check).
+
+```cpp
+int inputImageWidth = 0;
+```
+
+### inputImageHeight
+
+Height of the source image in pixels. When provided, the engine uses this as a boundary reference to prevent inferred quads from extending beyond the image bounds. Default: 0 (no boundary check).
+
+```cpp
+int inputImageHeight = 0;
+```
diff --git a/programming/cplusplus/api-reference/utility/layout-analysis-result.md b/programming/cplusplus/api-reference/utility/layout-analysis-result.md
new file mode 100644
index 0000000..8f62ddb
--- /dev/null
+++ b/programming/cplusplus/api-reference/utility/layout-analysis-result.md
@@ -0,0 +1,111 @@
+---
+layout: default-layout
+title: LayoutAnalysisResult - Dynamsoft Utility C++ Edition API Reference
+description: API reference for the LayoutAnalysisResult structure in Dynamsoft Utility C++ Edition, providing comprehensive results of a quadrilateral layout analysis.
+keywords: LayoutAnalysisResult, layout analysis, result, inferred quads
+needAutoGenerateSidebar: true
+---
+
+# LayoutAnalysisResult
+
+The `LayoutAnalysisResult` structure holds comprehensive results of the layout analysis. It is managed by the engine and must be explicitly released via [`CLayoutAnalyzer::ReleaseResult()`](layout-analyzer.html#releaseresult).
+
+## Definition
+
+*Assembly:* DynamsoftUtility
+
+*Header File:* DynamsoftUtility.h
+
+```cpp
+typedef struct LayoutAnalysisResult
+{
+ CQuadrilateral* inferredQuads;
+ int inferredQuadCount;
+ LayoutElement** elements;
+ int rowCount;
+ int colCount;
+ LayoutPattern detectedPattern;
+ int errorCode;
+ char reserved[32];
+} LayoutAnalysisResult;
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+|-----------|------|-------------|
+| [`inferredQuads`](#inferredquads) | *CQuadrilateral\** | Array of newly generated (inferred) quads. |
+| [`inferredQuadCount`](#inferredquadcount) | *int* | Total number of inferred quadrilaterals. |
+| [`elements`](#elements) | *LayoutElement\*\** | A 2D array (grid) of layout elements. |
+| [`rowCount`](#rowcount) | *int* | Number of rows (Primary Axis direction). |
+| [`colCount`](#colcount) | *int* | Maximum number of columns across all rows (Secondary Axis direction). |
+| [`detectedPattern`](#detectedpattern) | *LayoutPattern* | The actual layout pattern identified by the engine. |
+| [`errorCode`](#errorcode) | *int* | 0 for success, non-zero for error. |
+
+### inferredQuads
+
+Array of newly generated (inferred) quads.
+
+```cpp
+CQuadrilateral* inferredQuads;
+```
+
+**See Also**
+
+[CQuadrilateral]({{ site.dcvb_cpp_api }}core/basic-structures/quadrilateral.html)
+
+### inferredQuadCount
+
+Total number of inferred quadrilaterals.
+
+```cpp
+int inferredQuadCount;
+```
+
+### elements
+
+A 2D array (grid) of layout elements `[rowCount][colCount]`. In `LP_LINES` mode, rows may have varying physical lengths. Rows shorter than `colCount` are padded with elements whose source is set to `LES_NONE`.
+
+```cpp
+LayoutElement** elements;
+```
+
+**See Also**
+
+[LayoutElement]({{ site.dcvb_cpp_api }}utility/layout-element.html)
+
+### rowCount
+
+Number of rows (Primary Axis direction).
+
+```cpp
+int rowCount;
+```
+
+### colCount
+
+Maximum number of columns across all rows (Secondary Axis direction).
+
+```cpp
+int colCount;
+```
+
+### detectedPattern
+
+The actual layout pattern identified by the engine.
+
+```cpp
+LayoutPattern detectedPattern;
+```
+
+**See Also**
+
+[LayoutPattern]({{ site.dcvb_cpp_api }}utility/enum-layout-pattern.html)
+
+### errorCode
+
+0 for success, non-zero for error.
+
+```cpp
+int errorCode;
+```
diff --git a/programming/cplusplus/api-reference/utility/layout-analyzer.md b/programming/cplusplus/api-reference/utility/layout-analyzer.md
new file mode 100644
index 0000000..340a934
--- /dev/null
+++ b/programming/cplusplus/api-reference/utility/layout-analyzer.md
@@ -0,0 +1,79 @@
+---
+layout: default-layout
+title: class CLayoutAnalyzer - Dynamsoft Utility C++ Edition API Reference
+description: API reference for the CLayoutAnalyzer class in Dynamsoft Utility C++ Edition, providing high-performance quadrilateral layout analysis.
+keywords: CLayoutAnalyzer, layout analysis, quadrilateral, c++
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+---
+
+# CLayoutAnalyzer
+
+The `CLayoutAnalyzer` class provides a high-performance layout analysis engine. It analyzes the spatial distribution of quadrilaterals to detect and map structural patterns (Lines or Matrix), with logical grid position mapping and gap-filling inference.
+
+## Definition
+
+*Namespace:* dynamsoft::utility
+
+*Assembly:* DynamsoftUtility
+
+```cpp
+class CLayoutAnalyzer
+```
+
+## Methods
+
+| Method | Description |
+|--------|-------------|
+| [`Analyze`](#analyze) | Performs layout analysis on an array of quadrilaterals and returns a result set. |
+| [`ReleaseResult`](#releaseresult) | Releases the memory associated with a `LayoutAnalysisResult`. |
+
+## Analyze
+
+Performs layout analysis and allocates a result set.
+
+```cpp
+static LayoutAnalysisResult* Analyze(
+ const CQuadrilateral inputQuads[],
+ int inputQuadCount,
+ const LayoutAnalysisParameter* pParam = nullptr
+);
+```
+
+**Parameters**
+
+`[in] inputQuads` Array of input quadrilaterals.
+
+`[in] inputQuadCount` Number of elements in the input array.
+
+`[in] pParam` Optional parameters to constrain the analysis.
+
+**Return Value**
+
+Returns a pointer to a `LayoutAnalysisResult` object, or `nullptr` on failure.
+
+> **Note:** The caller **must** release the returned pointer via [`ReleaseResult()`](#releaseresult).
+
+**See Also**
+
+[CQuadrilateral]({{ site.dcvb_cpp_api }}core/basic-structures/quadrilateral.html)
+
+[LayoutAnalysisParameter]({{ site.dcvb_cpp_api }}utility/layout-analysis-parameter.html)
+
+[LayoutAnalysisResult]({{ site.dcvb_cpp_api }}utility/layout-analysis-result.html)
+
+## ReleaseResult
+
+Releases the memory associated with a `LayoutAnalysisResult`.
+
+```cpp
+static void ReleaseResult(LayoutAnalysisResult* pResultSet);
+```
+
+**Parameters**
+
+`[in] pResultSet` Pointer to the result set to be destroyed. No-op if `nullptr`.
+
+**See Also**
+
+[LayoutAnalysisResult]({{ site.dcvb_cpp_api }}utility/layout-analysis-result.html)
diff --git a/programming/cplusplus/api-reference/utility/layout-axis.md b/programming/cplusplus/api-reference/utility/layout-axis.md
new file mode 100644
index 0000000..cd67d7d
--- /dev/null
+++ b/programming/cplusplus/api-reference/utility/layout-axis.md
@@ -0,0 +1,99 @@
+---
+layout: default-layout
+title: LayoutAxis - Dynamsoft Utility C++ Edition API Reference
+description: API reference for the LayoutAxis structure in Dynamsoft Utility C++ Edition, configuring axis parameters for quadrilateral layout analysis.
+keywords: LayoutAxis, layout axis, spacing, angle, staggered
+needAutoGenerateSidebar: true
+---
+
+# LayoutAxis
+
+The `LayoutAxis` structure holds configuration for a specific orientation axis used in layout analysis. Layout analysis involves two axes:
+
+- **Axis 0 (Primary)**: The direction of flow within a line.
+- **Axis 1 (Secondary)**: The direction in which lines are stacked.
+
+## Definition
+
+*Assembly:* DynamsoftUtility
+
+*Header File:* DynamsoftUtility.h
+
+```cpp
+typedef struct LayoutAxis
+{
+ int elementCount;
+ bool isStaggered;
+ int angle;
+ bool isEqualSpacing;
+ int spacing;
+ MeasureUnit spacingUnit;
+ char reserved[32];
+} LayoutAxis;
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+|-----------|------|-------------|
+| [`elementCount`](#elementcount) | *int* | Expected number of elements along this axis. |
+| [`isStaggered`](#isstaggered) | *bool* | Whether the layout uses an offset/staggered (brick-like) pattern. |
+| [`angle`](#angle) | *int* | Target angle in degrees [0, 180]. |
+| [`isEqualSpacing`](#isequalspaing) | *bool* | Force equal gaps between elements. |
+| [`spacing`](#spacing) | *int* | Spacing between elements along this axis. |
+| [`spacingUnit`](#spacingunit) | *MeasureUnit* | Interpretation mode for the spacing value. |
+
+### elementCount
+
+Expected number of elements along this axis. Use -1 for auto-detection.
+
+```cpp
+int elementCount = -1;
+```
+
+### isStaggered
+
+Whether the layout uses an offset/staggered (brick-like) pattern.
+
+```cpp
+bool isStaggered = false;
+```
+
+### angle
+
+Target angle in degrees [0, 180]. Use -1 for auto-detection.
+
+```cpp
+int angle = -1;
+```
+
+### isEqualSpacing
+
+Force equal gaps between elements. When false, spacing is ignored.
+
+```cpp
+bool isEqualSpacing = false;
+```
+
+### spacing
+
+Spacing between elements along this axis. Use -1 for auto-detection.
+
+- In `MU_PIXEL` mode: absolute pixel count.
+- In `MU_PERCENTAGE` mode: percentage of the element's characteristic size (e.g., 200 = 200% = twice the reference width).
+
+```cpp
+int spacing = -1;
+```
+
+### spacingUnit
+
+Interpretation mode for the spacing value.
+
+```cpp
+MeasureUnit spacingUnit = MU_PIXEL;
+```
+
+**See Also**
+
+[MeasureUnit]({{ site.dcvb_cpp_api }}core/enum-measure-unit.html)
diff --git a/programming/cplusplus/api-reference/utility/layout-element.md b/programming/cplusplus/api-reference/utility/layout-element.md
new file mode 100644
index 0000000..ac9fa0a
--- /dev/null
+++ b/programming/cplusplus/api-reference/utility/layout-element.md
@@ -0,0 +1,57 @@
+---
+layout: default-layout
+title: LayoutElement - Dynamsoft Utility C++ Edition API Reference
+description: API reference for the LayoutElement structure in Dynamsoft Utility C++ Edition, representing an element in a quadrilateral layout analysis result.
+keywords: LayoutElement, layout element, quad, source
+needAutoGenerateSidebar: true
+---
+
+# LayoutElement
+
+The `LayoutElement` structure represents an element in a layout result. It combines the element's geometry with its origin information.
+
+## Definition
+
+*Assembly:* DynamsoftUtility
+
+*Header File:* DynamsoftUtility.h
+
+```cpp
+typedef struct LayoutElement
+{
+ CQuadrilateral quad;
+ LayoutElementSource source;
+ char reserved[32];
+} LayoutElement;
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+|-----------|------|-------------|
+| [`quad`](#quad) | *CQuadrilateral* | Geometric coordinates of the element. |
+| [`source`](#source) | *LayoutElementSource* | Origin of this element (Input / Inferred / None). |
+
+### quad
+
+Geometric coordinates of the element.
+
+```cpp
+CQuadrilateral quad;
+```
+
+**See Also**
+
+[CQuadrilateral]({{ site.dcvb_cpp_api }}core/basic-structures/quadrilateral.html)
+
+### source
+
+Origin of this element.
+
+```cpp
+LayoutElementSource source = LES_NONE;
+```
+
+**See Also**
+
+[LayoutElementSource]({{ site.dcvb_cpp_api }}utility/enum-layout-element-source.html)
diff --git a/programming/cplusplus/index.md b/programming/cplusplus/index.md
index 0b93d54..d78e7fa 100644
--- a/programming/cplusplus/index.md
+++ b/programming/cplusplus/index.md
@@ -34,24 +34,36 @@ The best way to begin with Dynamsoft Capture Vision C++ Edition is to follow the
## System Requirements
-- Windows:
- - Supported Versions: Windows 8 and higher, or Windows Server 2012 and higher
- - Architecture: x64 and x86
- - Development Environment: Visual Studio 2012 or higher.
-
-- Linux:
- - Supported Distributions: Ubuntu 14.04.4+ LTS, Debian 8+, CentOS 7+
- - Architectures: x64 and ARM 64-bit
- - Minimum GLIBC Version: GLIBC_2.18 or higher
- - Compiler: G++ 5.4 or higher
-
-- macOS (Universal) 12+ (not included in the trial package, contact us to get the SDK)
-
-- For Embedded Devices:
-For embedded or ARM-based platforms, we recommend using a device with performance equivalent to or better than a Raspberry Pi 4 Model B (4GB RAM). Minimum recommended specs:
- - Quad-core ARM Cortex-A72 processor (or equivalent)
- - 4 GB RAM
- - Linux-based OS (e.g., Raspberry Pi OS, Ubuntu Server)
+### Supported Platforms
+
+**Windows**
+- Supported Versions: Windows 8 and higher, or Windows Server 2012 and higher
+- Architectures: x64, x86
+
+**Linux**
+- **x64**
+ - Supported Distributions: Ubuntu 16.04+ LTS, Debian 8+, CentOS 7+
+ - Dependencies: glibc 2.17
+- **ARM64**
+ - Supported Distributions: Ubuntu 18.04+ LTS, Debian 10+, CentOS/RHEL 8+
+ - Dependencies: glibc 2.27
+
+**macOS** (contact us to get the SDK)
+- Supported Versions: macOS 12 (Monterey) and higher
+- Architectures: universal (x64, Apple Silicon)
+
+### Development Environment
+
+- Visual Studio 2015 or higher
+- GCC 6.3.0+ / G++ 6.3.0+
+
+### Embedded Devices
+
+For embedded or ARM-based platforms, we recommend using a device with performance equivalent to or better than a Raspberry Pi 4 Model B (4 GB RAM). Minimum recommended specs:
+
+- Quad-core ARM Cortex-A72 processor or equivalent
+- 4 GB RAM
+- Linux-based OS, such as Raspberry Pi OS or Ubuntu Server
> [!NOTE]
> Other architectures and operating systems, such as ESP32, MIPS, FreeRTOS, and Micrium uC/OS, are not supported.
diff --git a/programming/cplusplus/release-notes/cpp-3.md b/programming/cplusplus/release-notes/cpp-3.md
index cda314e..a0b1d54 100644
--- a/programming/cplusplus/release-notes/cpp-3.md
+++ b/programming/cplusplus/release-notes/cpp-3.md
@@ -8,6 +8,91 @@ needGenerateH3Content: false
# Release Notes for C++ Edition - 3.x
+## 3.6.1000 (07/23/2026)
+
+### Highlights
+
+#### Multimodal PDF Content Extraction
+
+- **New PDF Reading Mode** - Added [`PDFRM_MULTIMODAL`]({{ site.dcvb_cpp_api }}core/enum-pdf-reading-mode.html) to [`PDFReadingMode`]({{ site.dcvb_cpp_api }}core/enum-pdf-reading-mode.html), now the default for [`PDFReadingParameter`]({{ site.dcvb_cpp_api }}core/basic-structures/pdf-reading-parameter.html). It extracts vector graphics, text content, and embedded images from PDF files, enabling stronger barcode reading performance in multimodal PDF scenarios.
+- **Performance Behavior Update** - Compared with full-page raster rendering, [`PDFRM_MULTIMODAL`]({{ site.dcvb_cpp_api }}core/enum-pdf-reading-mode.html) usually improves speed by avoiding unnecessary rendering of irrelevant regions.
+
+#### 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 [`CLayoutAnalyzer`]({{ site.dcvb_cpp_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
+
+- **Support text lines in arbitrary orientations more automatically** - Added [`OrientationDetectionModes`]({{ site.dcvb_parameters_reference }}label-recognizer-task-settings/orientation-detection-modes.html) to automatically detect text line orientation and correct the orientation of text lines for further processing. Two modes are available: `ODM_SPATIAL_REFERENCES` and `ODM_CHARS_ORIENTATION_NEURAL_NETWORK`.
+
+### New
+
+- Added [`PDFRM_MULTIMODAL`]({{ site.dcvb_cpp_api }}core/enum-pdf-reading-mode.html) value to [`PDFReadingMode`]({{ site.dcvb_cpp_api }}core/enum-pdf-reading-mode.html) enumeration for multimodal PDF content extraction.
+
+- 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 a new overload of [`CaptureMultiPages()`]({{ site.dcvb_cpp_api }}capture-vision-router/single-file-processing.html#capturemultipages) that accepts a [`CFileFetcher`]({{ site.dcvb_cpp_api }}utility/file-fetcher.html) parameter for more flexible file input handling.
+
+- Added [`CLayoutAnalyzer`]({{ site.dcvb_cpp_api }}utility/layout-analyzer.html) class with [`Analyze()`]({{ site.dcvb_cpp_api }}utility/layout-analyzer.html#analyze) and [`ReleaseResult()`]({{ site.dcvb_cpp_api }}utility/layout-analyzer.html#releaseresult) static methods for quadrilateral layout analysis.
+
+- Added [`LayoutPattern`]({{ site.dcvb_cpp_api }}utility/enum-layout-pattern.html) enumeration with values `LP_UNKNOWN`, `LP_LINES`, and `LP_MATRIX`.
+
+- Added [`LayoutElementSource`]({{ site.dcvb_cpp_api }}utility/enum-layout-element-source.html) enumeration with values `LES_NONE`, `LES_INPUT`, and `LES_INFERRED`.
+
+- Added [`MeasureUnit`]({{ site.dcvb_cpp_api }}core/enum-measure-unit.html) enumeration with values `MU_PIXEL` and `MU_PERCENTAGE`.
+
+- Added structures [`LayoutAxis`]({{ site.dcvb_cpp_api }}utility/layout-axis.html), [`LayoutAnalysisParameter`]({{ site.dcvb_cpp_api }}utility/layout-analysis-parameter.html), [`LayoutElement`]({{ site.dcvb_cpp_api }}utility/layout-element.html), and [`LayoutAnalysisResult`]({{ site.dcvb_cpp_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 [`CLayoutAnalyzer`]({{ site.dcvb_cpp_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.
+
+- Added a new overload of [`FindPortraitZone()`]({{ site.dcvb_cpp_api }}id-utility/identity-processor.html#findportraitzone) that accepts an additional `isBlankPortrait` output parameter, which indicates whether the detected portrait zone is blank.
+
+### Changed
+
+- Default [`PDFReadingMode`]({{ site.dcvb_cpp_api }}core/enum-pdf-reading-mode.html) in [`PDFReadingParameter`]({{ site.dcvb_cpp_api }}core/basic-structures/pdf-reading-parameter.html) constructor changed from [`PDFRM_RASTER`]({{ site.dcvb_cpp_api }}core/enum-pdf-reading-mode.html) to [`PDFRM_MULTIMODAL`]({{ site.dcvb_cpp_api }}core/enum-pdf-reading-mode.html).
+
+- [`MaxParallelTasks`]({{ site.dcvb_parameters_reference }}capture-vision-template/max-parallel-tasks.html) now controls the total number of concurrent Work 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.
+
+- [`SetDeviceFriendlyName()`]({{ site.dcvb_cpp_api }}license/license-manager.html#setdevicefriendlyname) 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_cpp_api }}core/enum-error-code.html) if constraints are not met.
+
+- The Linux ARM64 minimum requirement is now glibc 2.27 (Ubuntu 18.04+, Debian 10+, and CentOS/RHEL 8+).
+
+- The Visual Studio minimum requirement is now VS2015.
+
+### Improved
+
+- Updated `MRZLocalization.data` model for improved portrait zone detection accuracy.
+
+- [`FindPortraitZone()`]({{ site.dcvb_cpp_api }}id-utility/identity-processor.html#findportraitzone) now returns the portrait zone quadrilateral with the top-left corner of the upright portrait as the first point.
+
+- Improved `idNumberType` field extraction accuracy for `SOUTH_AFRICA_DL` parsing.
+
+### Fixed
+
+- Fixed a crash that could occur in AWS Lambda environments under certain conditions.
+
+- Fixed an issue in GS1-Databar AI `17` (YYMMDD) results where the month field could be missing a leading zero.
+
+### Deprecations
+
+- Marked `PDFRM_VECTOR` as deprecated (covered by [`PDFRM_MULTIMODAL`]({{ site.dcvb_cpp_api }}core/enum-pdf-reading-mode.html)).
+
## 3.4.3000 (06/30/2026)
### Security Updates
diff --git a/programming/cplusplus/release-notes/index.md b/programming/cplusplus/release-notes/index.md
index 21589f1..8e7a5a3 100644
--- a/programming/cplusplus/release-notes/index.md
+++ b/programming/cplusplus/release-notes/index.md
@@ -9,6 +9,7 @@ noTitleIndex: true
# Release Notes - Dynamsoft Capture Vision CPP
+- [3.6.1000 (07/23/2026)]({{ site.dcvb_cpp_release_notes }}cpp-3.html#361000-07232026)
- [3.4.3000 (06/30/2026)]({{ site.dcvb_cpp_release_notes }}cpp-3.html#343000-06302026)
- [3.4.2001 (04/17/2026)]({{ site.dcvb_cpp_release_notes }}cpp-3.html#342001-04172026)
- [3.4.2000 (03/18/2026)]({{ site.dcvb_cpp_release_notes }}cpp-3.html#342000-03182026)
diff --git a/programming/cplusplus/user-guide/document-scanner.md b/programming/cplusplus/user-guide/document-scanner.md
index 23665fa..c1fe5f1 100644
--- a/programming/cplusplus/user-guide/document-scanner.md
+++ b/programming/cplusplus/user-guide/document-scanner.md
@@ -33,7 +33,7 @@ To find out whether your environment is supported, please read the [System Requi
## Installation
-If you haven't downloaded the SDK yet, download the `C/C++ Package` now and unpack the package into a directory of your choice.
+If you haven't downloaded the SDK yet, download the `C/C++ Package` now and unpack the package into a directory of your choice.
> [!IMPORTANT]
> For this tutorial, we unpack it to a pseudo directory `[INSTALLATION FOLDER]`, change it to your unpacking path for the following content.
diff --git a/programming/cplusplus/user-guide/index.md b/programming/cplusplus/user-guide/index.md
index 53048d2..1472cfc 100644
--- a/programming/cplusplus/user-guide/index.md
+++ b/programming/cplusplus/user-guide/index.md
@@ -5,7 +5,6 @@ description: Index page for Dynamsoft Capture Vision C++ Edition user guide, lin
keywords: c++, user guide
needAutoGenerateSidebar: true
needGenerateH3Content: true
-permalink: /programming/cplusplus/user-guide/index.html
---
# Dynamsoft Capture Vision C++ Edition User Guides
diff --git a/programming/cplusplus/user-guide/mrz-scanner.md b/programming/cplusplus/user-guide/mrz-scanner.md
index 04614d9..8e49383 100644
--- a/programming/cplusplus/user-guide/mrz-scanner.md
+++ b/programming/cplusplus/user-guide/mrz-scanner.md
@@ -39,7 +39,7 @@ To find out whether your environment is supported, please read the [System Requi
## Installation
-If you haven't downloaded the SDK yet, download the `C/C++ Package` now and unpack the package into a directory of your choice.
+If you haven't downloaded the SDK yet, download the `C/C++ Package` now and unpack the package into a directory of your choice.
> [!IMPORTANT]
> For this tutorial, we unpack it to a pseudo directory `[INSTALLATION FOLDER]`, change it to your unpacking path for the following content.
diff --git a/programming/dotnet/api-reference/capture-vision-router/auxiliary-classes/simplified-capture-vision-settings-v10.4.2000.md b/programming/dotnet/api-reference/capture-vision-router/auxiliary-classes/simplified-capture-vision-settings-v10.4.2000.md
deleted file mode 100644
index 7fc3545..0000000
--- a/programming/dotnet/api-reference/capture-vision-router/auxiliary-classes/simplified-capture-vision-settings-v10.4.2000.md
+++ /dev/null
@@ -1,142 +0,0 @@
----
-layout: default-layout
-title: SimplifiedCaptureVisionSettings Class - Dynamsoft Capture Vision Module .NET Edition API Reference
-description: API reference for the SimplifiedCaptureVisionSettings class (v10.4.2000) in Dynamsoft Capture Vision .NET Edition, which contains simplified configuration options for capture tasks.
-keywords: class, .NET, SimplifiedCaptureVisionSettings
-needAutoGenerateSidebar: true
-needGenerateH3Content: true
----
-
-# SimplifiedCaptureVisionSettings
-
-The `SimplifiedCaptureVisionSettings` class contains settings for capturing and recognizing images with the `CaptureVisionRouter` class.
-
-## Definition
-
-*Namespace:* Dynamsoft.CVR
-
-
-```csharp
-public class SimplifiedCaptureVisionSettings
-```
-
-## Attributes
-
-| Attribute | Type |
-| ----------------------------------------------------- | ----------------------------------- |
-| [`capturedResultItemTypes`](#capturedresultitemtypes) | *int* |
-| [`roi`](#roi) | *Quadrilateral* |
-| [`roiMeasuredInPercentage`](#roimeasuredinpercentage) | *int* |
-| [`maxParallelTasks`](#maxparalleltasks) | *int* |
-| [`timeout`](#timeout) | *int* |
-| [`barcodeSettings`](#barcodesettings) | *SimplifiedBarcodeReaderSettings* |
-| [`labelSettings`](#labelsettings) | *SimplifiedLabelRecognizerSettings* |
-| [`documentSettings`](#documentsettings) | *SimplifiedDocumentNormalizerSettings* |
-| [`minImageCaptureInterval`](#minimagecaptureinterval) | *int* |
-
-### capturedResultItemTypes
-
-Specifies the type(s) of captured result item(s) that will be captured.
-
-```csharp
-int capturedResultItemTypes;
-```
-
-**Values**
-
-The value should be a bitwise OR combination of one or more of enumeration `CapturedResultItemType`:
-
-**See Also**
-
-[CapturedResultItemType]({{ site.dcvb_enumerations }}core/captured-result-item-type.html?lang=dotnet)
-
-### roi
-
-Specifies the region of interest (ROI) where the image capture and recognition will take place.
-
-```csharp
-Quadrilateral roi;
-```
-
-**See Also**
-
-[Quadrilateral]({{ site.dcvb_dotnet_api }}core/basic-classes/quadrilateral.html)
-
-### roiMeasuredInPercentage
-
-Specifies whether the ROI is measured in pixels or as a percentage of the image size.
-
-```csharp
-int roiMeasuredInPercentage;
-```
-
-**Values**
-
-- `0` the ROI is measured in pixels.
-- `1` the ROI is measured as a percentage of the image size.
-
-### maxParallelTasks
-
-Specifies the maximum number of parallel tasks that can be used for image capture and recognition.
-
-```csharp
-int maxParallelTasks;
-```
-
-### timeout
-
-Specifies the maximum time (in milliseconds) allowed for image capture and recognition.
-
-```csharp
-int timeout;
-```
-
-### barcodeSettings
-
-Specifies the settings for barcode recognition.
-
-```csharp
-SimplifiedBarcodeReaderSettings barcodeSettings;
-```
-
-**See Also**
-
-[SimplifiedBarcodeReaderSettings]({{ site.dbr_dotnet_api }}simplified-barcode-reader-settings.html)
-
-### labelSettings
-
-Specifies the settings for label recognition.
-
-```csharp
-SimplifiedLabelRecognizerSettings labelSettings;
-```
-
-**See Also**
-
-[SimplifiedLabelRecognizerSettings]({{ site.dlr_dotnet_api }}simplified-label-recognizer-settings.html)
-
-### documentSettings
-
-Specifies the settings for document normalization.
-
-```csharp
-SimplifiedDocumentNormalizerSettings documentSettings;
-```
-
-**See Also**
-
-[SimplifiedDocumentNormalizerSettings]({{ site.ddn_dotnet_api }}simplified-document-normalizer-settings.html)
-
-### minImageCaptureInterval
-
-Specifies the minimum time interval (in milliseconds) allowed between consecutive image captures.
-
-```csharp
-int minImageCaptureInterval;
-```
-
-**Remarks**
-
-This property represents the minimum time interval (in milliseconds) that must elapse before the next image capture operation can be initiated.
-Setting a larger value for this property will introduce a delay between image captures, while setting a smaller value allows for more frequent captures. It can be used to reduce the computational frequency, which can effectively lower energy consumption. Please note that the actual time interval between captures may be longer than the specified minimum interval due to various factors, such as image processing time and hardware limitations.
-
diff --git a/programming/dotnet/api-reference/capture-vision-router/capture-vision-router.md b/programming/dotnet/api-reference/capture-vision-router/capture-vision-router.md
index b881b69..c340375 100644
--- a/programming/dotnet/api-reference/capture-vision-router/capture-vision-router.md
+++ b/programming/dotnet/api-reference/capture-vision-router/capture-vision-router.md
@@ -9,7 +9,7 @@ needGenerateH3Content: true
# CaptureVisionRouter
-The `CaptureVisionRouter` class is what a user uses to interact with image-processing and semantic-processing products in their applications. It accepts an image source and returns processing results which may contain [Final results]({{site.dcvb_architecture}}output.html#final-results?lang=dotnet) or [Intermediate Results]({{site.dcvb_architecture}}output.html#intermediate-results?lang=dotnet).
+The `CaptureVisionRouter` class is what a user uses to interact with image-processing and semantic-processing products in their applications. It accepts an image source and returns processing results which may contain [Final results]({{site.dcvb_architecture}}output.html#final-results) or [Intermediate Results]({{site.dcvb_architecture}}output.html#intermediate-results).
## Definition
diff --git a/programming/dotnet/api-reference/capture-vision-router/settings.md b/programming/dotnet/api-reference/capture-vision-router/settings.md
index 6d3c4ef..aa336b7 100644
--- a/programming/dotnet/api-reference/capture-vision-router/settings.md
+++ b/programming/dotnet/api-reference/capture-vision-router/settings.md
@@ -87,13 +87,16 @@ Returns an error code. Zero indicates success.
Exports a specific template to a string.
```csharp
-string OutputSettings(string templateName, out int errorCode)
+string OutputSettings(string templateName, bool includeDefaultValues = false)
+string OutputSettings(string templateName, bool includeDefaultValues, out int errorCode)
```
**Parameters**
`[in] templateName` The name of the `CaptureVisionTemplate` to export.
+`[in] includeDefaultValues` Specifies whether to include parameters with default values in the exported template. Default: `false`.
+
`[out] errorCode` An error code generated during the process.
**Remarks**
@@ -117,7 +120,7 @@ Returns a string containing the exported template.
Exports a specific template to a file.
```csharp
-int OutputSettingsToFile(string templateName, string filePath)
+int OutputSettingsToFile(string templateName, string filePath, bool includeDefaultValues = false)
```
**Parameters**
@@ -126,6 +129,8 @@ int OutputSettingsToFile(string templateName, string filePath)
`[in] filePath` The path to the output file.
+`[in] includeDefaultValues` Specifies whether to include parameters with default values in the exported template. Default: `false`.
+
**Remarks**
- It is supported to export all loaded templates by specifying the `templateName` as '*'.
diff --git a/programming/dotnet/api-reference/capture-vision-router/single-file-processing.md b/programming/dotnet/api-reference/capture-vision-router/single-file-processing.md
index ba7df17..daf3296 100644
--- a/programming/dotnet/api-reference/capture-vision-router/single-file-processing.md
+++ b/programming/dotnet/api-reference/capture-vision-router/single-file-processing.md
@@ -64,7 +64,8 @@ Processes an image or file containing multiple pages to derive important informa
```csharp
CapturedResult[] CaptureMultiPages(string filePath, string templateName = "");
-CapturedResult[] CaptureMultiPages(byte[] fileBytes, string templateName = "")
+CapturedResult[] CaptureMultiPages(byte[] fileBytes, string templateName = "");
+CapturedResult[] CaptureMultiPages(FileFetcher fileFetcher, string templateName = "")
```
**Parameters**
@@ -75,6 +76,8 @@ CapturedResult[] CaptureMultiPages(byte[] fileBytes, string templateName = "")
`[in] fileBytes` Specifies the memory location containing the image to be processed.
+`[in] fileFetcher` Specifies a `FileFetcher` instance that provides the files to process.
+
**Remarks**
- There are two types of `CaptureVisionTemplate`: the [preset ones]({{ site.dcvb_dotnet_api }}capture-vision-router/auxiliary-classes/preset-template.html) which come with the SDK and the custom ones that get initialized when the user calls [InitSettings]({{ site.dcvb_dotnet_api }}capture-vision-router/settings.html#initsettings) / [InitSettingsFromFile]({{ site.dcvb_dotnet_api }}capture-vision-router/settings.html#initsettingsfromfile).
diff --git a/programming/dotnet/api-reference/core/basic-classes/pdf-reading-parameter.md b/programming/dotnet/api-reference/core/basic-classes/pdf-reading-parameter.md
index c44240b..620b0ab 100644
--- a/programming/dotnet/api-reference/core/basic-classes/pdf-reading-parameter.md
+++ b/programming/dotnet/api-reference/core/basic-classes/pdf-reading-parameter.md
@@ -29,7 +29,7 @@ public class PDFReadingParameter
### mode
-The mode of PDF reading.
+The mode of PDF reading. Defaults to `PDFRM_MULTIMODAL`.
```csharp
EnumPDFReadingMode mode;
diff --git a/programming/dotnet/api-reference/core/enum-measure-unit.md b/programming/dotnet/api-reference/core/enum-measure-unit.md
new file mode 100644
index 0000000..14f3a0d
--- /dev/null
+++ b/programming/dotnet/api-reference/core/enum-measure-unit.md
@@ -0,0 +1,24 @@
+---
+layout: default-layout
+title: MeasureUnit - Dynamsoft Core .NET Enumerations
+description: The enumeration MeasureUnit in Dynamsoft Core .NET Edition specifies how a numeric value is interpreted relative to a reference dimension.
+keywords: MeasureUnit, pixel, percentage
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+codeAutoHeight: true
+---
+
+# Enumeration MeasureUnit
+
+`MeasureUnit` specifies how a numeric value should be interpreted relative to a reference dimension.
+
+```csharp
+public enum MeasureUnit
+{
+ /** The value is an absolute pixel count. */
+ MU_PIXEL = 0,
+ /** The value is a percentage of the reference dimension (e.g. 25 = 25%). */
+ MU_PERCENTAGE = 1
+}
+```
diff --git a/programming/dotnet/api-reference/core/enum-pdf-reading-mode.md b/programming/dotnet/api-reference/core/enum-pdf-reading-mode.md
index e1bf95e..786bd5d 100644
--- a/programming/dotnet/api-reference/core/enum-pdf-reading-mode.md
+++ b/programming/dotnet/api-reference/core/enum-pdf-reading-mode.md
@@ -16,13 +16,16 @@ codeAutoHeight: true
```csharp
public enum EnumPDFReadingMode
{
- /** Outputs vector data found in the PDFs. */
+ /** Deprecated. Covered by PDFRM_MULTIMODAL. */
PDFRM_VECTOR = 0x01,
- /** The default value.
- * Outputs raster data found in the PDFs.
- * Depending on the argument Resolution, the SDK may rasterize the PDF pages.
- * Check the template for available argument settings. */
+ /** Renders the entire page as a bitmap regardless of object type. */
PDFRM_RASTER = 0x02,
+ /**
+ * Extracts multimodal information from a PDF, including vector graphics,
+ * text content, and embedded images, which can be used for subsequent
+ * tasks such as barcode reading, text recognition, and document analysis.
+ */
+ PDFRM_MULTIMODAL = 0x03,
/** Reserved setting for PDF reading mode.*/
PDFRM_REV = -2147483648,
}
diff --git a/programming/dotnet/api-reference/index.md b/programming/dotnet/api-reference/index.md
index 243107b..a31ed61 100644
--- a/programming/dotnet/api-reference/index.md
+++ b/programming/dotnet/api-reference/index.md
@@ -204,6 +204,7 @@ needAutoGenerateSidebar: false
- [`EnumImageTagType`]({{ site.dcvb_dotnet_api }}core/enum-image-tag-type.html)
- [`EnumIntermediateResultUnitType`]({{ site.dcvb_dotnet_api }}core/enum-intermediate-result-unit-type.html)
- [`EnumPDFReadingMode`]({{ site.dcvb_dotnet_api }}core/enum-pdf-reading-mode.html)
+- [`MeasureUnit`]({{ site.dcvb_dotnet_api }}core/enum-measure-unit.html)
- [`EnumRasterDataSource`]({{ site.dcvb_dotnet_api }}core/enum-raster-data-source.html)
- [`EnumRegionObjectElementType`]({{ site.dcvb_dotnet_api }}core/enum-region-object-element-type.html)
- [`EnumSectionType`]({{ site.dcvb_dotnet_api }}core/enum-section-type.html)
@@ -217,6 +218,11 @@ needAutoGenerateSidebar: false
- [`ImageIO`]({{ site.dcvb_dotnet_api }}utility/image-io.html)
- [`ImageProcessor`]({{ site.dcvb_dotnet_api }}utility/image-processor.html)
- [`ImageDrawer`]({{ site.dcvb_dotnet_api }}utility/image-drawer.html)
+- [`LayoutAnalyzer`]({{ site.dcvb_dotnet_api }}utility/layout-analyzer.html)
+- [`LayoutAxis`]({{ site.dcvb_dotnet_api }}utility/layout-axis.html)
+- [`LayoutAnalysisParameter`]({{ site.dcvb_dotnet_api }}utility/layout-analysis-parameter.html)
+- [`LayoutElement`]({{ site.dcvb_dotnet_api }}utility/layout-element.html)
+- [`LayoutAnalysisResult`]({{ site.dcvb_dotnet_api }}utility/layout-analysis-result.html)
- [`MultiFrameResultCrossFilter`]({{ site.dcvb_dotnet_api }}utility/multi-frame-result-cross-filter.html)
- [`ProactiveImageSourceAdapter`]({{ site.dcvb_dotnet_api }}utility/proactive-image-source-adapter.html)
- [`UtilityModule`]({{ site.dcvb_dotnet_api }}utility/utility-module.html)
@@ -224,6 +230,8 @@ needAutoGenerateSidebar: false
### Enums
- [`EnumFilterType`]({{ site.dcvb_dotnet_api }}utility/enum-filter-type.html)
+- [`LayoutPattern`]({{ site.dcvb_dotnet_api }}utility/enum-layout-pattern.html)
+- [`LayoutElementSource`]({{ site.dcvb_dotnet_api }}utility/enum-layout-element-source.html)
## DynamsoftLicense
@@ -233,6 +241,8 @@ needAutoGenerateSidebar: false
## DynamsoftImageProcessing
+### Classes
+
- [`ImageProcessingModule`]({{ site.dcvb_dotnet_api }}image-processing/image-processing-module.html)
diff --git a/programming/dotnet/api-reference/license/license-manager.md b/programming/dotnet/api-reference/license/license-manager.md
index df02eea..61c692a 100644
--- a/programming/dotnet/api-reference/license/license-manager.md
+++ b/programming/dotnet/api-reference/license/license-manager.md
@@ -61,12 +61,23 @@ static int SetDeviceFriendlyName(string name)
**Parameters**
-`[in] name` The friendly name of the device.
+`[in] name` The friendly name of the device. It must satisfy all of the following constraints:
+
+- Maximum length: 64 characters.
+- Allowed characters: are letters (a-z, A-Z), digits (0-9), hyphen (-), underscore (_), and period (.)
+- Must start and end with a letter or digit (not `-`, `_`, or `.`).
+
+If the name does not meet these requirements, the function returns the error code `EC_PARAMETER_VALUE_INVALID`.
**Return Value**
Returns 0 if the friendly name is set successfully, a negative value indicating an error otherwise.
+| Error Code | Value | Description |
+|---|---|---|
+| `EC_OK` | 0 | The friendly name is set successfully. |
+| `EC_PARAMETER_VALUE_INVALID` | -10038 | The name is invalid. It is either empty, exceeds 64 characters, contains disallowed characters, or starts/ends with a symbol. |
+
**Remarks**
This function must be called before function `InitLicense` to ensure correct functionality.
diff --git a/programming/dotnet/api-reference/utility/enum-layout-element-source.md b/programming/dotnet/api-reference/utility/enum-layout-element-source.md
new file mode 100644
index 0000000..fea38a2
--- /dev/null
+++ b/programming/dotnet/api-reference/utility/enum-layout-element-source.md
@@ -0,0 +1,26 @@
+---
+layout: default-layout
+title: LayoutElementSource - Dynamsoft Utility .NET Enumerations
+description: The enumeration LayoutElementSource in Dynamsoft Utility .NET Edition indicates the origin of an element in layout analysis results.
+keywords: LayoutElementSource, layout element, inferred, input
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+codeAutoHeight: true
+---
+
+# Enumeration LayoutElementSource
+
+`LayoutElementSource` indicates the origin of a layout element.
+
+```csharp
+public enum LayoutElementSource
+{
+ /** No element exists at this logical grid position (used for alignment in non-uniform rows). */
+ LES_NONE = 0,
+ /** Element is provided from the original input array. */
+ LES_INPUT = 1,
+ /** Element is reconstructed or filled in by the algorithm. */
+ LES_INFERRED = 2
+}
+```
diff --git a/programming/dotnet/api-reference/utility/enum-layout-pattern.md b/programming/dotnet/api-reference/utility/enum-layout-pattern.md
new file mode 100644
index 0000000..2fa4c4a
--- /dev/null
+++ b/programming/dotnet/api-reference/utility/enum-layout-pattern.md
@@ -0,0 +1,26 @@
+---
+layout: default-layout
+title: LayoutPattern - Dynamsoft Utility .NET Enumerations
+description: The enumeration LayoutPattern in Dynamsoft Utility .NET Edition defines strategies for organizing quadrilaterals in layout analysis.
+keywords: LayoutPattern, layout, lines, matrix
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+noTitleIndex: true
+codeAutoHeight: true
+---
+
+# Enumeration LayoutPattern
+
+`LayoutPattern` defines the strategy for the layout engine to organize quadrilaterals.
+
+```csharp
+public enum LayoutPattern
+{
+ /** Algorithm automatically detects the best layout pattern. */
+ LP_UNKNOWN = 0,
+ /** Elements are organized into sequential lines (rows or columns). */
+ LP_LINES = 1,
+ /** Elements are organized into a strict grid/matrix structure. */
+ LP_MATRIX = 2
+}
+```
diff --git a/programming/dotnet/api-reference/utility/layout-analysis-parameter.md b/programming/dotnet/api-reference/utility/layout-analysis-parameter.md
new file mode 100644
index 0000000..c378c63
--- /dev/null
+++ b/programming/dotnet/api-reference/utility/layout-analysis-parameter.md
@@ -0,0 +1,68 @@
+---
+layout: default-layout
+title: LayoutAnalysisParameter Class - Dynamsoft Utility .NET Edition API Reference
+description: API reference for the LayoutAnalysisParameter class in Dynamsoft Utility .NET Edition, providing input parameters to guide quadrilateral layout analysis.
+keywords: LayoutAnalysisParameter, layout analysis, parameter
+needAutoGenerateSidebar: true
+---
+
+# LayoutAnalysisParameter
+
+The `LayoutAnalysisParameter` class holds input parameters to guide the layout analysis.
+
+## Definition
+
+*Namespace:* Dynamsoft.Utility
+
+```csharp
+public class LayoutAnalysisParameter
+```
+
+## Properties
+
+| Property | Type | Description |
+|----------|------|-------------|
+| [`pattern`](#pattern) | *LayoutPattern* | Desired layout pattern. |
+| [`axes`](#axes) | *LayoutAxis[]* | Configuration for Primary (0) and Secondary (1) axes. |
+| [`inputImageWidth`](#inputimagewidth) | *int* | Width of the source image in pixels. |
+| [`inputImageHeight`](#inputimageheight) | *int* | Height of the source image in pixels. |
+
+### pattern
+
+Desired layout pattern. Use `LP_UNKNOWN` for auto-detection.
+
+```csharp
+public LayoutPattern pattern = LayoutPattern.LP_UNKNOWN;
+```
+
+**See Also**
+
+[LayoutPattern]({{ site.dcvb_dotnet_api }}utility/enum-layout-pattern.html)
+
+### axes
+
+Configuration for Primary (axis 0) and Secondary (axis 1) axes.
+
+```csharp
+public LayoutAxis[] axes;
+```
+
+**See Also**
+
+[LayoutAxis]({{ site.dcvb_dotnet_api }}utility/layout-axis.html)
+
+### inputImageWidth
+
+Width of the source image in pixels. When provided, prevents inferred quads from extending beyond the image bounds. Default: 0 (no boundary check).
+
+```csharp
+public int inputImageWidth = 0;
+```
+
+### inputImageHeight
+
+Height of the source image in pixels. When provided, prevents inferred quads from extending beyond the image bounds. Default: 0 (no boundary check).
+
+```csharp
+public int inputImageHeight = 0;
+```
diff --git a/programming/dotnet/api-reference/utility/layout-analysis-result.md b/programming/dotnet/api-reference/utility/layout-analysis-result.md
new file mode 100644
index 0000000..29e84c0
--- /dev/null
+++ b/programming/dotnet/api-reference/utility/layout-analysis-result.md
@@ -0,0 +1,72 @@
+---
+layout: default-layout
+title: LayoutAnalysisResult Class - Dynamsoft Utility .NET Edition API Reference
+description: API reference for the LayoutAnalysisResult class in Dynamsoft Utility .NET Edition, providing comprehensive results of a quadrilateral layout analysis.
+keywords: LayoutAnalysisResult, layout analysis, result, inferred quads
+needAutoGenerateSidebar: true
+---
+
+# LayoutAnalysisResult
+
+The `LayoutAnalysisResult` class holds the comprehensive results of the layout analysis. It implements `IDisposable` and must be disposed after use.
+
+## Definition
+
+*Namespace:* Dynamsoft.Utility
+
+```csharp
+public class LayoutAnalysisResult : IDisposable
+```
+
+## Properties
+
+| Property | Type | Description |
+|----------|------|-------------|
+| [`inferredQuads`](#inferredquads) | *Quadrilateral[]* | Array of newly generated (inferred) quads. |
+| [`elements`](#elements) | *LayoutElement[,]* | A 2D array (grid) of layout elements. |
+| [`detectedPattern`](#detectedpattern) | *LayoutPattern* | The actual layout pattern identified by the engine. |
+| [`errorCode`](#errorcode) | *int* | 0 for success, non-zero for error. |
+
+### inferredQuads
+
+Array of newly generated (inferred) quads.
+
+```csharp
+public Quadrilateral[] inferredQuads;
+```
+
+**See Also**
+
+[Quadrilateral]({{ site.dcvb_dotnet_api }}core/basic-classes/quadrilateral.html)
+
+### elements
+
+A 2D array (grid) of layout elements `[rowCount, colCount]`. In `LP_LINES` mode, rows may have varying physical lengths. Rows shorter than `colCount` are padded with elements whose source is set to `LES_NONE`.
+
+```csharp
+public LayoutElement[,] elements;
+```
+
+**See Also**
+
+[LayoutElement]({{ site.dcvb_dotnet_api }}utility/layout-element.html)
+
+### detectedPattern
+
+The actual layout pattern identified by the engine.
+
+```csharp
+public LayoutPattern detectedPattern;
+```
+
+**See Also**
+
+[LayoutPattern]({{ site.dcvb_dotnet_api }}utility/enum-layout-pattern.html)
+
+### errorCode
+
+0 for success, non-zero for error.
+
+```csharp
+public int errorCode;
+```
diff --git a/programming/dotnet/api-reference/utility/layout-analyzer.md b/programming/dotnet/api-reference/utility/layout-analyzer.md
new file mode 100644
index 0000000..1fb857e
--- /dev/null
+++ b/programming/dotnet/api-reference/utility/layout-analyzer.md
@@ -0,0 +1,54 @@
+---
+layout: default-layout
+title: LayoutAnalyzer Class - Dynamsoft Utility .NET Edition API Reference
+description: API reference for the LayoutAnalyzer class in Dynamsoft Utility .NET Edition, providing high-performance quadrilateral layout analysis.
+keywords: LayoutAnalyzer, layout analysis, quadrilateral, .NET
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+---
+
+# LayoutAnalyzer
+
+The `LayoutAnalyzer` class provides a high-performance layout analysis engine. It analyzes the spatial distribution of quadrilaterals to detect and map structural patterns (Lines or Matrix), with logical grid position mapping and gap-filling inference.
+
+## Definition
+
+*Namespace:* Dynamsoft.Utility
+
+```csharp
+public static class LayoutAnalyzer
+```
+
+## Methods
+
+| Method | Description |
+|--------|-------------|
+| [`Analyze`](#analyze) | Performs layout analysis on an array of quadrilaterals and returns a result set. |
+
+## Analyze
+
+Performs layout analysis and returns a result set.
+
+```csharp
+public static LayoutAnalysisResult? Analyze(Quadrilateral[] input, LayoutAnalysisParameter? parameter = null)
+```
+
+**Parameters**
+
+`[in] input` Array of input quadrilaterals.
+
+`[in] parameter` Optional parameters to constrain the analysis.
+
+**Return Value**
+
+Returns a `LayoutAnalysisResult` object, or `null` on failure.
+
+> **Note:** Dispose the returned object after use.
+
+**See Also**
+
+[Quadrilateral]({{ site.dcvb_dotnet_api }}core/basic-classes/quadrilateral.html)
+
+[LayoutAnalysisParameter]({{ site.dcvb_dotnet_api }}utility/layout-analysis-parameter.html)
+
+[LayoutAnalysisResult]({{ site.dcvb_dotnet_api }}utility/layout-analysis-result.html)
diff --git a/programming/dotnet/api-reference/utility/layout-axis.md b/programming/dotnet/api-reference/utility/layout-axis.md
new file mode 100644
index 0000000..b4b152d
--- /dev/null
+++ b/programming/dotnet/api-reference/utility/layout-axis.md
@@ -0,0 +1,78 @@
+---
+layout: default-layout
+title: LayoutAxis Class - Dynamsoft Utility .NET Edition API Reference
+description: API reference for the LayoutAxis class in Dynamsoft Utility .NET Edition, configuring axis parameters for quadrilateral layout analysis.
+keywords: LayoutAxis, layout axis, spacing, angle, staggered
+needAutoGenerateSidebar: true
+---
+
+# LayoutAxis
+
+The `LayoutAxis` class holds configuration for a specific orientation axis used in layout analysis. Layout analysis involves two axes:
+
+- **Axis 0 (Primary)**: The direction of flow within a line.
+- **Axis 1 (Secondary)**: The direction in which lines are stacked.
+
+## Definition
+
+*Namespace:* Dynamsoft.Utility
+
+```csharp
+public class LayoutAxis
+```
+
+## Properties
+
+| Property | Type | Description |
+|----------|------|-------------|
+| [`elementCount`](#elementcount) | *int* | Expected number of elements along this axis. Use -1 for auto-detection. |
+| [`isStaggered`](#isstaggered) | *bool* | Whether the layout uses an offset/staggered (brick-like) pattern. |
+| [`angle`](#angle) | *int* | Target angle in degrees [0, 180]. Use -1 for auto-detection. |
+| [`isEqualSpacing`](#isequalspaing) | *bool* | Force equal gaps between elements. |
+| [`spacing`](#spacing) | *int* | Spacing between elements along this axis. Use -1 for auto-detection. |
+| [`spacingUnit`](#spacingunit) | *MeasureUnit* | Interpretation mode for the spacing value. |
+
+### elementCount
+
+```csharp
+public int elementCount = -1;
+```
+
+### isStaggered
+
+```csharp
+public bool isStaggered = false;
+```
+
+### angle
+
+```csharp
+public int angle = -1;
+```
+
+### isEqualSpacing
+
+```csharp
+public bool isEqualSpacing = false;
+```
+
+### spacing
+
+Spacing between elements along this axis. Use -1 for auto-detection.
+
+- In `MU_PIXEL` mode: absolute pixel count.
+- In `MU_PERCENTAGE` mode: percentage of the element's characteristic size (e.g., 200 = 200% = twice the reference width).
+
+```csharp
+public int spacing = -1;
+```
+
+### spacingUnit
+
+```csharp
+public MeasureUnit spacingUnit = MeasureUnit.MU_PIXEL;
+```
+
+**See Also**
+
+[MeasureUnit]({{ site.dcvb_dotnet_api }}core/enum-measure-unit.html)
diff --git a/programming/dotnet/api-reference/utility/layout-element.md b/programming/dotnet/api-reference/utility/layout-element.md
new file mode 100644
index 0000000..819044d
--- /dev/null
+++ b/programming/dotnet/api-reference/utility/layout-element.md
@@ -0,0 +1,46 @@
+---
+layout: default-layout
+title: LayoutElement Class - Dynamsoft Utility .NET Edition API Reference
+description: API reference for the LayoutElement class in Dynamsoft Utility .NET Edition, representing an element in a quadrilateral layout analysis result.
+keywords: LayoutElement, layout element, quad, source
+needAutoGenerateSidebar: true
+---
+
+# LayoutElement
+
+The `LayoutElement` class represents an element in a layout result. It combines the element's geometry with its origin information.
+
+## Definition
+
+*Namespace:* Dynamsoft.Utility
+
+```csharp
+public class LayoutElement
+```
+
+## Properties
+
+| Property | Type | Description |
+|----------|------|-------------|
+| [`quad`](#quad) | *Quadrilateral* | Geometric coordinates of the element. |
+| [`source`](#source) | *LayoutElementSource* | Origin of this element (Input / Inferred / None). |
+
+### quad
+
+```csharp
+public Quadrilateral quad;
+```
+
+**See Also**
+
+[Quadrilateral]({{ site.dcvb_dotnet_api }}core/basic-classes/quadrilateral.html)
+
+### source
+
+```csharp
+public LayoutElementSource source = LayoutElementSource.LES_NONE;
+```
+
+**See Also**
+
+[LayoutElementSource]({{ site.dcvb_dotnet_api }}utility/enum-layout-element-source.html)
diff --git a/programming/dotnet/index.md b/programming/dotnet/index.md
index 4786ea0..4404bad 100644
--- a/programming/dotnet/index.md
+++ b/programming/dotnet/index.md
@@ -33,19 +33,21 @@ The best way to begin with Dynamsoft Capture Vision .NET Edition is to follow th
## System Requirements
-- Windows:
- - Supported Versions: Windows 8 and higher, or Windows Server 2012 and higher
- - Architecture: x64 and x86
- - Development Environment: Visual Studio 2012 or higher.
-
-- Linux:
- - Supported Distributions: Ubuntu 14.04.4+ LTS, Debian 8+, CentOS 7+
- - Architectures: x64
- - Minimum GLIBC Version: GLIBC_2.18 or higher
-
-- Supported .NET versions
- - .NET Framework 3.5 and above
- - .NET 6 and above
+### Supported Platforms
+
+**Windows**
+- Supported Versions: Windows 8 and higher, or Windows Server 2012 and higher
+- Architectures: x64, x86
+
+**Linux**
+- Supported Distributions: Ubuntu 16.04+ LTS, Debian 8+, CentOS 7+
+- Architectures: x64
+- Dependencies: glibc 2.17 or higher
+
+### Runtime Environment
+
+- .NET Framework 3.5 and above
+- .NET 6, 7, 8, 9, 10
> [!NOTE]
> Other architectures and operating systems, such as ESP32, MIPS, FreeRTOS, and Micrium uC/OS, are not supported.
diff --git a/programming/dotnet/release-notes/dotnet-3.md b/programming/dotnet/release-notes/dotnet-3.md
index 938ac9f..1827dd1 100644
--- a/programming/dotnet/release-notes/dotnet-3.md
+++ b/programming/dotnet/release-notes/dotnet-3.md
@@ -8,6 +8,89 @@ needGenerateH3Content: false
# Release Notes for .NET Edition - 3.x
+## 3.6.1000 (07/23/2026)
+
+### Highlights
+
+#### Multimodal PDF Content Extraction
+
+- **New PDF Reading Mode** - Added [`PDFRM_MULTIMODAL`]({{ site.dcvb_dotnet_api }}core/enum-pdf-reading-mode.html) to [`PDFReadingMode`]({{ site.dcvb_dotnet_api }}core/enum-pdf-reading-mode.html), now the default for [`PDFReadingParameter`]({{ site.dcvb_dotnet_api }}core/basic-classes/pdf-reading-parameter.html). It extracts vector graphics, text content, and embedded images from PDF files, enabling stronger barcode reading performance in multimodal PDF scenarios.
+- **Performance Behavior Update** - Compared with full-page raster rendering, [`PDFRM_MULTIMODAL`]({{ site.dcvb_dotnet_api }}core/enum-pdf-reading-mode.html) usually improves speed by avoiding unnecessary rendering of irrelevant regions.
+
+#### 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_dotnet_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
+
+- **Support text lines in arbitrary orientations more automatically** - Added [`OrientationDetectionModes`]({{ site.dcvb_parameters_reference }}label-recognizer-task-settings/orientation-detection-modes.html) to automatically detect text line orientation and correct the orientation of text lines for further processing. Two modes are available: `ODM_SPATIAL_REFERENCES` and `ODM_CHARS_ORIENTATION_NEURAL_NETWORK`.
+
+### New
+
+- Added a DLL build targeting .NET 8.
+
+- Added [`PDFRM_MULTIMODAL`]({{ site.dcvb_dotnet_api }}core/enum-pdf-reading-mode.html) value to [`PDFReadingMode`]({{ site.dcvb_dotnet_api }}core/enum-pdf-reading-mode.html) enumeration for multimodal PDF content extraction.
+
+- 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 a new overload of [`CaptureMultiPages()`]({{ site.dcvb_dotnet_api }}capture-vision-router/single-file-processing.html#capturemultipages) that accepts a [`FileFetcher`]({{ site.dcvb_dotnet_api }}utility/file-fetcher.html) parameter for more flexible file input handling.
+
+- Added [`LayoutAnalyzer`]({{ site.dcvb_dotnet_api }}utility/layout-analyzer.html) class with [`Analyze()`]({{ site.dcvb_dotnet_api }}utility/layout-analyzer.html#analyze) static method for quadrilateral layout analysis.
+
+- Added [`LayoutPattern`]({{ site.dcvb_dotnet_api }}utility/enum-layout-pattern.html) enumeration with values `LP_UNKNOWN`, `LP_LINES`, and `LP_MATRIX`.
+
+- Added [`LayoutElementSource`]({{ site.dcvb_dotnet_api }}utility/enum-layout-element-source.html) enumeration with values `LES_NONE`, `LES_INPUT`, and `LES_INFERRED`.
+
+- Added [`MeasureUnit`]({{ site.dcvb_dotnet_api }}core/enum-measure-unit.html) enumeration with values `MU_PIXEL` and `MU_PERCENTAGE`.
+
+- Added structures [`LayoutAxis`]({{ site.dcvb_dotnet_api }}utility/layout-axis.html), [`LayoutAnalysisParameter`]({{ site.dcvb_dotnet_api }}utility/layout-analysis-parameter.html), [`LayoutElement`]({{ site.dcvb_dotnet_api }}utility/layout-element.html), and [`LayoutAnalysisResult`]({{ site.dcvb_dotnet_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_dotnet_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
+
+- Default [`PDFReadingMode`]({{ site.dcvb_dotnet_api }}core/enum-pdf-reading-mode.html) in [`PDFReadingParameter`]({{ site.dcvb_dotnet_api }}core/basic-classes/pdf-reading-parameter.html) constructor changed from [`PDFRM_RASTER`]({{ site.dcvb_dotnet_api }}core/enum-pdf-reading-mode.html) to [`PDFRM_MULTIMODAL`]({{ site.dcvb_dotnet_api }}core/enum-pdf-reading-mode.html).
+
+- [`MaxParallelTasks`]({{ site.dcvb_parameters_reference }}capture-vision-template/max-parallel-tasks.html) now controls the total number of concurrent Work 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.
+
+- [`SetDeviceFriendlyName()`]({{ site.dcvb_dotnet_api }}license/license-manager.html#setdevicefriendlyname) 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_dotnet_api }}core/enum-error-code.html) if constraints are not met.
+
+- Removed the VC++ Redistributable runtime dependency for the native C DLL on Windows (runtime linkage changed from MD to MT).
+
+### Improved
+
+- Updated `MRZLocalization.data` model for improved portrait zone detection accuracy.
+
+- [`FindPortraitZone()`]({{ site.dcvb_dotnet_api }}id-utility/identity-processor.html#findportraitzone) now returns the portrait zone quadrilateral with the top-left corner of the upright portrait as the first point.
+
+- Improved `idNumberType` field extraction accuracy for `SOUTH_AFRICA_DL` parsing.
+
+### Fixed
+
+- Fixed a crash that could occur in AWS Lambda environments under certain conditions.
+
+- Fixed an issue in GS1-Databar AI `17` (YYMMDD) results where the month field could be missing a leading zero.
+
+### Deprecations
+
+- Marked `PDFRM_VECTOR` as deprecated (covered by [`PDFRM_MULTIMODAL`]({{ site.dcvb_dotnet_api }}core/enum-pdf-reading-mode.html)).
+
## 3.4.3000 (06/30/2026)
### Security Updates
diff --git a/programming/dotnet/release-notes/index.md b/programming/dotnet/release-notes/index.md
index 3412822..99e645d 100644
--- a/programming/dotnet/release-notes/index.md
+++ b/programming/dotnet/release-notes/index.md
@@ -9,6 +9,7 @@ noTitleIndex: true
# Module Release Notes - Dynamsoft Capture Vision .NET Edition
+- [3.6.1000 (07/23/2026)]({{ site.dcvb_dotnet_release_notes }}dotnet-3.html#361000-07232026)
- [3.4.3000 (06/30/2026)]({{ site.dcvb_dotnet_release_notes }}dotnet-3.html#343000-06302026)
- [3.4.2001 (04/17/2026)]({{ site.dcvb_dotnet_release_notes }}dotnet-3.html#342001-04172026)
- [3.4.2000 (03/18/2026)]({{ site.dcvb_dotnet_release_notes }}dotnet-3.html#342000-03182026)
diff --git a/programming/java/api-reference/capture-vision-router/capture-vision-router.md b/programming/java/api-reference/capture-vision-router/capture-vision-router.md
index 9d53e05..f576a71 100644
--- a/programming/java/api-reference/capture-vision-router/capture-vision-router.md
+++ b/programming/java/api-reference/capture-vision-router/capture-vision-router.md
@@ -7,7 +7,7 @@ keywords: capture vision router, router, java, api reference
# CaptureVisionRouter
-The `CaptureVisionRouter` class is what a user uses to interact with image-processing and semantic-processing products in their applications. It accepts an image source and returns processing results which may contain [Final results]({{ site.dcvb_architecture }}output.html#final-results?lang=java).
+The `CaptureVisionRouter` class is what a user uses to interact with image-processing and semantic-processing products in their applications. It accepts an image source and returns processing results which may contain [Final results]({{ site.dcvb_architecture }}output.html#final-results).
## Definition
diff --git a/programming/java/api-reference/capture-vision-router/single-file-processing.md b/programming/java/api-reference/capture-vision-router/single-file-processing.md
index bf88312..9edb0aa 100644
--- a/programming/java/api-reference/capture-vision-router/single-file-processing.md
+++ b/programming/java/api-reference/capture-vision-router/single-file-processing.md
@@ -63,6 +63,8 @@ public CapturedResult[] captureMultiPages(String filePath)
public CapturedResult[] captureMultiPages(String filePath, String templateName)
public CapturedResult[] captureMultiPages(byte[] fileBytes)
public CapturedResult[] captureMultiPages(byte[] fileBytes, String templateName)
+public CapturedResult[] captureMultiPages(FileFetcher fileFetcher)
+public CapturedResult[] captureMultiPages(FileFetcher fileFetcher, String templateName)
```
**Parameters**
@@ -71,6 +73,8 @@ public CapturedResult[] captureMultiPages(byte[] fileBytes, String templateName)
`fileBytes` <*byte[]*>: Specifies the image file bytes in memory containing multiple pages to process.
+`fileFetcher` <*FileFetcher*>: Specifies a `FileFetcher` instance that provides the files to process.
+
`templateName` <*String*, optional>: Specifies a `CaptureVisionTemplate` to use for capturing.
**Remarks**
diff --git a/programming/java/api-reference/core/basic-classes/pdf-reading-parameter.md b/programming/java/api-reference/core/basic-classes/pdf-reading-parameter.md
index 60b0e0e..0649f56 100644
--- a/programming/java/api-reference/core/basic-classes/pdf-reading-parameter.md
+++ b/programming/java/api-reference/core/basic-classes/pdf-reading-parameter.md
@@ -36,7 +36,7 @@ class PDFReadingParameter
### mode
-The mode used for PDF reading.
+The mode used for PDF reading. Defaults to `PDFRM_MULTIMODAL`.
```java
public @EnumPDFReadingMode int mode
diff --git a/programming/java/api-reference/core/enum-measure-unit.md b/programming/java/api-reference/core/enum-measure-unit.md
new file mode 100644
index 0000000..486e133
--- /dev/null
+++ b/programming/java/api-reference/core/enum-measure-unit.md
@@ -0,0 +1,21 @@
+---
+layout: default-layout
+title: MeasureUnit - Dynamsoft Core Java Enumerations
+description: The enumeration MeasureUnit in Dynamsoft Core Java Edition specifies how a numeric value is interpreted relative to a reference dimension.
+keywords: MeasureUnit, pixel, percentage
+codeAutoHeight: true
+---
+
+# Enumeration MeasureUnit
+
+`MeasureUnit` specifies how a numeric value should be interpreted relative to a reference dimension.
+
+```java
+@Retention(RetentionPolicy.CLASS)
+public @interface EnumMeasureUnit {
+ /** The value is an absolute pixel count. */
+ int MU_PIXEL = 0;
+ /** The value is a percentage of the reference dimension (e.g. 25 = 25%). */
+ int MU_PERCENTAGE = 1;
+}
+```
diff --git a/programming/java/api-reference/core/enum-pdf-reading-mode.md b/programming/java/api-reference/core/enum-pdf-reading-mode.md
index d7b7629..9d9adfa 100644
--- a/programming/java/api-reference/core/enum-pdf-reading-mode.md
+++ b/programming/java/api-reference/core/enum-pdf-reading-mode.md
@@ -13,11 +13,17 @@ codeAutoHeight: true
```java
@Retention(RetentionPolicy.CLASS)
public @interface EnumPDFReadingMode {
- //Vector PDF reading mode.
+ /** Deprecated. Covered by PDFRM_MULTIMODAL. */
int PDFRM_VECTOR = 0x01;
- //Raster PDF reading mode.
+ /** Renders the entire page as a bitmap regardless of object type. */
int PDFRM_RASTER = 0x02;
- //Reserved PDF reading mode.
+ /**
+ * Extracts multimodal information from a PDF, including vector graphics,
+ * text content, and embedded images, which can be used for subsequent
+ * tasks such as barcode reading, text recognition, and document analysis.
+ */
+ int PDFRM_MULTIMODAL = 0x03;
+ /** Reserved PDF reading mode. */
int PDFRM_REV = 0x80000000;
}
```
\ No newline at end of file
diff --git a/programming/java/api-reference/index.md b/programming/java/api-reference/index.md
index 253aa4f..d6078c5 100644
--- a/programming/java/api-reference/index.md
+++ b/programming/java/api-reference/index.md
@@ -22,12 +22,11 @@ needAutoGenerateSidebar: false
### Classes
- [`BufferedItemsManager`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/buffered-items-manager.html)
-- [`CaptureStateListener`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/capture-state-listener.html)
-- [`CaptureVisionRouterModule`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/capture-vision-router-module.html)
-- [`CapturedResultArray`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/captured-result-array.html)
+- [`CapturedResult`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/captured-result.html)
- [`CapturedResultFilter`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/captured-result-filter.html)
- [`CapturedResultReceiver`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html)
-- [`CapturedResult`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/captured-result.html)
+- [`CaptureStateListener`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/capture-state-listener.html)
+- [`CaptureVisionRouterModule`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/capture-vision-router-module.html)
- [`ImageSourceStateListener`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/image-source-state-listener.html)
- [`IntermediateResultManager`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/intermediate-result-manager.html)
- [`IntermediateResultReceiver`]({{ site.dcvb_java_api }}capture-vision-router/auxiliary-classes/intermediate-result-receiver.html)
@@ -200,6 +199,7 @@ needAutoGenerateSidebar: false
- [`EnumImageTagType`]({{ site.dcvb_java_api }}core/enum-image-tag-type.html)
- [`IntermediateResultUnitType`]({{ site.dcvb_java_api }}core/enum-intermediate-result-unit-type.html)
- [`EnumPDFReadingMode`]({{ site.dcvb_java_api }}core/enum-pdf-reading-mode.html)
+- [`EnumMeasureUnit`]({{ site.dcvb_java_api }}core/enum-measure-unit.html)
- [`EnumRasterDataSource`]({{ site.dcvb_java_api }}core/enum-raster-data-source.html)
- [`EnumRegionObjectElementType`]({{ site.dcvb_java_api }}core/enum-region-object-element-type.html)
- [`EnumSectionType`]({{ site.dcvb_java_api }}core/enum-section-type.html)
@@ -215,6 +215,11 @@ needAutoGenerateSidebar: false
- [`ImageIO`]({{ site.dcvb_java_api }}utility/image-io.html)
- [`ImageProcessor`]({{ site.dcvb_java_api }}utility/image-processor.html)
- [`ImageDrawer`]({{ site.dcvb_java_api }}utility/image-drawer.html)
+- [`LayoutAnalyzer`]({{ site.dcvb_java_api }}utility/layout-analyzer.html)
+- [`LayoutAxis`]({{ site.dcvb_java_api }}utility/layout-axis.html)
+- [`LayoutAnalysisParameter`]({{ site.dcvb_java_api }}utility/layout-analysis-parameter.html)
+- [`LayoutElement`]({{ site.dcvb_java_api }}utility/layout-element.html)
+- [`LayoutAnalysisResult`]({{ site.dcvb_java_api }}utility/layout-analysis-result.html)
- [`MultiFrameResultCrossFilter`]({{ site.dcvb_java_api }}utility/multi-frame-result-cross-filter.html)
- [`ProactiveImageSourceAdapter`]({{ site.dcvb_java_api }}utility/proactive-image-source-adapter.html)
- [`UtilityModule`]({{ site.dcvb_java_api }}utility/utility-module.html)
@@ -222,6 +227,8 @@ needAutoGenerateSidebar: false
### Enums
- [`FilterType`]({{ site.dcvb_java_api }}utility/enum-filter-type.html)
+- [`EnumLayoutPattern`]({{ site.dcvb_java_api }}utility/enum-layout-pattern.html)
+- [`EnumLayoutElementSource`]({{ site.dcvb_java_api }}utility/enum-layout-element-source.html)
## DynamsoftLicense
@@ -231,6 +238,8 @@ needAutoGenerateSidebar: false
## DynamsoftImageProcessing
+### Classes
+
- [`ImageProcessingModule`]({{ site.dcvb_java_api }}image-processing/image-processing-module.html)
diff --git a/programming/java/api-reference/license/license-manager.md b/programming/java/api-reference/license/license-manager.md
index e235682..aac6518 100644
--- a/programming/java/api-reference/license/license-manager.md
+++ b/programming/java/api-reference/license/license-manager.md
@@ -62,7 +62,13 @@ static void setDeviceFriendlyName(String name) throws LicenseException
**Parameters**
-`name` The friendly name of the device.
+`name` The friendly name of the device. It must satisfy all of the following constraints:
+
+- Maximum length: 64 characters.
+- Allowed characters: are letters (a-z, A-Z), digits (0-9), hyphen (-), underscore (_), and period (.)
+- Must start and end with a letter or digit (not `-`, `_`, or `.`).
+
+If the name does not meet these requirements, a `LicenseException` is thrown with the error code `EC_PARAMETER_VALUE_INVALID`(-10038).
**Exception**
diff --git a/programming/java/api-reference/utility/enum-layout-element-source.md b/programming/java/api-reference/utility/enum-layout-element-source.md
new file mode 100644
index 0000000..dcc7940
--- /dev/null
+++ b/programming/java/api-reference/utility/enum-layout-element-source.md
@@ -0,0 +1,23 @@
+---
+layout: default-layout
+title: LayoutElementSource - Dynamsoft Utility Java Enumerations
+description: The enumeration LayoutElementSource in Dynamsoft Utility Java Edition indicates the origin of an element in layout analysis results.
+keywords: LayoutElementSource, layout element, inferred, input
+codeAutoHeight: true
+---
+
+# Enumeration LayoutElementSource
+
+`LayoutElementSource` indicates the origin of a layout element.
+
+```java
+@Retention(RetentionPolicy.CLASS)
+public @interface EnumLayoutElementSource {
+ /** No element exists at this logical grid position (used for alignment in non-uniform rows). */
+ int LES_NONE = 0;
+ /** Element is provided from the original input array. */
+ int LES_INPUT = 1;
+ /** Element is reconstructed or filled in by the algorithm. */
+ int LES_INFERRED = 2;
+}
+```
diff --git a/programming/java/api-reference/utility/enum-layout-pattern.md b/programming/java/api-reference/utility/enum-layout-pattern.md
new file mode 100644
index 0000000..7265626
--- /dev/null
+++ b/programming/java/api-reference/utility/enum-layout-pattern.md
@@ -0,0 +1,23 @@
+---
+layout: default-layout
+title: LayoutPattern - Dynamsoft Utility Java Enumerations
+description: The enumeration LayoutPattern in Dynamsoft Utility Java Edition defines strategies for organizing quadrilaterals in layout analysis.
+keywords: LayoutPattern, layout, lines, matrix
+codeAutoHeight: true
+---
+
+# Enumeration LayoutPattern
+
+`LayoutPattern` defines the strategy for the layout engine to organize quadrilaterals.
+
+```java
+@Retention(RetentionPolicy.CLASS)
+public @interface EnumLayoutPattern {
+ /** Algorithm automatically detects the best layout pattern. */
+ int LP_UNKNOWN = 0;
+ /** Elements are organized into sequential lines (rows or columns). */
+ int LP_LINES = 1;
+ /** Elements are organized into a strict grid/matrix structure. */
+ int LP_MATRIX = 2;
+}
+```
diff --git a/programming/java/api-reference/utility/layout-analysis-parameter.md b/programming/java/api-reference/utility/layout-analysis-parameter.md
new file mode 100644
index 0000000..4a98fdf
--- /dev/null
+++ b/programming/java/api-reference/utility/layout-analysis-parameter.md
@@ -0,0 +1,74 @@
+---
+layout: default-layout
+title: LayoutAnalysisParameter Class - Dynamsoft Utility Java Edition API Reference
+description: API reference for the LayoutAnalysisParameter class in Dynamsoft Utility Java Edition, providing input parameters to guide quadrilateral layout analysis.
+keywords: LayoutAnalysisParameter, layout analysis, parameter, java
+needAutoGenerateSidebar: true
+---
+
+# LayoutAnalysisParameter
+
+The `LayoutAnalysisParameter` class holds input parameters to guide the layout analysis.
+
+## Definition
+
+*Package:* `com.dynamsoft.utility`
+
+```java
+class LayoutAnalysisParameter
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+|-----------|------|-------------|
+| [`pattern`](#pattern) | *int* | Desired layout pattern. |
+| [`axes`](#axes) | *LayoutAxis[]* | Configuration for Primary (0) and Secondary (1) axes. |
+| [`inputImageWidth`](#inputimagewidth) | *int* | Width of the source image in pixels. |
+| [`inputImageHeight`](#inputimageheight) | *int* | Height of the source image in pixels. |
+
+## Constructors
+
+| Constructor | Description |
+|-------------|-------------|
+| [`LayoutAnalysisParameter()`](#layoutanalysisparameter) | Initializes a new instance with default values. |
+
+### pattern
+
+Desired layout pattern. Use `LP_UNKNOWN` for auto-detection.
+
+```java
+public @EnumLayoutPattern int pattern = EnumLayoutPattern.LP_UNKNOWN;
+```
+
+**See Also**
+
+[EnumLayoutPattern]({{ site.dcvb_java_api }}utility/enum-layout-pattern.html)
+
+### axes
+
+Configuration for Primary (axis 0) and Secondary (axis 1) axes.
+
+```java
+public LayoutAxis[] axes;
+```
+
+**See Also**
+
+[LayoutAxis]({{ site.dcvb_java_api }}utility/layout-axis.html)
+
+### inputImageWidth
+
+Width of the source image in pixels. When provided, prevents inferred quads from extending beyond the image bounds. Default: 0 (no boundary check).
+
+```java
+public int inputImageWidth = 0;
+```
+
+### inputImageHeight
+
+Height of the source image in pixels. When provided, prevents inferred quads from extending beyond the image bounds. Default: 0 (no boundary check).
+
+```java
+public int inputImageHeight = 0;
+```
diff --git a/programming/java/api-reference/utility/layout-analysis-result.md b/programming/java/api-reference/utility/layout-analysis-result.md
new file mode 100644
index 0000000..50f7691
--- /dev/null
+++ b/programming/java/api-reference/utility/layout-analysis-result.md
@@ -0,0 +1,72 @@
+---
+layout: default-layout
+title: LayoutAnalysisResult Class - Dynamsoft Utility Java Edition API Reference
+description: API reference for the LayoutAnalysisResult class in Dynamsoft Utility Java Edition, providing comprehensive results of a quadrilateral layout analysis.
+keywords: LayoutAnalysisResult, layout analysis, result, inferred quads, java
+needAutoGenerateSidebar: true
+---
+
+# LayoutAnalysisResult
+
+The `LayoutAnalysisResult` class holds the comprehensive results of the layout analysis.
+
+## Definition
+
+*Package:* `com.dynamsoft.utility`
+
+```java
+class LayoutAnalysisResult
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+|-----------|------|-------------|
+| [`inferredQuads`](#inferredquads) | *Quadrilateral[]* | Array of newly generated (inferred) quads. |
+| [`elements`](#elements) | *LayoutElement[][]* | A 2D array (grid) of layout elements. |
+| [`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 (inferred) quads.
+
+```java
+public Quadrilateral[] inferredQuads;
+```
+
+**See Also**
+
+[Quadrilateral]({{ site.dcvb_java_api }}core/basic-classes/quadrilateral.html)
+
+### elements
+
+A 2D array (grid) of layout elements `[rowCount][colCount]`. In `LP_LINES` mode, rows may have varying physical lengths. Rows shorter than `colCount` are padded with elements whose source is set to `LES_NONE`.
+
+```java
+public LayoutElement[][] elements;
+```
+
+**See Also**
+
+[LayoutElement]({{ site.dcvb_java_api }}utility/layout-element.html)
+
+### detectedPattern
+
+The actual layout pattern identified by the engine.
+
+```java
+public @EnumLayoutPattern int detectedPattern;
+```
+
+**See Also**
+
+[EnumLayoutPattern]({{ site.dcvb_java_api }}utility/enum-layout-pattern.html)
+
+### errorCode
+
+0 for success, non-zero for error.
+
+```java
+public int errorCode;
+```
diff --git a/programming/java/api-reference/utility/layout-analyzer.md b/programming/java/api-reference/utility/layout-analyzer.md
new file mode 100644
index 0000000..d6b0b1e
--- /dev/null
+++ b/programming/java/api-reference/utility/layout-analyzer.md
@@ -0,0 +1,53 @@
+---
+layout: default-layout
+title: LayoutAnalyzer Class - Dynamsoft Utility Java Edition API Reference
+description: API reference for the LayoutAnalyzer class in Dynamsoft Utility Java Edition, providing high-performance quadrilateral layout analysis.
+keywords: LayoutAnalyzer, layout analysis, quadrilateral, java
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+---
+
+# LayoutAnalyzer
+
+The `LayoutAnalyzer` class provides a high-performance layout analysis engine. It analyzes the spatial distribution of quadrilaterals to detect and map structural patterns (Lines or Matrix), with logical grid position mapping and gap-filling inference.
+
+## Definition
+
+*Package:* `com.dynamsoft.utility`
+
+```java
+public final class LayoutAnalyzer
+```
+
+## Methods
+
+| Method | Description |
+|--------|-------------|
+| [`analyze`](#analyze) | Performs layout analysis on an array of quadrilaterals and returns a result set. |
+
+## analyze
+
+Performs layout analysis and returns a result set.
+
+```java
+public static LayoutAnalysisResult analyze(Quadrilateral[] inputQuads, LayoutAnalysisParameter parameter)
+public static LayoutAnalysisResult analyze(Quadrilateral[] inputQuads)
+```
+
+**Parameters**
+
+`inputQuads` Array of input quadrilaterals.
+
+`parameter` Optional parameters to constrain the analysis.
+
+**Return Value**
+
+Returns a `LayoutAnalysisResult` object, or `null` on failure.
+
+**See Also**
+
+[Quadrilateral]({{ site.dcvb_java_api }}core/basic-classes/quadrilateral.html)
+
+[LayoutAnalysisParameter]({{ site.dcvb_java_api }}utility/layout-analysis-parameter.html)
+
+[LayoutAnalysisResult]({{ site.dcvb_java_api }}utility/layout-analysis-result.html)
diff --git a/programming/java/api-reference/utility/layout-axis.md b/programming/java/api-reference/utility/layout-axis.md
new file mode 100644
index 0000000..4aed766
--- /dev/null
+++ b/programming/java/api-reference/utility/layout-axis.md
@@ -0,0 +1,78 @@
+---
+layout: default-layout
+title: LayoutAxis Class - Dynamsoft Utility Java Edition API Reference
+description: API reference for the LayoutAxis class in Dynamsoft Utility Java Edition, configuring axis parameters for quadrilateral layout analysis.
+keywords: LayoutAxis, layout axis, spacing, angle, staggered, java
+needAutoGenerateSidebar: true
+---
+
+# LayoutAxis
+
+The `LayoutAxis` class holds configuration for a specific orientation axis used in layout analysis. Layout analysis involves two axes:
+
+- **Axis 0 (Primary)**: The direction of flow within a line.
+- **Axis 1 (Secondary)**: The direction in which lines are stacked.
+
+## Definition
+
+*Package:* `com.dynamsoft.utility`
+
+```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 (brick-like) pattern. |
+| [`angle`](#angle) | *int* | Target angle in degrees [0, 180]. Use -1 for auto-detection. |
+| [`isEqualSpacing`](#isequalspaing) | *boolean* | Force equal gaps between elements. |
+| [`spacing`](#spacing) | *int* | Spacing between elements along this axis. Use -1 for auto-detection. |
+| [`spacingUnit`](#spacingunit) | *int* | Interpretation mode for the spacing value. |
+
+### elementCount
+
+```java
+public int elementCount = -1;
+```
+
+### isStaggered
+
+```java
+public boolean isStaggered = false;
+```
+
+### angle
+
+```java
+public int angle = -1;
+```
+
+### isEqualSpacing
+
+```java
+public boolean isEqualSpacing = false;
+```
+
+### spacing
+
+Spacing between elements along this axis. Use -1 for auto-detection.
+
+- In `MU_PIXEL` mode: absolute pixel count.
+- In `MU_PERCENTAGE` mode: percentage of the element's characteristic size (e.g., 200 = 200% = twice the reference width).
+
+```java
+public int spacing = -1;
+```
+
+### spacingUnit
+
+```java
+public @EnumMeasureUnit int spacingUnit = EnumMeasureUnit.MU_PIXEL;
+```
+
+**See Also**
+
+[EnumMeasureUnit]({{ site.dcvb_java_api }}core/enum-measure-unit.html)
diff --git a/programming/java/api-reference/utility/layout-element.md b/programming/java/api-reference/utility/layout-element.md
new file mode 100644
index 0000000..dbe6706
--- /dev/null
+++ b/programming/java/api-reference/utility/layout-element.md
@@ -0,0 +1,46 @@
+---
+layout: default-layout
+title: LayoutElement Class - Dynamsoft Utility Java Edition API Reference
+description: API reference for the LayoutElement class in Dynamsoft Utility Java Edition, representing an element in a quadrilateral layout analysis result.
+keywords: LayoutElement, layout element, quad, source, java
+needAutoGenerateSidebar: true
+---
+
+# LayoutElement
+
+The `LayoutElement` class represents an element in a layout result. It combines the element's geometry with its origin information.
+
+## Definition
+
+*Package:* `com.dynamsoft.utility`
+
+```java
+class LayoutElement
+```
+
+## Attributes
+
+| Attribute | Type | Description |
+|-----------|------|-------------|
+| [`quad`](#quad) | *Quadrilateral* | Geometric coordinates of the element. |
+| [`source`](#source) | *int* | Origin of this element (Input / Inferred / None). |
+
+### quad
+
+```java
+public Quadrilateral quad = new Quadrilateral();
+```
+
+**See Also**
+
+[Quadrilateral]({{ site.dcvb_java_api }}core/basic-classes/quadrilateral.html)
+
+### source
+
+```java
+public @EnumLayoutElementSource int source = EnumLayoutElementSource.LES_NONE;
+```
+
+**See Also**
+
+[EnumLayoutElementSource]({{ site.dcvb_java_api }}utility/enum-layout-element-source.html)
diff --git a/programming/java/index.md b/programming/java/index.md
index ef3ba56..645ac0c 100644
--- a/programming/java/index.md
+++ b/programming/java/index.md
@@ -22,18 +22,35 @@ Dynamsoft Capture Vision Bundle is an aggregating SDK of a series of specific fu
## System Requirements
-- Operating systems:
- - Windows Windows: Windows 8 and higher, or Windows Server 2012 and higher
- - Linux x64 (Ubuntu 14.04.4+ LTS, Debian 8+, CentOS 7+, etc.)
- - Linux arm 64bit
- - macOS (Universal) 12+
+### Supported Platforms
+
+**Windows**
+- Supported Versions: Windows 8 and higher, or Windows Server 2012 and higher
+- Architectures: x64, x86
+
+**Linux**
+- **x64**
+ - Supported Distributions: Ubuntu 16.04+ LTS, Debian 8+, CentOS 7+
+ - Dependencies: glibc 2.17
+- **ARM64**
+ - Supported Distributions: Ubuntu 18.04+ LTS, Debian 10+, CentOS/RHEL 8+
+ - Dependencies: glibc 2.27
+
+**macOS**
+- Supported Versions: macOS 12 (Monterey) and higher
+- Architectures: universal (x64, Apple Silicon)
+
+### Runtime Environment
+
- JDK 1.8 and above
-- For Embedded Devices:
-For embedded or ARM-based platforms, we recommend using a device with performance equivalent to or better than a Raspberry Pi 4 Model B (4GB RAM). Minimum recommended specs:
- - Quad-core ARM Cortex-A72 processor (or equivalent)
- - 4 GB RAM
- - Linux-based OS (e.g., Raspberry Pi OS, Ubuntu Server)
+### Embedded Devices
+
+For embedded or ARM-based platforms, we recommend using a device with performance equivalent to or better than a Raspberry Pi 4 Model B (4 GB RAM). Minimum recommended specs:
+
+- Quad-core ARM Cortex-A72 processor or equivalent
+- 4 GB RAM
+- Linux-based OS, such as Raspberry Pi OS or Ubuntu Server
> [!NOTE]
> Other architectures and operating systems, such as ESP32, MIPS, FreeRTOS, and Micrium uC/OS, are not supported.
diff --git a/programming/java/release-notes/index.md b/programming/java/release-notes/index.md
index a8800d6..abb2675 100644
--- a/programming/java/release-notes/index.md
+++ b/programming/java/release-notes/index.md
@@ -9,6 +9,7 @@ noTitleIndex: true
# Module Release Notes - Dynamsoft Capture Vision Java Edition
+- [3.6.1000 (07/23/2026)]({{ site.dcvb_java_release_notes }}java-3.html#361000-07232026)
- [3.4.3000 (06/30/2026)]({{ site.dcvb_java_release_notes }}java-3.html#343000-06302026)
- [3.4.2001 (04/17/2026)]({{ site.dcvb_java_release_notes }}java-3.html#342001-04172026)
- [3.4.2000 (03/18/2026)]({{ site.dcvb_java_release_notes }}java-3.html#342000-03182026)
diff --git a/programming/java/release-notes/java-3.md b/programming/java/release-notes/java-3.md
index 6109caf..262f93f 100644
--- a/programming/java/release-notes/java-3.md
+++ b/programming/java/release-notes/java-3.md
@@ -8,6 +8,89 @@ needGenerateH3Content: false
# Release Notes for Java Edition - 3.x
+## 3.6.1000 (07/23/2026)
+
+### Highlights
+
+#### Multimodal PDF Content Extraction
+
+- **New PDF Reading Mode** - Added [`PDFRM_MULTIMODAL`]({{ site.dcvb_java_api }}core/enum-pdf-reading-mode.html) to [`PDFReadingMode`]({{ site.dcvb_java_api }}core/enum-pdf-reading-mode.html), now the default for [`PDFReadingParameter`]({{ site.dcvb_java_api }}core/basic-classes/pdf-reading-parameter.html). It extracts vector graphics, text content, and embedded images from PDF files, enabling stronger barcode reading performance in multimodal PDF scenarios.
+- **Performance Behavior Update** - Compared with full-page raster rendering, [`PDFRM_MULTIMODAL`]({{ site.dcvb_java_api }}core/enum-pdf-reading-mode.html) usually improves speed by avoiding unnecessary rendering of irrelevant regions.
+
+#### 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_java_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
+
+- **Support text lines in arbitrary orientations more automatically** - Added [`OrientationDetectionModes`]({{ site.dcvb_parameters_reference }}label-recognizer-task-settings/orientation-detection-modes.html) to automatically detect text line orientation and correct the orientation of text lines for further processing. Two modes are available: `ODM_SPATIAL_REFERENCES` and `ODM_CHARS_ORIENTATION_NEURAL_NETWORK`.
+
+### New
+
+- Added [`PDFRM_MULTIMODAL`]({{ site.dcvb_java_api }}core/enum-pdf-reading-mode.html) value to [`PDFReadingMode`]({{ site.dcvb_java_api }}core/enum-pdf-reading-mode.html) enumeration for multimodal PDF content extraction.
+
+- 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 a new overload of [`captureMultiPages()`]({{ site.dcvb_java_api }}capture-vision-router/single-file-processing.html#capturemultipages) that accepts a [`FileFetcher`]({{ site.dcvb_java_api }}utility/file-fetcher.html) parameter for more flexible file input handling.
+
+- Added [`LayoutAnalyzer`]({{ site.dcvb_java_api }}utility/layout-analyzer.html) class with [`analyze()`]({{ site.dcvb_java_api }}utility/layout-analyzer.html#analyze) static method for quadrilateral layout analysis.
+
+- Added [`LayoutPattern`]({{ site.dcvb_java_api }}utility/enum-layout-pattern.html) enumeration with values `LP_UNKNOWN`, `LP_LINES`, and `LP_MATRIX`.
+
+- Added [`LayoutElementSource`]({{ site.dcvb_java_api }}utility/enum-layout-element-source.html) enumeration with values `LES_NONE`, `LES_INPUT`, and `LES_INFERRED`.
+
+- Added [`MeasureUnit`]({{ site.dcvb_java_api }}core/enum-measure-unit.html) enumeration with values `MU_PIXEL` and `MU_PERCENTAGE`.
+
+- Added structures [`LayoutAxis`]({{ site.dcvb_java_api }}utility/layout-axis.html), [`LayoutAnalysisParameter`]({{ site.dcvb_java_api }}utility/layout-analysis-parameter.html), [`LayoutElement`]({{ site.dcvb_java_api }}utility/layout-element.html), and [`LayoutAnalysisResult`]({{ site.dcvb_java_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_java_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
+
+- Default [`PDFReadingMode`]({{ site.dcvb_java_api }}core/enum-pdf-reading-mode.html) in [`PDFReadingParameter`]({{ site.dcvb_java_api }}core/basic-classes/pdf-reading-parameter.html) constructor changed from [`PDFRM_RASTER`]({{ site.dcvb_java_api }}core/enum-pdf-reading-mode.html) to [`PDFRM_MULTIMODAL`]({{ site.dcvb_java_api }}core/enum-pdf-reading-mode.html).
+
+- [`MaxParallelTasks`]({{ site.dcvb_parameters_reference }}capture-vision-template/max-parallel-tasks.html) now controls the total number of concurrent Work 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.
+
+- [`setDeviceFriendlyName()`]({{ site.dcvb_java_api }}license/license-manager.html#setdevicefriendlyname) 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_java_api }}core/enum-error-code.html) if constraints are not met.
+
+- The Linux ARM64 minimum requirement is now glibc 2.27 (Ubuntu 18.04+, Debian 10+, and CentOS/RHEL 8+).
+
+- Removed the VC++ Redistributable runtime dependency for the JNI DLL on Windows (runtime linkage changed from MD to MT).
+
+### Improved
+
+- Updated `MRZLocalization.data` model for improved portrait zone detection accuracy.
+
+- [`findPortraitZone()`]({{ site.dcvb_java_api }}id-utility/identity-processor.html#findportraitzone) now returns the portrait zone quadrilateral with the top-left corner of the upright portrait as the first point.
+
+- Improved `idNumberType` field extraction accuracy for `SOUTH_AFRICA_DL` parsing.
+
+### Fixed
+
+- Fixed a crash that could occur in AWS Lambda environments under certain conditions.
+
+- Fixed an issue in GS1-Databar AI `17` (YYMMDD) results where the month field could be missing a leading zero.
+
+### Deprecations
+
+- Marked `PDFRM_VECTOR` as deprecated (covered by [`PDFRM_MULTIMODAL`]({{ site.dcvb_java_api }}core/enum-pdf-reading-mode.html)).
+
## 3.4.3000 (06/30/2026)
### Security Updates
diff --git a/programming/python/api-reference/capture-vision-router/capture-vision-router.md b/programming/python/api-reference/capture-vision-router/capture-vision-router.md
index 35a2fe4..3896621 100644
--- a/programming/python/api-reference/capture-vision-router/capture-vision-router.md
+++ b/programming/python/api-reference/capture-vision-router/capture-vision-router.md
@@ -7,7 +7,7 @@ keywords: capture vision router, router, python, api reference
# CaptureVisionRouter
-The `CaptureVisionRouter` class is what a user uses to interact with image-processing and semantic-processing products in their applications. It accepts an image source and returns processing results which may contain [Final results]({{ site.dcvb_architecture }}output.html#final-results?lang=python).
+The `CaptureVisionRouter` class is what a user uses to interact with image-processing and semantic-processing products in their applications. It accepts an image source and returns processing results which may contain [Final results]({{ site.dcvb_architecture }}output.html#final-results).
## Definition
diff --git a/programming/python/api-reference/capture-vision-router/single-file-processing.md b/programming/python/api-reference/capture-vision-router/single-file-processing.md
index ccd44cf..2720db9 100644
--- a/programming/python/api-reference/capture-vision-router/single-file-processing.md
+++ b/programming/python/api-reference/capture-vision-router/single-file-processing.md
@@ -55,14 +55,15 @@ Returns a `CapturedResult` object containing the captured items.
Processes an image or file containing multiple pages to derive important information. It can optionally use a specified template for the capture.
```python
-def capture_multi_pages(self, file: Union[str, bytes], template_name: str = "") -> CapturedResultArray:
+def capture_multi_pages(self, file: Union[str, bytes, "FileFetcher"], template_name: str = "") -> CapturedResultArray:
```
**Parameters**
-- `file` <*Union[str, bytes]*>: The input file containing multiple pages. It can be:
+- `file` <*Union[str, bytes, FileFetcher]*>: The input source. It can be:
- A file path <*str*> pointing to a multi-page image (e.g., PDF, TIFF).
- A byte stream <*bytes*> representing the file content.
+ - A `FileFetcher` instance that provides the files to process.
- `template_name` <*str*, optional>: Specifies a `CaptureVisionTemplate` to use for capturing.
**Remarks**
diff --git a/programming/python/api-reference/core/basic-classes/pdf-reading-parameter.md b/programming/python/api-reference/core/basic-classes/pdf-reading-parameter.md
index 71b6631..10a1ad9 100644
--- a/programming/python/api-reference/core/basic-classes/pdf-reading-parameter.md
+++ b/programming/python/api-reference/core/basic-classes/pdf-reading-parameter.md
@@ -43,7 +43,7 @@ def __init__(self):
**Remarks**
This constructor initializes the properties with default values:
-- `mode`: 2 (EnumPDFReadingMode.PDFRM_RASTER.value)
+- `mode`: `EnumPDFReadingMode.PDFRM_MULTIMODAL`
- `dpi`: 300
-- `raster_data_source`: 0 (EnumRasterDataSource.RDS_RASTERIZED_PAGES.value)
+- `raster_data_source`: `EnumRasterDataSource.RDS_RASTERIZED_PAGES`
diff --git a/programming/python/api-reference/core/enum-measure-unit.md b/programming/python/api-reference/core/enum-measure-unit.md
new file mode 100644
index 0000000..d1f3e2c
--- /dev/null
+++ b/programming/python/api-reference/core/enum-measure-unit.md
@@ -0,0 +1,19 @@
+---
+layout: default-layout
+title: MeasureUnit - Dynamsoft Core Python Enumerations
+description: The enumeration MeasureUnit in Dynamsoft Core Python Edition specifies how a numeric value is interpreted relative to a reference dimension.
+keywords: MeasureUnit, pixel, percentage
+codeAutoHeight: true
+---
+
+# Enumeration MeasureUnit
+
+`MeasureUnit` specifies how a numeric value should be interpreted relative to a reference dimension.
+
+```python
+class EnumMeasureUnit(IntEnum):
+ # The value is an absolute pixel count.
+ MU_PIXEL = 0
+ # The value is a percentage of the reference dimension (e.g. 25 = 25%).
+ MU_PERCENTAGE = 1
+```
diff --git a/programming/python/api-reference/core/enum-pdf-reading-mode.md b/programming/python/api-reference/core/enum-pdf-reading-mode.md
index 4e3872a..a98c0e6 100644
--- a/programming/python/api-reference/core/enum-pdf-reading-mode.md
+++ b/programming/python/api-reference/core/enum-pdf-reading-mode.md
@@ -12,7 +12,12 @@ codeAutoHeight: true
```python
class EnumPDFReadingMode(IntEnum):
+ # Deprecated. Covered by PDFRM_MULTIMODAL.
PDFRM_VECTOR = 0x01
+ # Renders the entire page as a bitmap regardless of object type.
PDFRM_RASTER = 0x02
+ # Extracts multimodal information from a PDF, including vector graphics,
+ # text content, and embedded images.
+ PDFRM_MULTIMODAL = 0x03
PDFRM_REV = -2147483648
```
\ No newline at end of file
diff --git a/programming/python/api-reference/index.md b/programming/python/api-reference/index.md
index 15fc5ff..730f5a8 100644
--- a/programming/python/api-reference/index.md
+++ b/programming/python/api-reference/index.md
@@ -22,12 +22,11 @@ needAutoGenerateSidebar: false
### Classes
- [`BufferedItemsManager`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/buffered-items-manager.html)
-- [`CaptureStateListener`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/capture-state-listener.html)
-- [`CaptureVisionRouterModule`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/capture-vision-router-module.html)
-- [`CapturedResultArray`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/captured-result-array.html)
+- [`CapturedResult`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/captured-result.html)
- [`CapturedResultFilter`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/captured-result-filter.html)
- [`CapturedResultReceiver`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html)
-- [`CapturedResult`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/captured-result.html)
+- [`CaptureStateListener`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/capture-state-listener.html)
+- [`CaptureVisionRouterModule`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/capture-vision-router-module.html)
- [`ImageSourceStateListener`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/image-source-state-listener.html)
- [`IntermediateResultManager`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/intermediate-result-manager.html)
- [`IntermediateResultReceiver`]({{ site.dcvb_python_api }}capture-vision-router/auxiliary-classes/intermediate-result-receiver.html)
@@ -200,6 +199,7 @@ needAutoGenerateSidebar: false
- [`EnumImageTagType`]({{ site.dcvb_python_api }}core/enum-image-tag-type.html)
- [`IntermediateResultUnitType`]({{ site.dcvb_python_api }}core/enum-intermediate-result-unit-type.html)
- [`EnumPDFReadingMode`]({{ site.dcvb_python_api }}core/enum-pdf-reading-mode.html)
+- [`EnumMeasureUnit`]({{ site.dcvb_python_api }}core/enum-measure-unit.html)
- [`EnumRasterDataSource`]({{ site.dcvb_python_api }}core/enum-raster-data-source.html)
- [`EnumRegionObjectElementType`]({{ site.dcvb_python_api }}core/enum-region-object-element-type.html)
- [`EnumSectionType`]({{ site.dcvb_python_api }}core/enum-section-type.html)
@@ -215,6 +215,11 @@ needAutoGenerateSidebar: false
- [`ImageIO`]({{ site.dcvb_python_api }}utility/image-io.html)
- [`ImageProcessor`]({{ site.dcvb_python_api }}utility/image-processor.html)
- [`ImageDrawer`]({{ site.dcvb_python_api }}utility/image-drawer.html)
+- [`LayoutAnalyzer`]({{ site.dcvb_python_api }}utility/layout-analyzer.html)
+- [`LayoutAxis`]({{ site.dcvb_python_api }}utility/layout-axis.html)
+- [`LayoutAnalysisParameter`]({{ site.dcvb_python_api }}utility/layout-analysis-parameter.html)
+- [`LayoutElement`]({{ site.dcvb_python_api }}utility/layout-element.html)
+- [`LayoutAnalysisResult`]({{ site.dcvb_python_api }}utility/layout-analysis-result.html)
- [`MultiFrameResultCrossFilter`]({{ site.dcvb_python_api }}utility/multi-frame-result-cross-filter.html)
- [`ProactiveImageSourceAdapter`]({{ site.dcvb_python_api }}utility/proactive-image-source-adapter.html)
- [`UtilityModule`]({{ site.dcvb_python_api }}utility/utility-module.html)
@@ -222,6 +227,8 @@ needAutoGenerateSidebar: false
### Enums
- [`FilterType`]({{ site.dcvb_python_api }}utility/enum-filter-type.html)
+- [`EnumLayoutPattern`]({{ site.dcvb_python_api }}utility/enum-layout-pattern.html)
+- [`EnumLayoutElementSource`]({{ site.dcvb_python_api }}utility/enum-layout-element-source.html)
## DynamsoftLicense
@@ -231,6 +238,8 @@ needAutoGenerateSidebar: false
## DynamsoftImageProcessing
+### Classes
+
- [`ImageProcessingModule`]({{ site.dcvb_python_api }}image-processing/image-processing-module.html)
diff --git a/programming/python/api-reference/license/license-manager.md b/programming/python/api-reference/license/license-manager.md
index 44b9420..a96010c 100644
--- a/programming/python/api-reference/license/license-manager.md
+++ b/programming/python/api-reference/license/license-manager.md
@@ -62,7 +62,13 @@ def set_device_friendly_name(name: str) -> Tuple[int, str]:
**Parameters**
-`name` The friendly name of the device.
+`name` The friendly name of the device. It must satisfy all of the following constraints:
+
+- Maximum length: 64 characters.
+- Allowed characters: are letters (a-z, A-Z), digits (0-9), hyphen (-), underscore (_), and period (.)
+- Must start and end with a letter or digit (not `-`, `_`, or `.`).
+
+If the name does not meet these requirements, the returned `error_code` will be `EnumErrorCode.EC_PARAMETER_VALUE_INVALID`(-10038).
**Return Value**
diff --git a/programming/python/api-reference/utility/enum-layout-element-source.md b/programming/python/api-reference/utility/enum-layout-element-source.md
new file mode 100644
index 0000000..56b9276
--- /dev/null
+++ b/programming/python/api-reference/utility/enum-layout-element-source.md
@@ -0,0 +1,21 @@
+---
+layout: default-layout
+title: LayoutElementSource - Dynamsoft Utility Python Enumerations
+description: The enumeration LayoutElementSource in Dynamsoft Utility Python Edition indicates the origin of an element in layout analysis results.
+keywords: LayoutElementSource, layout element, inferred, input
+codeAutoHeight: true
+---
+
+# Enumeration LayoutElementSource
+
+`LayoutElementSource` indicates the origin of a layout element.
+
+```python
+class EnumLayoutElementSource(IntEnum):
+ # No element exists at this logical grid position.
+ LES_NONE = 0
+ # Element is provided from the original input array.
+ LES_INPUT = 1
+ # Element is reconstructed or filled in by the algorithm.
+ LES_INFERRED = 2
+```
diff --git a/programming/python/api-reference/utility/enum-layout-pattern.md b/programming/python/api-reference/utility/enum-layout-pattern.md
new file mode 100644
index 0000000..8e50fa2
--- /dev/null
+++ b/programming/python/api-reference/utility/enum-layout-pattern.md
@@ -0,0 +1,21 @@
+---
+layout: default-layout
+title: LayoutPattern - Dynamsoft Utility Python Enumerations
+description: The enumeration LayoutPattern in Dynamsoft Utility Python Edition defines strategies for organizing quadrilaterals in layout analysis.
+keywords: LayoutPattern, layout, lines, matrix
+codeAutoHeight: true
+---
+
+# Enumeration LayoutPattern
+
+`LayoutPattern` defines the strategy for the layout engine to organize quadrilaterals.
+
+```python
+class EnumLayoutPattern(IntEnum):
+ # Algorithm automatically detects the best layout pattern.
+ LP_UNKNOWN = 0
+ # Elements are organized into sequential lines (rows or columns).
+ LP_LINES = 1
+ # Elements are organized into a strict grid/matrix structure.
+ LP_MATRIX = 2
+```
diff --git a/programming/python/api-reference/utility/layout-analysis-parameter.md b/programming/python/api-reference/utility/layout-analysis-parameter.md
new file mode 100644
index 0000000..f7d07b2
--- /dev/null
+++ b/programming/python/api-reference/utility/layout-analysis-parameter.md
@@ -0,0 +1,68 @@
+---
+layout: default-layout
+title: LayoutAnalysisParameter Class - Dynamsoft Utility Python Edition API Reference
+description: API reference for the LayoutAnalysisParameter class in Dynamsoft Utility Python Edition, providing input parameters to guide quadrilateral layout analysis.
+keywords: LayoutAnalysisParameter, layout analysis, parameter, python
+needAutoGenerateSidebar: true
+---
+
+# LayoutAnalysisParameter
+
+The `LayoutAnalysisParameter` class holds input parameters to guide the layout analysis.
+
+## Definition
+
+*Module:* utility
+
+```python
+class LayoutAnalysisParameter:
+```
+
+## Properties
+
+| Property | Type | Description |
+|----------|------|-------------|
+| [`pattern`](#pattern) | *EnumLayoutPattern* | Desired layout pattern. |
+| [`axes`](#axes) | *List[LayoutAxis]* | Configuration for Primary (0) and Secondary (1) axes. |
+| [`input_image_width`](#input_image_width) | *int* | Width of the source image in pixels. |
+| [`input_image_height`](#input_image_height) | *int* | Height of the source image in pixels. |
+
+### pattern
+
+Desired layout pattern. Use `LP_UNKNOWN` for auto-detection.
+
+```python
+pattern: EnumLayoutPattern
+```
+
+**See Also**
+
+[EnumLayoutPattern]({{ site.dcvb_python_api }}utility/enum-layout-pattern.html)
+
+### axes
+
+Configuration for Primary (axis 0) and Secondary (axis 1) axes.
+
+```python
+axes: List[LayoutAxis]
+```
+
+**See Also**
+
+[LayoutAxis]({{ site.dcvb_python_api }}utility/layout-axis.html)
+
+### input_image_width
+
+Width of the source image in pixels. When provided, prevents inferred quads from extending beyond the image bounds. Default: 0 (no boundary check).
+
+```python
+input_image_width: int
+```
+
+### input_image_height
+
+Height of the source image in pixels. When provided, prevents inferred quads from extending beyond the image bounds. Default: 0 (no boundary check).
+
+```python
+input_image_height: int
+```
diff --git a/programming/python/api-reference/utility/layout-analysis-result.md b/programming/python/api-reference/utility/layout-analysis-result.md
new file mode 100644
index 0000000..cfd0f54
--- /dev/null
+++ b/programming/python/api-reference/utility/layout-analysis-result.md
@@ -0,0 +1,90 @@
+---
+layout: default-layout
+title: LayoutAnalysisResult Class - Dynamsoft Utility Python Edition API Reference
+description: API reference for the LayoutAnalysisResult class in Dynamsoft Utility Python Edition, providing comprehensive results of a quadrilateral layout analysis.
+keywords: LayoutAnalysisResult, layout analysis, result, inferred quads, python
+needAutoGenerateSidebar: true
+---
+
+# LayoutAnalysisResult
+
+The `LayoutAnalysisResult` class holds the comprehensive results of the layout analysis.
+
+## Definition
+
+*Module:* utility
+
+```python
+class LayoutAnalysisResult:
+```
+
+## Properties
+
+| Property | Type | Description |
+|----------|------|-------------|
+| [`inferred_quads`](#inferred_quads) | *List[Quadrilateral]* | Array of newly generated (inferred) quads. |
+| [`elements`](#elements) | *List[List[LayoutElement]]* | A 2D array (grid) of layout elements. |
+| [`row_count`](#row_count) | *int* | Number of rows (Primary Axis direction). |
+| [`col_count`](#col_count) | *int* | Maximum number of columns across all rows (Secondary Axis direction). |
+| [`detected_pattern`](#detected_pattern) | *EnumLayoutPattern* | The actual layout pattern identified by the engine. |
+| [`error_code`](#error_code) | *int* | 0 for success, non-zero for error. |
+
+### inferred_quads
+
+Array of newly generated (inferred) quads.
+
+```python
+inferred_quads: List[Quadrilateral]
+```
+
+**See Also**
+
+[Quadrilateral]({{ site.dcvb_python_api }}core/basic-classes/quadrilateral.html)
+
+### elements
+
+A 2D array (grid) of layout elements `[row_count][col_count]`. In `LP_LINES` mode, rows may have varying physical lengths. Rows shorter than `col_count` are padded with elements whose source is set to `LES_NONE`.
+
+```python
+elements: List[List[LayoutElement]]
+```
+
+**See Also**
+
+[LayoutElement]({{ site.dcvb_python_api }}utility/layout-element.html)
+
+### row_count
+
+Number of rows (Primary Axis direction).
+
+```python
+row_count: int
+```
+
+### col_count
+
+Maximum number of columns across all rows (Secondary Axis direction).
+
+```python
+col_count: int
+```
+
+### detected_pattern
+
+The actual layout pattern identified by the engine.
+
+```python
+detected_pattern: EnumLayoutPattern
+```
+
+**See Also**
+
+[EnumLayoutPattern]({{ site.dcvb_python_api }}utility/enum-layout-pattern.html)
+
+### error_code
+
+0 for success, non-zero for error.
+
+```python
+error_code: int
+```
diff --git a/programming/python/api-reference/utility/layout-analyzer.md b/programming/python/api-reference/utility/layout-analyzer.md
new file mode 100644
index 0000000..8d85c46
--- /dev/null
+++ b/programming/python/api-reference/utility/layout-analyzer.md
@@ -0,0 +1,53 @@
+---
+layout: default-layout
+title: LayoutAnalyzer Class - Dynamsoft Utility Python Edition API Reference
+description: API reference for the LayoutAnalyzer class in Dynamsoft Utility Python Edition, providing high-performance quadrilateral layout analysis.
+keywords: LayoutAnalyzer, layout analysis, quadrilateral, python
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+---
+
+# LayoutAnalyzer
+
+The `LayoutAnalyzer` class provides a high-performance layout analysis engine. It analyzes the spatial distribution of quadrilaterals to detect and map structural patterns (Lines or Matrix), with logical grid position mapping and gap-filling inference.
+
+## Definition
+
+*Module:* utility
+
+```python
+class LayoutAnalyzer:
+```
+
+## Methods
+
+| Method | Description |
+|--------|-------------|
+| [`analyze`](#analyze) | Performs layout analysis on an array of quadrilaterals and returns a result set. |
+
+## analyze
+
+Performs layout analysis and returns a result set.
+
+```python
+@staticmethod
+def analyze(inputQuads: List[Quadrilateral], param: LayoutAnalysisParameter = None) -> LayoutAnalysisResult:
+```
+
+**Parameters**
+
+`inputQuads` Array of input quadrilaterals.
+
+`param` Optional parameters to constrain the analysis.
+
+**Return Value**
+
+Returns a `LayoutAnalysisResult` object, or `None` on failure.
+
+**See Also**
+
+[Quadrilateral]({{ site.dcvb_python_api }}core/basic-classes/quadrilateral.html)
+
+[LayoutAnalysisParameter]({{ site.dcvb_python_api }}utility/layout-analysis-parameter.html)
+
+[LayoutAnalysisResult]({{ site.dcvb_python_api }}utility/layout-analysis-result.html)
diff --git a/programming/python/api-reference/utility/layout-axis.md b/programming/python/api-reference/utility/layout-axis.md
new file mode 100644
index 0000000..e5c5c5e
--- /dev/null
+++ b/programming/python/api-reference/utility/layout-axis.md
@@ -0,0 +1,78 @@
+---
+layout: default-layout
+title: LayoutAxis Class - Dynamsoft Utility Python Edition API Reference
+description: API reference for the LayoutAxis class in Dynamsoft Utility Python Edition, configuring axis parameters for quadrilateral layout analysis.
+keywords: LayoutAxis, layout axis, spacing, angle, staggered, python
+needAutoGenerateSidebar: true
+---
+
+# LayoutAxis
+
+The `LayoutAxis` class holds configuration for a specific orientation axis used in layout analysis. Layout analysis involves two axes:
+
+- **Axis 0 (Primary)**: The direction of flow within a line.
+- **Axis 1 (Secondary)**: The direction in which lines are stacked.
+
+## Definition
+
+*Module:* utility
+
+```python
+class LayoutAxis:
+```
+
+## Properties
+
+| Property | Type | Description |
+|----------|------|-------------|
+| [`element_count`](#element_count) | *int* | Expected number of elements along this axis. Use -1 for auto-detection. |
+| [`is_staggered`](#is_staggered) | *bool* | Whether the layout uses an offset/staggered (brick-like) pattern. |
+| [`angle`](#angle) | *int* | Target angle in degrees [0, 180]. Use -1 for auto-detection. |
+| [`is_equal_spacing`](#is_equal_spacing) | *bool* | Force equal gaps between elements. |
+| [`spacing`](#spacing) | *int* | Spacing between elements along this axis. Use -1 for auto-detection. |
+| [`spacing_unit`](#spacing_unit) | *EnumMeasureUnit* | Interpretation mode for the spacing value. |
+
+### element_count
+
+```python
+element_count: int
+```
+
+### is_staggered
+
+```python
+is_staggered: bool
+```
+
+### angle
+
+```python
+angle: int
+```
+
+### is_equal_spacing
+
+```python
+is_equal_spacing: bool
+```
+
+### spacing
+
+Spacing between elements along this axis. Use -1 for auto-detection.
+
+- In `MU_PIXEL` mode: absolute pixel count.
+- In `MU_PERCENTAGE` mode: percentage of the element's characteristic size (e.g., 200 = 200% = twice the reference width).
+
+```python
+spacing: int
+```
+
+### spacing_unit
+
+```python
+spacing_unit: EnumMeasureUnit
+```
+
+**See Also**
+
+[EnumMeasureUnit]({{ site.dcvb_python_api }}core/enum-measure-unit.html)
diff --git a/programming/python/api-reference/utility/layout-element.md b/programming/python/api-reference/utility/layout-element.md
new file mode 100644
index 0000000..36b21aa
--- /dev/null
+++ b/programming/python/api-reference/utility/layout-element.md
@@ -0,0 +1,46 @@
+---
+layout: default-layout
+title: LayoutElement Class - Dynamsoft Utility Python Edition API Reference
+description: API reference for the LayoutElement class in Dynamsoft Utility Python Edition, representing an element in a quadrilateral layout analysis result.
+keywords: LayoutElement, layout element, quad, source, python
+needAutoGenerateSidebar: true
+---
+
+# LayoutElement
+
+The `LayoutElement` class represents an element in a layout result. It combines the element's geometry with its origin information.
+
+## Definition
+
+*Module:* utility
+
+```python
+class LayoutElement:
+```
+
+## Properties
+
+| Property | Type | Description |
+|----------|------|-------------|
+| [`quad`](#quad) | *Quadrilateral* | Geometric coordinates of the element. |
+| [`source`](#source) | *EnumLayoutElementSource* | Origin of this element (Input / Inferred / None). |
+
+### quad
+
+```python
+quad: Quadrilateral
+```
+
+**See Also**
+
+[Quadrilateral]({{ site.dcvb_python_api }}core/basic-classes/quadrilateral.html)
+
+### source
+
+```python
+source: EnumLayoutElementSource
+```
+
+**See Also**
+
+[EnumLayoutElementSource]({{ site.dcvb_python_api }}utility/enum-layout-element-source.html)
diff --git a/programming/python/index.md b/programming/python/index.md
index 03a0ac1..131c509 100644
--- a/programming/python/index.md
+++ b/programming/python/index.md
@@ -22,25 +22,45 @@ Dynamsoft Capture Vision Bundle is an aggregating SDK of a series of specific fu
## System Requirements
-- Operating Systems:
- - Windows x64
- - Linux x64, ARM 64-bit
- - macOS (Universal) 12+
-
-- Python Versions:
- - Python 3.14
- - Python 3.13
- - Python 3.12
- - Python 3.11
- - Python 3.10
- - Python 3.9
- - Python 3.8
-
-- For Embedded Devices:
-For embedded or ARM-based platforms, we recommend using a device with performance equivalent to or better than a Raspberry Pi 4 Model B (4GB RAM). Minimum recommended specs:
- - Quad-core ARM Cortex-A72 processor (or equivalent)
- - 4 GB RAM
- - Linux-based OS (e.g., Raspberry Pi OS, Ubuntu Server)
+### Supported Platforms
+
+**Windows**
+- Supported Versions: Windows 8 and higher, or Windows Server 2012 and higher
+- Architectures: x64
+
+**Linux**
+- **x64**
+ - Supported Distributions: Ubuntu 16.04+ LTS, Debian 8+, CentOS 7+
+ - Dependencies: glibc 2.17
+- **ARM64**
+ - Supported Distributions: Ubuntu 18.04+ LTS, Debian 10+, CentOS/RHEL 8+
+ - Dependencies: glibc 2.27
+
+**macOS**
+- Supported Versions: macOS 12 (Monterey) and higher
+- Architectures: universal (x64, Apple Silicon)
+
+### Supported Python Versions
+
+- Python 3.14
+- Python 3.13
+- Python 3.12
+- Python 3.11
+- Python 3.10
+- Python 3.9
+- Python 3.8
+- Python 3.7 (for versions below DBR 9.6.40.2)
+- Python 3.6 (for versions below DBR 9.6.40.2)
+- Python 3.5 (for versions below DBR 7.5)
+- Python 2.7 (for versions below DBR 7.2.2.3)
+
+### Embedded Devices
+
+For embedded or ARM-based platforms, we recommend using a device with performance equivalent to or better than a Raspberry Pi 4 Model B (4 GB RAM). Minimum recommended specs:
+
+- Quad-core ARM Cortex-A72 processor or equivalent
+- 4 GB RAM
+- Linux-based OS, such as Raspberry Pi OS or Ubuntu Server
> [!NOTE]
> Other architectures and operating systems, such as ESP32, MIPS, FreeRTOS, and Micrium uC/OS, are not supported.
diff --git a/programming/python/release-notes/index.md b/programming/python/release-notes/index.md
index 2bd009a..de5af89 100644
--- a/programming/python/release-notes/index.md
+++ b/programming/python/release-notes/index.md
@@ -9,6 +9,7 @@ noTitleIndex: true
# Module Release Notes - Dynamsoft Capture Vision Python Edition
+- [3.6.1000 (07/23/2026)]({{ site.dcvb_python_release_notes }}python-3.html#361000-07232026)
- [3.4.3000 (06/30/2026)]({{ site.dcvb_python_release_notes }}python-3.html#343000-06302026)
- [3.4.2001 (04/17/2026)]({{ site.dcvb_python_release_notes }}python-3.html#342001-04172026)
- [3.4.2000 (03/18/2026)]({{ site.dcvb_python_release_notes }}python-3.html#342000-03182026)
diff --git a/programming/python/release-notes/python-3.md b/programming/python/release-notes/python-3.md
index ad45a34..af5cb3e 100644
--- a/programming/python/release-notes/python-3.md
+++ b/programming/python/release-notes/python-3.md
@@ -8,6 +8,87 @@ needGenerateH3Content: false
# Release Notes for Python Edition - 3.x
+## 3.6.1000 (07/23/2026)
+
+### Highlights
+
+#### Multimodal PDF Content Extraction
+
+- **New PDF Reading Mode** - Added [`PDFRM_MULTIMODAL`]({{ site.dcvb_python_api }}core/enum-pdf-reading-mode.html) to [`PDFReadingMode`]({{ site.dcvb_python_api }}core/enum-pdf-reading-mode.html), now the default for [`PDFReadingParameter`]({{ site.dcvb_python_api }}core/basic-classes/pdf-reading-parameter.html). It extracts vector graphics, text content, and embedded images from PDF files, enabling stronger barcode reading performance in multimodal PDF scenarios.
+- **Performance Behavior Update** - Compared with full-page raster rendering, [`PDFRM_MULTIMODAL`]({{ site.dcvb_python_api }}core/enum-pdf-reading-mode.html) usually improves speed by avoiding unnecessary rendering of irrelevant regions.
+
+#### 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_python_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
+
+- **Support text lines in arbitrary orientations more automatically** - Added [`OrientationDetectionModes`]({{ site.dcvb_parameters_reference }}label-recognizer-task-settings/orientation-detection-modes.html) to automatically detect text line orientation and correct the orientation of text lines for further processing. Two modes are available: `ODM_SPATIAL_REFERENCES` and `ODM_CHARS_ORIENTATION_NEURAL_NETWORK`.
+
+### New
+
+- Added [`PDFRM_MULTIMODAL`]({{ site.dcvb_python_api }}core/enum-pdf-reading-mode.html) value to [`PDFReadingMode`]({{ site.dcvb_python_api }}core/enum-pdf-reading-mode.html) enumeration for multimodal PDF content extraction.
+
+- 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 a new overload of [`capture_multi_pages()`]({{ site.dcvb_python_api }}capture-vision-router/single-file-processing.html#capture_multi_pages) that accepts a [`FileFetcher`]({{ site.dcvb_python_api }}utility/file-fetcher.html) parameter for more flexible file input handling.
+
+- Added [`LayoutAnalyzer`]({{ site.dcvb_python_api }}utility/layout-analyzer.html) class with [`analyze()`]({{ site.dcvb_python_api }}utility/layout-analyzer.html#analyze) static method for quadrilateral layout analysis.
+
+- Added [`LayoutPattern`]({{ site.dcvb_python_api }}utility/enum-layout-pattern.html) enumeration with values `LP_UNKNOWN`, `LP_LINES`, and `LP_MATRIX`.
+
+- Added [`LayoutElementSource`]({{ site.dcvb_python_api }}utility/enum-layout-element-source.html) enumeration with values `LES_NONE`, `LES_INPUT`, and `LES_INFERRED`.
+
+- Added [`MeasureUnit`]({{ site.dcvb_python_api }}core/enum-measure-unit.html) enumeration with values `MU_PIXEL` and `MU_PERCENTAGE`.
+
+- Added structures [`LayoutAxis`]({{ site.dcvb_python_api }}utility/layout-axis.html), [`LayoutAnalysisParameter`]({{ site.dcvb_python_api }}utility/layout-analysis-parameter.html), [`LayoutElement`]({{ site.dcvb_python_api }}utility/layout-element.html), and [`LayoutAnalysisResult`]({{ site.dcvb_python_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_python_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
+
+- Default [`PDFReadingMode`]({{ site.dcvb_python_api }}core/enum-pdf-reading-mode.html) in [`PDFReadingParameter`]({{ site.dcvb_python_api }}core/basic-classes/pdf-reading-parameter.html) constructor changed from [`PDFRM_RASTER`]({{ site.dcvb_python_api }}core/enum-pdf-reading-mode.html) to [`PDFRM_MULTIMODAL`]({{ site.dcvb_python_api }}core/enum-pdf-reading-mode.html).
+
+- [`MaxParallelTasks`]({{ site.dcvb_parameters_reference }}capture-vision-template/max-parallel-tasks.html) now controls the total number of concurrent Work 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_python_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_python_api }}core/enum-error-code.html) if constraints are not met.
+
+- The Linux ARM64 minimum requirement is now glibc 2.27 (Ubuntu 18.04+, Debian 10+, and CentOS/RHEL 8+).
+
+### Improved
+
+- Updated `MRZLocalization.data` model for improved portrait zone detection accuracy.
+
+- [`find_portrait_zone()`]({{ site.dcvb_python_api }}id-utility/identity-processor.html#find_portrait_zone) now returns the portrait zone quadrilateral with the top-left corner of the upright portrait as the first point.
+
+- Improved `idNumberType` field extraction accuracy for `SOUTH_AFRICA_DL` parsing.
+
+### Fixed
+
+- Fixed a crash that could occur in AWS Lambda environments under certain conditions.
+
+- Fixed an issue in GS1-Databar AI `17` (YYMMDD) results where the month field could be missing a leading zero.
+
+### Deprecations
+
+- Marked `PDFRM_VECTOR` as deprecated (covered by [`PDFRM_MULTIMODAL`]({{ site.dcvb_python_api }}core/enum-pdf-reading-mode.html)).
+
## 3.4.3000 (06/30/2026)
### Security Updates