renderer.renderTemplateToStream(template, this.getDocumentFilters(_application), attachmentStream, OfficeTrimmable::construct());
public void renderTemplateToStream(DocuTemplate template, Map filtersToApply, System.IO.Stream outputStream, object context = null)
{
if (!template || !outputStream)
{
throw error(error::missingParameter(null));
}
if (!filtersToApply)
{
filtersToApply = new Map(Types::String, Types::Class);
}
else if (filtersToApply.keyType() != Types::String || filtersToApply.valueType() != Types::Class)
{
throw error(error::wrongUseOfFunction(methodStr(DocuTemplateRender, renderTemplateToStream)));
}
if (!outputStream.CanWrite)
{
throw error(error::wrongUseOfFunction(methodStr(DocuTemplateRender, renderTemplateToStream)));
}
var filtersByPublicName = this.translateFilterMap(filtersToApply);
switch (template.TemplateType)
{
case OfficeAppApplicationType::Excel:
this.renderExcelTemplate(template, filtersByPublicName, outputStream, context);
break;
case OfficeAppApplicationType::Word:
this.renderWordTemplate(template, filtersByPublicName, outputStream, context);
break;
default:
var ex = new System.NotImplementedException();
throw error(ex.Message);
}
}
private void renderWordTemplate(DocuTemplate template, Map filtersToApplyByPublicName, System.IO.Stream outputStream, object context)
{
if (!template || !filtersToApplyByPublicName || !outputStream)
{
throw error(error::missingParameter(null));
}
if (template.TemplateType != OfficeAppApplicationType::Word)
{
throw error(error::wrongUseOfFunction(methodStr(DocuTemplateRender, renderWordTemplate)));
}
if (filtersToApplyByPublicName.keyType() != Types::String || filtersToApplyByPublicName.valueType() != Types::Class)
{
throw error(error::wrongUseOfFunction(methodStr(DocuTemplateRender, renderWordTemplate)));
}
if (!outputStream.CanWrite)
{
throw error(error::wrongUseOfFunction(methodStr(DocuTemplateRender, renderWordTemplate)));
}
using (var origTemplateStream = template.getTemplateStream())
{
var params = new DocumentGeneratorParameters();
params.InputStream = origTemplateStream;
params.OutputStream = outputStream;
var filterDictionary = params.FiltersToApply;
var filterEnumerator = filtersToApplyByPublicName.getEnumerator();
while (filterEnumerator.moveNext())
{
filterDictionary.Add(filterEnumerator.currentKey(), filterEnumerator.currentValue());
}
var documentGenerator = this.GetDocumentGenerator();
var result = documentGenerator.GenerateDocument(params);
if (!result)
{
throw error(strFmt("@ApplicationFoundation:DocuTemplateGenerationFailed", template.TemplateID));
}
}
}