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