Страница 1 из 1

Экспорт в rtf

Добавлено: 13 мар 2008, 13:57
ONIX
У меня несколько проблем:
1) при экспорте в rtf возникают пустые ячейки при переходе страницы, таким образом вторая и последующие страницы смещены (их заголовок на середине страницы), а пространство между страницами забито пустыми ячейками. Как избавиться от этих ячеек, так чтобы каждая страница начиналась с заголовка?
откуда возникают эти ячейки?

2) можно ли как то убрать из отчетов ячеки которые не содержат данные (т.е. пустые)?

Экспорт в rtf

Добавлено: 13 мар 2008, 16:08
Ivan
Здравствуйте.
ONIX писал(а):У меня несколько проблем:
1) при экспорте в rtf возникают пустые ячейки при переходе страницы, таким образом вторая и последующие страницы смещены (их заголовок на середине страницы), а пространство между страницами забито пустыми ячейками. Как избавиться от этих ячеек, так чтобы каждая страница начиналась с заголовка?
Проверьте, чтобы в параметрах экспорта свойство UsePageHeaderAndFooter было установлено в false (убрана галочка), и свойство StiOptions.Export.Rtf.LineHeightExactly было установлено в true (по умолчанию). В этом случае страница должна экспортироваться в Rtf как есть, без всяких изменений. Если заголовки при этом наоборот полезли вверх - установите StiOptions.Export.Rtf.RemoveEmptySpaceAtBottom в false или используйте на страницах пустой PageFooter минимальной высоты с непрозрачным фоном.

Если приведенные советы не помогли - пришлите пожалуйста MDC-файл отчета для анализа.
ONIX писал(а):откуда возникают эти ячейки?
Вы используете режим экспорта "Table (Таблица)". В этом режиме весь отчет представляется как одна большая непрерывная таблица. По умолчанию высота строк таблицы задается "точно". Но если установить UsePageHeaderAndFooter в true или свойство StiOptions.Export.Rtf.LineHeightExactly в false, то высота строк будет задаваться "минимум", и MS-Word может увеличивать высоту строк по своему усмотрению, и соответственно строки сдвигаются вниз.
ONIX писал(а):2) можно ли как то убрать из отчетов ячейки которые не содержат данные (т.е. пустые)?
Если убирать эти пустые ячейки - будет нарушаться структура таблицы, затрудняется редактирование, и в целом MS-Word может глючить. Альтернативный вариант - используйте режим экспорта "Frames (Рамки)".

Спасибо.

Экспорт в rtf

Добавлено: 14 мар 2008, 14:45
ONIX
еще один вопрос!

при создании отчета в Вебе, отчет создается нестабильно (т.е. то создается, то нет - приходится до 5-ти раз переходить с одной страницу на целевую...)
Как избавиться от этого? почему это происходит?

Экспорт в rtf

Добавлено: 14 мар 2008, 19:21
Vital
Уточните пожалуйста, что понимается под созданием отчета?

Спасибо.

Экспорт в rtf

Добавлено: 17 мар 2008, 12:03
ONIX
Vital писал(а):Уточните пожалуйста, что понимается под созданием отчета?

Спасибо.
Я имею ввиду рендеринг отчета.

Экспорт в rtf

Добавлено: 17 мар 2008, 17:42
Vital
Скажите пожалуйста, отчет отображается с использованием кэша WebViewer или нет? В каком событии он строится. Что происходит с памятью сервера до и после построения? Большой ли отчет?

Спасибо.

Экспорт в rtf

Добавлено: 19 мар 2008, 05:29
ONIX
Vital писал(а):Скажите пожалуйста, отчет отображается с использованием кэша WebViewer или нет? В каком событии он строится. Что происходит с памятью сервера до и после построения? Большой ли отчет?

Спасибо.
Сделано так:

1) ... stiwebviewer id="StiWebViewer1" runat="server" UseCache="True"...
2) Строится в событии Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
.....

// Вывести отчет
stiReport1.CacheAllData = true;
stiReport1.ReportCacheMode = Stimulsoft.Report.StiReportCacheMode.On;
stiReport1.ReportCachePath = "~/Rep" + DateTime.Now.ToString("yyyyMMddHHmmss");

StiWebViewer1.RenderMode = Stimulsoft.Report.Web.StiRenderMode.Standard;
StiWebViewer1.ViewMode = Stimulsoft.Report.Web.StiWebViewMode.WholeReport;

StiWebViewer1.UseCache = true;

stiReport1.Compile();
System.Diagnostics.Debug.WriteLine("Before show report");
StiWebViewer1.Report = stiReport1;

}
}

3) отчеты бывают разные: и 200 страниц и 1 страница, от размера отчета не зависит...
4) имеется одна закономерность: если в отчете действительно нет данных, то отчет строится пустой, но с рамкой...
если же данные есть, но отчет не рендерится - то появляется абсолютно белый лист, без рамки

Может ли данная проблема зависеть от быстродейчтвия машины? Хотя с другой стороны, на этой же машине имеется обычное Виндоус приложение (не Веб), которое строит все отчеты как положено, тогда как с Веб приложением возникает эта проблема (недетерминированно)



Экспорт в rtf

Добавлено: 19 мар 2008, 14:58
Vital
Кое что нужно поменять. Вы строите отчет в событии PageLoad страницы, т.е. фактически Вы перерендериваете отчет при каждом обновлении страницы. В этом случае использовать кэширование не нужно, поскольку это будет приводить только к дополнительному расходу памяти сервера. При каждом перестроении отчета (обновлении страницы) он будет ложиться в кэш страницы на время указанное в ServerTimeOut. Через какое то время, когда память занятая процессом asp.net превысит (обычно это 300-400 мегабайт) процесс asp.net будет перезапущен автоматически. Кроме этого память будет утекать в методе report.Compile(), поскольку этот метод создает новую сборку в памяти, которая будет выгружена тольно вместе с процессом asp.net. В данном случае Вам необходимо использовать отчеты в виде классов на c# или VB.Net. Или компилировать отчет только при первом обращении, если нет уже скомпилированной версии отчета. К примеру:

Код: Выделить всё

StiReport report = new StiReport();
report.Load(file);

string folder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
folder = Path.Combine(folder, "Stimulsoft\\CompiledReports");
folder = Path.Combine(folder, System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion().ToString());
string compiledReportFile = Path.Combine(folder, report.GetReportAssemblyCacheName());

if (File.Exists(compiledReportFile))
{
	report = StiReport.GetReportFromAssembly(compiledReportFile, true);
}
else
{
	if (!Directory.Exists(folder))Directory.CreateDirectory(folder);
	report.Compile(compiledReportFile);
}
Спасибо.