Numbered lists provide a sequential, ordered way to display collections of items in documents. GroupDocs.Assembly for Java enables you to generate numbered lists by iterating over data collections using foreach data bands within numbered list structures.
Add a foreach data band within the list to iterate over your collection
Reference collection item members in list items
Optionally use numberOf() to display item numbers
Close the foreach data band
Assemble the document with your collection data
Note
The foreach data band automatically repeats numbered list items for each element in the collection, maintaining proper numbering sequence.
Generate Numbered List from Java Collection
Create a numbered list from a collection of objects:
importcom.groupdocs.assembly.*;publicclassTask{privatefinalStringtitle;privatefinalStringdescription;publicTask(Stringtitle,Stringdescription){this.title=title;this.description=description;}publicStringgetTitle(){returntitle;}publicStringgetDescription(){returndescription;}}publicstaticvoidgenerateNumberedList()throwsException{// Create sample data
Task[]tasks={newTask("Design","Create design mockups"),newTask("Develop","Implement features"),newTask("Test","Perform testing")};// Assemble document
DocumentAssemblerassembler=newDocumentAssembler();assembler.assembleDocument("NumberedListTemplate.docx","NumberedListOutput.docx",newDataSourceInfo(tasks,"tasks"));System.out.println("Numbered list generated successfully.");}
Note
Because of Java type erasure, the engine cannot determine the item type of a java.util.List passed directly as a data source, so calling item methods such as getTitle() fails. Pass an array (as shown above), or expose the list through a getter of a wrapper object (for example, public List<Task> getTasks()) and iterate over it in the template: <<foreach [in data.getTasks()]>>.
Template Structure for Numbered Lists
In your template document (NumberedListTemplate.docx), create a numbered list:
Tasks to complete:
<<foreach [in tasks]>><<[getTitle()]>> - <<[getDescription()]>>
<</foreach>>
Put the opening <<foreach>> tag at the beginning of the numbered paragraph and the closing <</foreach>> tag at the beginning of the next paragraph. Members of Java objects are accessed through their getter methods. After assembly, you’ll get:
Tasks to complete:
1. Design - Create design mockups
2. Develop - Implement features
3. Test - Perform testing
Using numberOf() Function
You can explicitly display item numbers using the numberOf() function:
importcom.groupdocs.assembly.*;importjava.util.*;publicstaticvoidgenerateNumberedListWithNumber()throwsException{List<String>items=Arrays.asList("First item","Second item","Third item");DocumentAssemblerassembler=newDocumentAssembler();assembler.assembleDocument("NumberOfTemplate.docx","NumberedListOutput.docx",newDataSourceInfo(items,"items"));System.out.println("Numbered list with explicit numbers generated successfully.");}
Template with numberOf() (NumberOfTemplate.docx):
Items:
<<foreach [item in items]>><<[item.numberOf()]>>. <<[item]>>
<</foreach>>
Here, the iteration variable item refers to the current string itself, and item.numberOf() returns its 1-based number within the data band.
importcom.groupdocs.assembly.*;importcom.groupdocs.assembly.system.data.*;publicstaticvoidgenerateNumberedListFromDataTable()throwsException{// Create DataTable
DataTabletasksTable=newDataTable("Tasks");tasksTable.getColumns().add("Title",String.class);tasksTable.getColumns().add("Description",String.class);// Add rows
tasksTable.getRows().add("Design","Create design mockups");tasksTable.getRows().add("Develop","Implement features");tasksTable.getRows().add("Test","Perform testing");DocumentAssemblerassembler=newDocumentAssembler();assembler.assembleDocument("DataTableNumberedListTemplate.docx","NumberedListOutput.docx",newDataSourceInfo(tasksTable,"tasks"));System.out.println("Numbered list generated from DataTable successfully.");}
DataTable columns are referenced by name rather than through getters, so the template (DataTableNumberedListTemplate.docx) looks as follows:
Tasks to complete:
<<foreach [in tasks]>><<[Title]>> - <<[Description]>>
<</foreach>>
Numbered List in Spreadsheet
For spreadsheet templates, you can create numbered lists in cells:
importcom.groupdocs.assembly.*;publicstaticvoidgenerateNumberedListInSpreadsheet()throwsException{Task[]tasks={newTask("Design","Create design mockups"),newTask("Develop","Implement features")};DocumentAssemblerassembler=newDocumentAssembler();assembler.assembleDocument("NumberedListTemplate.xlsx","NumberedListOutput.xlsx",newDataSourceInfo(tasks,"tasks"));System.out.println("Numbered list generated in spreadsheet successfully.");}
Template for spreadsheet (in-cell):
"Tasks to complete:<<foreach [in tasks]>>
<<[numberOf()]>>. <<[getTitle()]>><</foreach>>"
Numbered List in Email
Generate numbered lists in email messages:
importcom.groupdocs.assembly.*;publicstaticvoidgenerateNumberedListInEmail()throwsException{Task[]tasks={newTask("Design","Create design mockups"),newTask("Develop","Implement features")};DocumentAssemblerassembler=newDocumentAssembler();assembler.assembleDocument("NumberedListTemplate.msg","NumberedListOutput.msg",newDataSourceInfo(tasks,"tasks"));System.out.println("Numbered list generated in email successfully.");}
Warning
In Word documents, ensure the numbered list formatting is applied in the template. The foreach data band will repeat the list item format and maintain proper numbering for each collection element.
Advanced Usage Topics
To learn more about custom numbering formats, nested numbered lists, and advanced list formatting options, please refer to the advanced usage section.
More resources
GitHub Examples
You may easily run the code above and see the feature in action in our GitHub examples: