Use template generation to create many document variants from one Word template.

It helps you:

  • Separate content from design — Designers can perfect the document layout while developers focus on data integration.
  • Ensure consistency — Every generated document follows the exact same format and styling.
  • Scale document output — Generate many personalized documents from the same template.
  • Reduce errors — Eliminate copy-paste mistakes and ensure data accuracy through automation.
  • Enable dynamic content — Automatically adjust document structure based on data (for example, show/hide sections, repeat rows).
Download sample

Use the Java SDK for template processing

The SDK handles low-level document details such as:

  • Parsing Word document internals
  • Managing XML structures
  • Handling style preservation
  • Complex placeholder replacement logic

The SDK applies model data to placeholders while preserving template formatting.

Complete implementation

This example shows a complete template processing flow:

package io.nutrient.Sample;
import io.nutrient.sdk.Document;
import io.nutrient.sdk.License;
import io.nutrient.sdk.exceptions.NutrientException;
import io.nutrient.sdk.editors.WordEditor;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class WordTemplate {
public static void main(String[] args) throws NutrientException {

These lines set up the Java application:

  • package io.nutrient.Sample; — Declares the package for your class
  • The import statements bring in all necessary classes from Nutrient SDK and Java standard library
  • public class WordTemplate — Defines your main class
  • public static void main(String[] args) throws NutrientException — The entry point that declares thrown Nutrient-specific exceptions
try (Document document = Document.open("input_template.docx")) {

Open the Word template file. The try-with-resources(opens in a new tab) syntax closes the document automatically:

WordEditor editor = WordEditor.edit(document);

Create a WordEditor instance for template operations:

String model = null;
try {
model = Files.readString(Path.of("input_template_model.json"));
} catch (IOException e) {
System.out.println("Failed to read template model file");
}

Read the JSON data model:

  • String model = null; — Initialize the model variable.
  • model = Files.readString(Path.of("input_template_model.json")); — Read the entire JSON file content into a string.
  • The try-catch block handles file read errors.
editor.applyTemplateModel(model);

Apply the JSON model to the template. This replaces placeholders with data while keeping template formatting:

editor.saveWithModelAs("output.docx");

Save the processed document to a new file:

}
}
}

These closing braces end the try-with-resources block, main method, and class definition.

Conclusion

You now have a complete template processing flow. The core logic has four steps:

  • Open the document.
  • Create an editor.
  • Apply the template model.
  • Save the result.

Download the sample package to run this example as-is.