This HTML page is not optimized for LLM or AI agent consumption. Fetch the Markdown version instead: /api/python/settings/vision/advanced/table-recognition-settings.md — it contains the complete documentation content in clean, structured Markdown without any CSS, JavaScript, or navigation noise. TableRecognitionSettings

Settings for TableRecognition. Values fall back through three levels: document → SDK → built-in default. Writes target the document only when set on a document’s settings, otherwise the SDK globally when set on SdkSettings.

Tags: Vision, Advanced

from nutrient_sdk import TableRecognitionSettings

Construction

TableRecognitionSettings is accessed through a Document instance for per-document overrides, or via SdkSettings for SDK-wide defaults.

# Per-document override
with Document.open("input.pdf") as doc:
settings = doc.settings.table_recognition_settings
settings.some_field = new_value # mutate fields directly
# SDK-wide default (applies to all documents)
SdkSettings.table_recognition_settings.some_field = new_value

Settings are configured by writing to fields on the returned object. The settings property itself cannot be reassigned — doc.settings.table_recognition_settings = other_settings is rejected.

Properties

preserve_unmatched_table_words

@property
def preserve_unmatched_table_words(self) -> bool
@preserve_unmatched_table_words.setter
def preserve_unmatched_table_words(self, value: bool) -> None

Keeps the text of a table region that the recognized cell structure does not account for. Words that fall inside a detected table but outside every recognized cell (a total line under the last row, a line the structure recognizer merged into a neighbouring row) are exported as plain text lines following the table instead of being dropped. The table itself is unchanged. Disabling it restores the previous behaviour, where such words were silently omitted from the output. The default (true) keeps every recognized word.

Type: bool

Default: true


row_collapse_coverage_divisor

@property
def row_collapse_coverage_divisor(self) -> int
@row_collapse_coverage_divisor.setter
def row_collapse_coverage_divisor(self, value: int) -> None

Coverage divisor for the row-collapse trigger: a whole-crop decode is a collapse candidate when decodedRows * divisor <= estimatedTextLines. Larger divisors fire less often. The shipped value is 3; the consumer clamps overrides to the 2..4 range the guard was measured on. The default (3) reproduces the shipped guard.

Type: int

Default: 3


row_collapse_guard_enabled

@property
def row_collapse_guard_enabled(self) -> bool
@row_collapse_guard_enabled.setter
def row_collapse_guard_enabled(self, value: bool) -> None

Enables the row-collapse guard on the table split-and-stitch rescue path. When enabled (the default), a whole-crop decode that covers far too few of the zone’s own text lines is treated as a collapse candidate, and the banded re-decode is attempted and gated by row coverage. Disabling it restores the pre-guard split behaviour exactly. The default (true) reproduces the shipped guard.

Type: bool

Default: true


stack_repeated_column_groups

@property
def stack_repeated_column_groups(self) -> bool
@stack_repeated_column_groups.setter
def stack_repeated_column_groups(self, value: bool) -> None

Rearranges a table whose header repeats across side-by-side column groups. A long list printed as the same columns several times across the page is returned as one table with the groups read one after another, instead of one wide table whose rows join unrelated records. Titles printed over the groups split it into one table per title. The default (false) returns the groups side by side, as printed.

Type: bool

Default: false


target_size

@property
def target_size(self) -> int
@target_size.setter
def target_size(self, value: int) -> None

Target size for image preprocessing (height and width). Default is 448x448 as specified in the TableFormer model.

Type: int

Default: 448