Skip to main content

Attach Structure Element Node (Tagging)

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

  1. Drag and drop the node from the Node Library into your template:
    Node Library > Folder Tagging
  2. Connect the node with other nodes in the Data Flow of your template.
  3. 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. item has 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, FigureLink).
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. item has 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; use titles[n] to access the string at index n (zero-based)
  • item: the current shape tree item being processed from the input list. item has 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., endefr, 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; use languages[n] to access the string at index n (zero-based)
  • item: the current shape tree item being processed from the input list. item has 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; use alternativeTexts[n] to access the string at index n (zero-based)
  • item: the current shape tree item being processed from the input list. item has 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.

You can connect a node that contains a sequence of strings as a reference to the Expanded 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 expanded text.

Available variables:

  • expandedTexts: the sequence of strings from the Expanded Texts input port; use expandedTexts[n] to access the string at index n (zero-based)
  • item: the current shape tree item being processed from the input list. item has 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; use actualTexts[n] to access the string at index n (zero-based)
  • item: the current shape tree item being processed from the input list. item has 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”.