Skip to main content

Template Options

Configuring template rendering behavior with OfficeTemplateOptions.

Parallel Processing​

Enable parallel execution for {for} loops and $map operations:

val options = OfficeTemplateOptions()
.parallel(true)

val template = OfficeTemplate.fromFile("Template.docx", options)

Performance Benefits​

Parallel mode can significantly speed up rendering when you encounter performance bottlenecks while evaluating template expressions.

This might happen for large audit reports that pull in data from a dozen data sources.

Thread Safety Requirement​

When using parallel mode, all objects in your data map must be thread-safe:

  • Immutable objects: Safe by default (data classes, records, strings, numbers)
  • Read-only access: Safe if you only read properties
  • Mutable shared state: Must use synchronization or thread-safe collections
// Safe: immutable data class
data class Product(val name: String, val price: Double)

// Safe: read-only list
val products: List<Product> = listOf(...)

// Unsafe: mutable list being modified during iteration
val results = mutableListOf<String>() // Don't share this in parallel mode

If your data objects have side effects or mutable state, keep parallel mode disabled (the default).

Custom Delimiters​

By default, DocStencil uses { and } as delimiters for template expressions. If your documents already contain curly braces for other purposes, you can customize the delimiters:

val options = OfficeTemplateOptions(
delimiters = OfficeTemplateOptions.Delimiters("<<", ">>")
)

val template = OfficeTemplate.fromFile("Template.docx", options)

With custom delimiters, your template would use <<name>> instead of {name}.

Locale​

The locale option controls how builtin formatting functions behave. This affects date formatting, number formatting, and other locale-sensitive operations:

val options = OfficeTemplateOptions(
locale = Locale.GERMANY
)

val template = OfficeTemplate.fromFile("Template.docx", options)

By default, DocStencil uses Locale.getDefault() from the JVM.

Strip Invalid XML Characters​

Office documents use XML internally. If your data contains characters that are invalid in XML (such as certain control characters), rendering will fail. Enable stripInvalidXmlChars to automatically remove these characters:

val options = OfficeTemplateOptions(
stripInvalidXmlChars = true
)

val template = OfficeTemplate.fromFile("Template.docx", options)

This is useful when processing data from external sources that may contain unexpected characters. The default is false.

Exception Stack Traces​

By default, DocStencil prints stack traces when exceptions occur during parsing or rendering. You can disable this for cleaner error output in production:

val options = OfficeTemplateOptions(
printExceptionStackTraces = false
)

val template = OfficeTemplate.fromFile("Template.docx", options)

When disabled, exceptions are still thrown but without printing the full stack trace to stderr. The default is true.