Продолжение: создание отчета кодом
Продолжение: создание отчета кодом
Еще раз извините, счастье мое было недолгим.
Появилась еще одна проблема - в отчет нужно добавлять изображение.
Пробую такой код:
tmp - объект класса Image.
report.IsRendered = true;
report.NeedsCompiling = false;
StiImage img = new StiImage();
img.Image = tmp;
img.DisplayRectangle = new RectangleD(pos, CurrentHeight, 5,5);
img.Stretch = true;
img.Name = "Image" + k.ToString();
page.Components.Add(img);
report.RenderedPages.Add(page);
report.Show();
При отображении все отлично, но как только пытаюсь сделать экспорт, то:
в pdf - изображение просто отсутствует
excel - вылетает ошибка Net со стеком:
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at Stimulsoft.Report.Export.StiExcelExportService.MakeMainStream(StiPage page)
at Stimulsoft.Report.Export.StiExcelExportService.ExportExcel(StiReport report, Stream stream, StiPagesRange pageRange, Boolean useOnePageHeaderAndFooter, Boolean exportDataOnly, Boolean exportObjectFormatting)
at Stimulsoft.Report.Export.StiExcelExportService.Export(StiReport report, String fileName, Boolean sendEMail)
at Stimulsoft.Report.Render.StiPreviewControl.cmExport_Click(Object sender, EventArgs e)
at System.Windows.Forms.MenuItem.OnClick(EventArgs e)
at System.Windows.Forms.MenuItem.MenuItemData.Execute()
at System.Windows.Forms.Command.Invoke()
at System.Windows.Forms.Command.DispatchID(Int32 id)
at System.Windows.Forms.Control.WmCommand(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
и т.д.
Опять что то не до конца делаю?
Спасибо.
Появилась еще одна проблема - в отчет нужно добавлять изображение.
Пробую такой код:
tmp - объект класса Image.
report.IsRendered = true;
report.NeedsCompiling = false;
StiImage img = new StiImage();
img.Image = tmp;
img.DisplayRectangle = new RectangleD(pos, CurrentHeight, 5,5);
img.Stretch = true;
img.Name = "Image" + k.ToString();
page.Components.Add(img);
report.RenderedPages.Add(page);
report.Show();
При отображении все отлично, но как только пытаюсь сделать экспорт, то:
в pdf - изображение просто отсутствует
excel - вылетает ошибка Net со стеком:
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at Stimulsoft.Report.Export.StiExcelExportService.MakeMainStream(StiPage page)
at Stimulsoft.Report.Export.StiExcelExportService.ExportExcel(StiReport report, Stream stream, StiPagesRange pageRange, Boolean useOnePageHeaderAndFooter, Boolean exportDataOnly, Boolean exportObjectFormatting)
at Stimulsoft.Report.Export.StiExcelExportService.Export(StiReport report, String fileName, Boolean sendEMail)
at Stimulsoft.Report.Render.StiPreviewControl.cmExport_Click(Object sender, EventArgs e)
at System.Windows.Forms.MenuItem.OnClick(EventArgs e)
at System.Windows.Forms.MenuItem.MenuItemData.Execute()
at System.Windows.Forms.Command.Invoke()
at System.Windows.Forms.Command.DispatchID(Int32 id)
at System.Windows.Forms.Control.WmCommand(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
и т.д.
Опять что то не до конца делаю?
Спасибо.
Продолжение: создание отчета кодом
Пожалуйста, добавьте следующие строки при создании объекта img:
Спасибо.
Код: Выделить всё
img.Report = report;
img.Page = page;
Продолжение: создание отчета кодом
PDF выгружается нормально, с изображением.
В Excel та же ошибка вот точный участок кода, формирующий изображение:
StiImage img = new StiImage(new RectangleD(pos, CurrentHeight, 10, 10));
img.Report = report;
img.Page = page;
img.Image = tmp;
img.Stretch = true;
img.Name = "Image" + k.ToString();
page.Components.Add(img);
В Excel та же ошибка вот точный участок кода, формирующий изображение:
StiImage img = new StiImage(new RectangleD(pos, CurrentHeight, 10, 10));
img.Report = report;
img.Page = page;
img.Image = tmp;
img.Stretch = true;
img.Name = "Image" + k.ToString();
page.Components.Add(img);
Продолжение: создание отчета кодом
Пожалуйста, возьмите сегодняшний билд, в котором исправлена ошибка вчерашнего билда в реализации экспорта изображений в Excel.
Спасибо.
Спасибо.
Продолжение: создание отчета кодом
Взял новый билд, обнаружил следующие проблемы:
- экспорт в Excel проходит без ошибки, но на месте картинки ничего нет, только пустая ячейка.
- при открытии файла. выгруженного в формате Excel xml появляется окно с информацией об обнаруженной ошибке и опять никакого рисунка.
- может так и должно быть, но напишу, при выгрузке в html и архив html картинка тоже отсутствует.
Спасибо.
P.S. Попробовал уменьшить изображение, все стало нормально экспортироваться, в связи с чем вопрос. Подскажите, как правильно пересчитать размер изображения из пикселов в размеры страницы отчета. Ведь они отличаются?
- экспорт в Excel проходит без ошибки, но на месте картинки ничего нет, только пустая ячейка.
- при открытии файла. выгруженного в формате Excel xml появляется окно с информацией об обнаруженной ошибке и опять никакого рисунка.
- может так и должно быть, но напишу, при выгрузке в html и архив html картинка тоже отсутствует.
Спасибо.
P.S. Попробовал уменьшить изображение, все стало нормально экспортироваться, в связи с чем вопрос. Подскажите, как правильно пересчитать размер изображения из пикселов в размеры страницы отчета. Ведь они отличаются?
Продолжение: создание отчета кодом
Пришлите, пожалуйста, исходное изображение на для анализа.
Спасибо.
Спасибо.
Продолжение: создание отчета кодом
Выслал изображение на Ваш саппорт.
Думаю, нужно пояснить, что я имел ввиду:
в качестве параметра конструктору StiImage img = new StiImage(new RectangleD(pos, CurrentHeight, 10, 10));
я передавал размеры объекта класса Image, которые были в пикселах.
Метод Stretch все выравнивал. (т.е. в приведенном примере кода я обнаружил несоответствие с реальным - у меня
StiImage img = new StiImage(new RectangleD(pos, CurrentHeight,tmp.Width, tmp.Height));, где tmp - Image)
У Вас единицы измерения как я понимаю сантиметры? А я передавал туда пикселы, что в данном случае составляет порядка 700*700 сантимсетров вместо пикселов.
Возможно из-за этого не отображались картинки в Excell, html и др.
Сейчас сделал так
StiImage img = new StiImage(new RectangleD(pos, CurrentHeight,page.Width, page.Width)) - картинка у меня все равно квадратная,
но хотелось бы по возможности соблюсти размеры и пропорции если это позволяют размеры страницы или масштабировать изображение, если оно большо страницы по ширине или высоте. Поэтому сейчас ломаю голову, как перевести "мои" пикселы в "ваши сантиметры".
Думаю, нужно пояснить, что я имел ввиду:
в качестве параметра конструктору StiImage img = new StiImage(new RectangleD(pos, CurrentHeight, 10, 10));
я передавал размеры объекта класса Image, которые были в пикселах.
Метод Stretch все выравнивал. (т.е. в приведенном примере кода я обнаружил несоответствие с реальным - у меня
StiImage img = new StiImage(new RectangleD(pos, CurrentHeight,tmp.Width, tmp.Height));, где tmp - Image)
У Вас единицы измерения как я понимаю сантиметры? А я передавал туда пикселы, что в данном случае составляет порядка 700*700 сантимсетров вместо пикселов.
Возможно из-за этого не отображались картинки в Excell, html и др.
Сейчас сделал так
StiImage img = new StiImage(new RectangleD(pos, CurrentHeight,page.Width, page.Width)) - картинка у меня все равно квадратная,
но хотелось бы по возможности соблюсти размеры и пропорции если это позволяют размеры страницы или масштабировать изображение, если оно большо страницы по ширине или высоте. Поэтому сейчас ломаю голову, как перевести "мои" пикселы в "ваши сантиметры".
Продолжение: создание отчета кодом
В качестве единиц измерения отчета могут быть выбраны дюймы, сантиметры, сотые дюйма. Этот параметр выбирается на этапе создания отчета.
Соответсвенно pos и CurrentHeight должны быть в единицах измерения отчета в Вашем конструкторе
StiImage img = new StiImage(new RectangleD(pos, CurrentHeight, 10, 10));
Для конвертирования единиц измерения из пикселей в единицы измерения отчета, Вы можете использовать метод
report.Unit.ConvertFromHInches
Приблизительно(!) можно считать, что 1/100 дюйма это 1 пихель.
Спасибо.
Соответсвенно pos и CurrentHeight должны быть в единицах измерения отчета в Вашем конструкторе
StiImage img = new StiImage(new RectangleD(pos, CurrentHeight, 10, 10));
Для конвертирования единиц измерения из пикселей в единицы измерения отчета, Вы можете использовать метод
report.Unit.ConvertFromHInches
Приблизительно(!) можно считать, что 1/100 дюйма это 1 пихель.
Спасибо.
Продолжение: создание отчета кодом
Хорошо, в соответствии с выше сказанным получаю код для размера изображения в единицах измерения отчета
SizeD tmpSize = new SizeD(report.Unit. ConvertFromHInches(tmp.Width/100),
report.Unit.ConvertFromHInches(tmp.Height/100));
где tmp.Width и tmp.Height - размеры изображения в пикселях.
И получаю совсем неправильный результат - очень мальнькое изображение.
Более менее достоверного результата добился такой строкой кода
SizeD tmpSize = new SizeD(report.Unit. ConvertFromHInches(tmp.Width),
report.Unit.ConvertFromHInches(tmp.Height));
Что не так?
SizeD tmpSize = new SizeD(report.Unit. ConvertFromHInches(tmp.Width/100),
report.Unit.ConvertFromHInches(tmp.Height/100));
где tmp.Width и tmp.Height - размеры изображения в пикселях.
И получаю совсем неправильный результат - очень мальнькое изображение.
Более менее достоверного результата добился такой строкой кода
SizeD tmpSize = new SizeD(report.Unit. ConvertFromHInches(tmp.Width),
report.Unit.ConvertFromHInches(tmp.Height));
Что не так?
Продолжение: создание отчета кодом
Все совершенно правильно. Метод ConvertFromHInches конвертирует из сотых дюйма (hundreths of inch), т.е. аргумент tmp.Width и будет в пикселях.BeraleX писал(а):Более менее достоверного результата добился такой строкой кода
SizeD tmpSize = new SizeD(report.Unit. ConvertFromHInches(tmp.Width),
Спасибо.