Wielu użytkowników generatorów raportów używaja dość standardową funkcjonalność w ich codziennej pracy. Ale czasami muszą radzić sobie z nietrywialnymi zadaniami, w tym celu spędzają wiele czasu na szukaniu rozwiązania które im to umożliwi. Ale być może najlepszym rozwiązaniem jest zwrócenie się do programistów o uzyskanie najbardziej wykwalifikowanej pomocy. Jest to wykonywane przez jednego z użytkowników generatora raportów Telerik Reporting. Problem polegał na wydrukowaniu obrazu obiektu w raporcie:
https://www.telerik.com/forums/print-a-picture-from-a-picturebox
Raport może zawierać obrazy nie tylko przesłane podczas projektowania, ale też te, które są przechowywane w formacie binarnym w bazie danych. Wyobraź sobie sytuację, w której wystarczy wydrukować odpowiednie obrazy z raportu z wieloma stronami danych. Na pierwszy rzut oka jest to duży problem. Raport można wyeksportować do formatu HTML, skopiować obraz do edytora grafiki, a następnie wysłać go do druku. Możesz też stworzyć interaktywny raport, który pozwoli Ci drukować zdjęcia jednym klieknięciem. Takie rozwiązanie jest oferowane przez specjalistów Telerik, w odpowiedzi na pytanie użytkownika.
To świetne rozwiązanie. Przyjrzyjmy się, jak rozwiązać ten problem w raporcie FastReport.Net. W rzeczywistości nie ma nic prostszego. Wszystko, co musisz zrobić, to utworzyć program obsługi zdarzeń, klikając obiekt obrazu:
I dodaj kilka metod do skryptu raportu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//picture object public Image img; //printing method 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)); //picture and posirion on one page } private void Picture1_Click(object sender, EventArgs e) { img = (sender as PictureObject).Image; //We get the picture from the chosen object Print(); //execute printing } |
Jak widać, wystarczy uzyskać obrazek wybranego obiektu i wydrukować. W metodzie drukowania utworzyliśmy obsługę zdarzenia ‘wydrukuj dokument’ (print a document), która wykorzystywała otrzymany obrazek. Teraz, podczas przeglądania raportu w przeglądarce, można kliknąć na obrazek i wysłać go do drukowania:
Ale jeśli nie chcesz drukować lecz zapisać na dysku lokalnym, możesz zrobić to w podobny sposób:
1 2 3 4 |
private void Picture1_Click(object sender, EventArgs e) { (sender as PictureObject).Image.Save("C:\\Temp\\image.bmp"); } |
Tak więc, drukowanie obrazu przez Click z raportu FastReport.NET jest bardzo łatwe.