Многим пользователям генераторов отчетов достаточно штатной функциональности в повседневной работе. Но порой им приходится сталкиваться с нетривиальными задачами, и тогда поиск решения может занять немало времени и сил. Но, пожалуй, лучшим решением будет обратиться с вопросом к разработчикам для получения наиболее квалифицированной помощи. Это и сделал один из пользователей генератора отчетов Telerik Reporting. А проблема его состояла в том, чтобы распечатать картинку из объекта изображения в отчете:
https://www.telerik.com/forums/print-a-picture-from-a-picturebox
Отчет может содержать изображения, не только загруженные при проектировании, но те, которые хранятся в бинарном виде в базе данных. Представьте себе ситуацию, когда вам нужно распечатать только нужные изображения из отчета со многими страницами данных. На первый взгляд это большая проблема. Можно экспортировать отчет в формат HTML, скопировать нужное изображение в графический редактор и только тогда отправить на печать. А можно сделать интерактивный отчет, который позволит печатать картинки по клику мышью. Такое решение и предложено специалистами компании Telerik, в ответ на вопрос пользователя.
Это отличное решение. Давайте рассмотрим, как решить эту задачу в отчете FastReport.Net. На самом деле нет ничего проще. Вам нужно лишь создать обработчик события нажатия на объект картинки:
И добавить пару методов в скрипт отчета:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//Объект картинка public Image img; //Метод печати public void Print() { System.Drawing.Printing.PrintDocument picture = new System.Drawing.Printing.PrintDocument(); picture.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(picture_PrintPage); DialogResult result = new PrintDialog().ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) { picture.Print(); } } private void picture_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { e.Graphics.DrawImage(img, new Point(0, 0)); //картинка и позиция на печатном листе } private void Picture1_Click(object sender, EventArgs e) { img = (sender as PictureObject).Image; //Получаем картинку из выбранного объекта Print(); //Вызываем печать } |
Как видите, нужно лишь получить картинку из выбранного объекта и вызвать печать документа. В методе печати мы создали свой обработчик события печати документа, в котором использовали полученную картинку. Теперь, при просмотре отчета в просмотрщике можно кликнуть по картинке и отправить ее на печать:
А если вам нужно не печатать, а сохранять картинку на локальном диске, то можно по аналогии сделать так:
1 2 3 4 |
private void Picture1_Click(object sender, EventArgs e) { (sender as PictureObject).Image.Save("C:\\Temp\\image.bmp"); } |
Таким образом, печать картинки по клику, в отчетах FastReport.Net реализуется крайне просто.