Добрый день.
Вот код, с помощью которого мы генерируем отчеты в нашем веб приложении:
StiReport Report = new StiReport();
Код: Выделить всё
// 1 Поулчаем шаблон с диска:
var form = Path.Combine(directory, "UniversalNameTemplate.mrt");
Stream reportTemplate = null;
var directory = HttpContext.Current.Server.MapPath("~/reportForms");
if (File.Exists(form))
{
reportTemplate = new MemoryStream(File.ReadAllBytes(form));
}
// 2 грузим в отчет шаблон:
Report.Load(reportTemplate);
// 3 компилим отчет:
Report.Compile();
// 4 регистрируем данные:
...
Report.RegData(data.Name, data.Obj);
Report.RegBusinessObject(data.Name, data.Obj);
...
// 5 компилим отчет:
Report.Compile();
// 6 рендерим отчет:
if (!Report.IsRendered)
{
Report.Render(false);
}
// 7 готовим выходнйо стрим:
var result = new MemoryStream();
result.Seek(0, SeekOrigin.Begin);
// 8 уставнливаем формат
var ExportFormat = StiExportFormat.Word2007;
if (ExportFormat == StiExportFormat.Word2007)
{
// 9 выполняем подготовительные натсройки:
StiOptions.Export.Word2007.AllowCorrectFontSize11Problem = true;
StiOptions.Export.Word2007.BottomMarginCorrection = -5;
StiOptions.Export.Word2007.RightMarginCorrection = -5;
var service = new StiWord2007ExportService();
var settings = new StiWord2007ExportSettings { UsePageHeadersAndFooters = true };
// 10 экспортируем в Ворд:
service.ExportWord(Report, result, settings);
}
else
{
// 11 в случае выгрузк ив пдф:
Report.ExportDocument(ExportFormat, result);
}
// 12 идем в анчало стрима
result.Seek(0, SeekOrigin.Begin);
// 13 возвращаем стрим, отчет ан клиент:
return this.File(result, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", fileName);
В пдф все выгружается ОК.
Но с MsWord проблемы.
Причем заметил, что, если настройка
UsePageHeadersAndFooters = true, то текст весь виден в документе ворда по умолчанию, но появляются другие проблемы.
Такие как:
- счетчик номера страницы в колонтитуле неверно работает: на всех страницах пишет, что номер страницы 1.
- между шапкой отчета и первым ее текстом появляется большой пропуск.
Если же поставить
UsePageHeadersAndFooters = false, то проблемы выше уходят, но появляется проблема, про которую я писал выше в первом сообщении темы: текст на страницах "съедается". Изменение стеки в ширину не приводит к переходу текстов с страницы на страницу, а текст просто пропадает внизу (в случае увеличения ширины поля справа) или появляется (в случае уменьшения поля спарва). Набор текстовки как будто высчитывается заранее для каждой страницы отчета и более не меняется. Даже независимо от изменения ширины полей.
Готов приложить mrt шаблон, но не знаю, как данные прикрепить к нему. Подскажите плиз..