What it does
This node attaches a structure element (tag) to selected shape trees in your document. Structure elements are essential for creating accessible PDFs, as they define the semantic meaning of content (e.g., headings, paragraphs, links, figures).
Use it for
- Tagging content with semantic structure elements.
- Adding descriptive metadata such as alternative text, actual text, or expanded text for assistive technologies.
- Specifying the language of the content, especially when it differs from the overall document language.
How to use it
- Drag and drop the node from the Node Library into your template:
Node Library > Folder Tagging - Connect the node with other nodes in the Data Flow of your template.
- Specify the settings in the Node Properties task pane.
Node Input
Items: Connect a node containing the items (shape trees) you want to tag with a structure element to the Items input port.
Important
Structure elements cannot be attached directly to individual shapes—they must be part of at least one container (shape trees).
Use the Extract Text Node to retrieve specific sequences of strings from your document and pass them as dynamic input to the following input ports of this node, if needed:
- Titles
- Languages
- Alternative Texts
- Expanded Texts
- Actual Texts
This is especially useful when these values vary between documents and need to be populated automatically.
Node Output
Outputs the same items with the attached structure element in the Items output port. You can view the tag in the Node Results task pane—displayed in brackets after the item's name.
Node Properties
Node Name
You can assign a custom name to the node to help identify its purpose within your template.
Node Selector
Use Path Language to navigate through the shape trees and select the items to be tagged. Use the names assigned to shape trees (not the tags in brackets).
Condition
Using the condition, the items selected with the Node Selector can be further narrowed down. Define a condition to apply the structure element only to items that meet specific criteria such as size, position, or content.
Available variables:
item: the current shape tree item being processed from the input list.itemhas the same properties as a shape tree object.-
index: the zero-based index of the item in the input list -
first: the first item in the input list -
last: the last item in the input list -
count: the total number of items in the input list
Expected return type: boolean
Example:
item.text match "^1" and item.docBBox.left < 30
Only items whose content starts with the digit 1 and whose left edge coordinate is less than 30 will be tagged.
Structure Type
Specify the type of structure element to attach (e.g., P for paragraph, H1 for heading level 1, Figure, Link).
This defines the semantic role of the tagged content. You can enter a static string or a dynamic expression.
Available variables:
item: the current shape tree item being processed from the input list.itemhas the same properties as a shape tree object.-
index: the zero-based index of the item in the input list -
first: the first item in the input list -
last: the last item in the input list -
count: the total number of items in the input list
Expected return type: string
Example 1:
"H2"
Attach the structure Element H2 to all selected items.
Example 2:
item.name = "TableHeader" ? "TH" : "TD"
If the item's name is "TableHeader", attach the structure element TH; else, attach TD.
Title
Optionally assign a title to the structure element. This can be used for navigation or identification in assistive technologies. You can enter a static string or a dynamic expression.
You can connect a node that contains a sequence of strings as reference to the Titles input port. This gives you the opportunity to build dynamic titles based on the reference. You can also dynamically reuse strings from your content in the titles.
Available variables:
-
titles: the sequence of strings from the Titles input port; usetitles[n]to access the string at index n (zero-based) item: the current shape tree item being processed from the input list.itemhas the same properties as a shape tree object.-
index: the zero-based index of the item in the input list -
first: the first item in the input list -
last: the last item in the input list -
count: the total number of items in the input list
Expected return type: string
Example 1: Static
"Introduction"
Sets the static string "Introduction" as the title of the structure element.
Example 2: Dynamic using the text content of the items
item.text
Dynamically assigns the text content of each item as the title of the corresponding structure element.
Example 3: Dynamic using a referenced string
In this example:
-
titles[0]contains the number of the chart
"Chart " concat titles[0]
This takes the string “Chart” and concatenates it with the chart number referenced from the document, resulting in a title such as “Chart 1.12”.
Language
Set the language of the tagged content using standard language codes (e.g., en, de, fr, en-US). This helps screen readers interpret the content correctly. You can enter a static string or a dynamic expression.
If you want to tag content elements in different languages using the same template, you can connect a node that contains a sequence of strings as reference to the Languages input port. This reference should vary depending on the language used in the document, allowing axesFlip to determine the correct language automatically.
Available variables:
-
languages: the sequence of strings from the Languages input port; uselanguages[n]to access the string at index n (zero-based) item: the current shape tree item being processed from the input list.itemhas the same properties as a shape tree object.-
index: the zero-based index of the item in the input list -
first: the first item in the input list -
last: the last item in the input list -
count: the total number of items in the input list
Expected return type: string
Example 1: Static
"en-GB"
A string with the language code of the tagged content.
Example 2: Dynamic
If your content elements are in different languages, enter an expression that determines the language dynamically based on the reference strings provided by the connected Languages input node.
"Rechnung" in languages ? "de" : "en"
If the reference sequence of strings contains the exact string "Rechnung", then use "de", else use "en".
"Rech" in languages[0] ? "de" : "en"
If the first string in the reference sequence contains the substring "Rech", then use "de", else use "en".
Example 3: Concatenated conditions
You can also concatenate ternary operators.
"Rechnung" in languages ? "de" : "Invoice" in languages ? "en" : "es"
If the reference sequence contains the exact string "Rechnung", use "de", else if the reference sequence contains the exact string "Invoice", use "en", else use "es".
Alternative Text
Provide alternative text for non-text content (e.g., images or figures). This is read by screen readers and is essential for accessibility compliance. You can enter a static string or a dynamic expression.
You can connect a node that contains a sequence of strings as reference to the Alternative Texts input port. This gives you the opportunity to build dynamic alternative texts for your content based on the reference. You can also dynamically reuse strings from your content in the alternative texts.
Available variables:
alternativeTexts: the sequence of strings from the Alternative Texts input port; usealternativeTexts[n]to access the string at index n (zero-based)item: the current shape tree item being processed from the input list.itemhas the same properties as a shape tree object.-
index: the zero-based index of the item in the input list -
first: the first item in the input list -
last: the last item in the input list -
count: the total number of items in the input list
Expected return type: string
Example 1: Static
"Photo: Two red apples."
A simple, static description of the image content.
Example 2: Dynamic
For example, you can use different alternative texts for different language versions and also fill in dynamic content. In this example, a letter is either in English or in German and can be signed by different people.
In this example:
-
alternativeTexts[0]contains a person’s name -
alternativeTexts[1]contains a language or context indicator
alternativeTexts[1] = "Office" ? "Signature " concat alternativeTexts[0] : "Unterschrift " concat alternativeTexts[0]
If the second referenced string contains "Office", the English word “Signature” is used. Otherwise, the German word “Unterschrift” is used. The selected term is concatenated with the referenced name. The result is a correct alternative text in either English or German with the correct name of the person who signed it, for example, "Signature Carson Meyer".
Expanded Text
Define expanded text to provide additional context or explanation beyond the visible content. Useful for abbreviations or symbols that require clarification. You can enter a static string or a dynamic expression.
Available variables:
-
expandedTexts: the sequence of strings from the Expanded Texts input port; useexpandedTexts[n]to access the string at index n (zero-based) item: the current shape tree item being processed from the input list.itemhas the same properties as a shape tree object.-
index: the zero-based index of the item in the input list -
first: the first item in the input list -
last: the last item in the input list -
count: the total number of items in the input list
Expected return type: string
Example 1: Static
"Web Content Accessibility Guidelines (WCAG)"
The abbreviation "WCAG" is given expanded text: "Web Content Accessibility Guidelines (WCAG)".
Example 2: Dynamic
You can provide different expansions for known abbreviations using conditional expressions.
In this example:
-
expandedTexts[0]contains the abbreviation
expandedTexts[0] = "HTML"
? "HyperText Markup Language"
: expandedTexts[0] = "CSS"
? "Cascading Style Sheets"
: "Abbreviation (" concat expandedTexts[0] concat ")"If the abbreviation matches a known value, the correct expanded text is applied. Otherwise, a generic fallback expansion is used.
Actual Text
Specifies the actual text that should be read by assistive technologies, particularly when the content does not accurately represent the intended reading—such as when text is embedded as an image. You can enter a static string or a dynamic expression.
You can connect a node that contains a sequence of strings as a reference to the Actual Texts input port. This works the same way as for Alternative Texts and allows you to build dynamic expanded texts based on referenced values. You can also dynamically reuse strings from your content in the actual text.
Available variables:
-
actualTexts: the sequence of strings from the Actual Texts input port; useactualTexts[n]to access the string at index n (zero-based) item: the current shape tree item being processed from the input list.itemhas the same properties as a shape tree object.-
index: the zero-based index of the item in the input list -
first: the first item in the input list -
last: the last item in the input list -
count: the total number of items in the input list
Expected return type: string
Example 1: Static
"This is the text embedded in the image."
A string containing the text in the image.
Example 2: Dynamic
For example, you can dynamically fill in the text of a text image by reusing strings from other text content.
In this example:
-
actualTexts[0]contains the copyright year -
actualTexts[1]contains a name
"©" concat actualTexts[0] concat " " concat actualTexts[1]
This takes the copyright symbol and concatenates it with the year, a space, and the name of the owner, resulting in a correctly formatted actual text such as “© 2026 Example Company”.