Open API - Build From Scratch - Styling, Cover Page and TOC

I was trying to use a Fill-In Doc earlier, I used to provide all styles in the Doc Template.

Now I am trying to generate the document using Open API via “Build From Scratch Report

Query 1: How can I programmatically do via Open API what the tabs ( in image below ) named Content ( provide a Word Template Path ) and Cover Page ( provide a cover page ) and Page Setup ( make pages landscape ) do?

Query 2: How can I export the doc generated programmatically to some folder location.

Query 3: How can I add the Table Of Contents for this

Thanks for your help.

Let me post the sample code here.

		String lWordTemplatePath = "C:\\MyFolder\\WordTemplate.docx";
		File lOutput = new File("C:\\MyFolder\\MyGeneratedDocument.docx");
		
		IProject project = ApplicationManager.instance().getProjectManager().getProject();
		DiagramManager diagramManager = ApplicationManager.instance().getDiagramManager();
		IReportDiagramUIModel reportDiagramUIModel;
		IReportDiagramDetailsContainer reportDiagramDetailsContainer;
		IReportDiagramDetails reportDiagramDetails;
		
		// on this demo, assume the Project has a "Transition Architectures" archimate diagram. This ArchiMate diagram will be generated into document.
		IArchiMateDiagramUIModel archiMateDiagram = null; // assume not null
		for (IDiagramUIModel lDiagram : project.toDiagramArray()) {
			if (lDiagram instanceof IArchiMateDiagramUIModel && "Transition Architectures".equals(lDiagram.getName())) {
				archiMateDiagram = (IArchiMateDiagramUIModel) lDiagram;
			}
		}
		

		Iterator<IReportDiagramDetailsContainer> reportDiagramIterator = 
				project.modelElementIterator( IModelElementFactory.MODEL_TYPE_REPORT_DIAGRAM_DETAILS_CONTAINER );

		if (reportDiagramIterator.hasNext()) {
			reportDiagramDetailsContainer = reportDiagramIterator.next();
		} else {
			reportDiagramDetailsContainer = IModelElementFactory.instance().createReportDiagramDetailsContainer();
		}
		
		reportDiagramUIModel = (IReportDiagramUIModel) diagramManager.createDiagram(IDiagramTypeConstants.DIAGRAM_TYPE_REPORT_DIAGRAM);
		
		reportDiagramDetails = reportDiagramDetailsContainer.createReportDiagramDetails();
		reportDiagramUIModel.setGenericXMLElementAddress(reportDiagramDetails.getAddress());
		
		
		if (reportDiagramDetails.getReportDiagramOption() == null) {
			reportDiagramDetails.setReportDiagramOption(reportDiagramDetails.createReportDiagramOption());
		}
		IReportDiagramOption option = reportDiagramDetails.getReportDiagramOption();
		option.setUseWordDocumnentTemplate(true);
		option.setWordDocumnentTemplatePath(lWordTemplatePath);
		option.setGenerateCoverPage(false);
		
		
		if (reportDiagramDetails.getStyleRepository() == null) {
			IRDStyleRepository styleRepository = reportDiagramDetails.createRDStyleRepository();
			reportDiagramDetails.setStyleRepository(styleRepository);
			ApplicationManager.instance().getDocumentationManager().initDefaultRDStyleRepository(styleRepository);
		}
		
		if (reportDiagramDetails.getNumberingSetting() == null) {
			IRDNumberingSetting numberingSetting = reportDiagramDetails.createRDNumberingSetting();
			reportDiagramDetails.setNumberingSetting(numberingSetting);
			ApplicationManager.instance().getDocumentationManager().initDefaultRDNumberingSetting(numberingSetting);
		}
		
		
		if (option.getReportDocInfo() == null) {
			option.setReportDocInfo(option.createReportDocInfo());
		}
		IReportDocInfo docInfo = option.getReportDocInfo();
		docInfo.setTitle("Mr. X");
		docInfo.setAuthor("Visual Paradigm Sample");
		
		
		{
			IRDTableOfContentsTemplate toc = reportDiagramDetails.createRDTableOfContentsTemplate(); // .children
			reportDiagramDetails.addTemplate(toc); // .templates
			ApplicationManager.instance().getDocumentationManager().initDefaultRDTableOfContentsTemplate(toc);
		}
		
		{
			IRDSectionTemplate sectionTemplate = reportDiagramDetails.createRDSectionTemplate(); // .children
			reportDiagramDetails.addTemplate(sectionTemplate); // .templates
			
			IReportPageInfo paper = sectionTemplate.createReportPageInfo();
			sectionTemplate.setPageInfo(paper);
			paper.setPortrait(false);
			paper.setPageSize("A4");
			paper.setMarginTop(1*72); // in pixel; 1*72 = 1 inch x 72 Dpi (Word's Dpi); 1 inch = 72px;
			paper.setMarginBottom(1*72);
			paper.setMarginLeft(1*72);
			paper.setMarginRight(1*72);
		}
		
		{
			IRDOOTemplate currentIRDOOTemplate = reportDiagramDetails.createRDOOTemplate(); // .children
			reportDiagramDetails.addTemplate(currentIRDOOTemplate); // .templates
			
			currentIRDOOTemplate.setTemplateURI("Diagram:ArchiMateDiagram/Details");
			currentIRDOOTemplate.setSourceType(IRDOOTemplate.SOURCE_TYPE_DIAGRAM);
			
			currentIRDOOTemplate.setSourceId(archiMateDiagram.getId());
			
			ICompositeValueSpecification stateValueSpec = IModelElementFactory.instance().createCompositeValueSpecification();
			stateValueSpec.setName(archiMateDiagram.getId());
			stateValueSpec.setValue("Current State");
			
			currentIRDOOTemplate.addLayerFilter(stateValueSpec);
		}
		
		
		reportDiagramDetails.addRDPageBreakTemplate(IModelElementFactory.instance().createRDPageBreakTemplate());
		
		
		ApplicationManager.instance().getDocumentationManager().generateDocComposerWord(reportDiagramUIModel, lOutput, null);
		ApplicationManager.instance().getViewManager().showMessage(lOutput.getAbsolutePath());

FYI, if you don’t know what is the IRDOOTemplate’s TemplateURI, as following screenshot

1 Like