Как распечатать картинку из отчета по клику

29.04.2020

Многим пользователям генераторов отчетов достаточно штатной функциональности в повседневной работе. Но порой им приходится сталкиваться с нетривиальными задачами, и тогда поиск решения может занять немало времени и сил. Но, пожалуй, лучшим решением будет обратиться с вопросом к разработчикам для получения наиболее квалифицированной помощи. Это и сделал один из пользователей генератора отчетов 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 реализуется крайне просто.

2 сентября 2024

Обзор облачного решения для создания и управления отчетами

МоиОтчеты Облако — это мощное облачное решение для создания и управления отчетами, обеспечивающее широкий спектр возможностей, от создания документов в различных форматах до интеграции с корпоративными системами.
9 ноября 2023

Как сделать отчет из C# проекта в МоиОтчеты Облако

В этой статье разберем пример, как с помощью SDK FastReport создавать отчеты и экспортировать их в любой удобный для вас формат.
4 октября 2023

Как из приложения ASP.NET Core сформировать отчет с использованием FastReport.Core.Skia

Рассказываем как сформировать отчет на Windows и Linux с использованием FastReport.Core.Skia и приватного NuGet сервера.