ReportViewerW C# istnieje wiele sposobów na utworzenie pliku PDF. W mojej pracy stosujemy rozwiązanie ReportViewer i jak do tej pory sprawdza się ono dobrze.

Zaletą tego rozwiązania jest wbudowany kreator pliku PDF, który jest z integrowany z Visual Studio.

Bibliotekę można pobrać NuGet, ale myślę, że po dodaniu pliku raportu referencje są też automatycznie dodawane. Przy okazji na poniższym GIF-ie możesz zobaczyć ile bibliotek oferuje NuGet po wypisaniu słowa report. Oczywiście nie wszystkie mają darmową licencję. n.p. iTextSharp

NGET

Z NuGet wybieramy wersję 11. Do działa potrzebne są dwie referencje Microsoft.ReportViewer.WebForms(lub Microsoft.ReportViewer.WinForms) i Microsoft.ReportViewer.Common

ReportViewer nie jest doskonały. Biblioteka ta występuje w dwóch wersjach:

  • WebForm
  • WinForm

Ma on zależności z bibliotekami ASP.NET lub WinForms. Czyli jeśli chcesz napisać aplikację konsolową, która generuje raporty bazując na tej bibliotece musisz dodać zależności i biblioteki WinForms.

W ASP.NET MVC sprawa też się trochę komplikuje ponieważ ReportViewer korzysta z Ajaxowym bibliotek Microsoftu. Istnieją też poważne problemy z użyciem jej w widoku Razor niż webforms.

Nic dziwnego, że to rozwiązanie mimo swoich zalet powoli jest odsuwane . Obecnie jednak wiele aplikacji biznesowy korzysta z tego mechanizmu.

Do prezentacji rozwiązania stworzę aplikację webową ASP.NET Web Forms. Do projektu dodajemy plik “report” znajduje się on w zakładce “Reporting”

Reporting

Po utworzeniu plik kliknij na niego dwu krotnie aby przejść do kreatora.

ReportView

Tutaj zaczyna się większość pracy. Do raportu możemy dodać różne elementy graficzne. TextBox wyświetla zawartość tekstową. Lista potrafi wyświetlić kolekcję którą prześlemy do raportu. Kontrolka Image wyświetli oczywiście obrazek z danej ścieżki.

kontrolki

Zacznijmy od czegoś prostego. Dodajmy do raportu tekst i jakiś obrazek.

Dodanie obrazu i tekstu do reportViewer

Na tej podstawie możemy stworzyć w miarę przejrzysty raport. Rezultat stworzonego pliku PDF widzimy na ekranie.

Oczywiście chcemy do pliku PDF dodać dane dynamicznie. Nie chcemy danych zaszywać  na sztywno w pliku PDF.

W tym celu musimy dodać do projektu parametry. Kliknij prawym przyciskiem myszki na katalog “Parameters”.

Dodanie parametru 

W następnym oknie nazwij swój parametr. Możesz ustalić jakiego typu on jest.

Change name

Aby użyć właśnie stworzonej  zmiennej przeciągnij ją do istniejącego pola tekstowego lub upuść na dokument.

Report data

Przejdźmy do kodu tworzenia raportu w C#. Dodałem do strony ASP.NET prosty przycisk i oto jego zdarzenie kliknięcia.

protected void Button1_Click(object sender, EventArgs e)
{
    ReportViewer ReportViewer1 = new ReportViewer();
    ReportViewer1.LocalReport.ReportPath =  HttpContext.Current.Server.MapPath(@"\ReportFun.rdlc");
    string i = "Cezary";

    ReportParameter data = new ReportParameter("Imie", i);

    ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { data });

    byte[] byteViewer = ReportViewer1.LocalReport.Render("PDF");
    FileStream newFile;

    string filename = Guid.NewGuid().ToString() + ".pdf";
    string path = HttpContext.Current.Server.MapPath(@"\") + filename ;
    newFile = new FileStream(path, FileMode.Create);
    newFile.Write(byteViewer, 0, byteViewer.Length);
    newFile.Flush();
    newFile.Close();
}

Najważniejsza część znajduje się tutaj.

ReportViewer ReportViewer1 = new ReportViewer();
ReportViewer1.LocalReport.ReportPath =  HttpContext.Current.Server.MapPath(@"\ReportFun.rdlc");
string i = "Cezary";

ReportParameter data = new ReportParameter("Imie", i);

ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { data });

Parametry raportu są obiektem klasy ReportParameter. W raporcie możemy ustawić kolekcję parametrów.

ReportViewer ma problem z plikami PNG, które mają przezroczystość.

Obrazki ReportViewer JPGObrazki ReportViewer PNG

Lepiej wybrać obrazek w formacie JPG, który na pewno nie ma przezroczystości.

W następnym wpisie opiszę jak dodać do raportu kolekcje i ją wyświetlić w postaci tabelki.