Temat: Strona zapisana jako pdf
Czy układ jest zmienny, czy stały, a zmienia się jedynie treść i obrazek?
Jeśli tak, to proponuję armatę na wróbla (armatę, bo wiem, że na codeproject znajdziesz odpowiednie biblioteki*), ale prostą w działaniu.
ReportingServices i kontrolka po stronie klienta (client report), renderująca plik RDLC, zasilany danymi z odpowiedniego obiektu biznesowego (nie musisz mieć nawet zainstalowanego SQL Servera na komputerze), może być DataTable, może być odpowiednio napisana klasa.
W Visual Web Developer 2005 (to WAŻNE, aby to był 2005, na necie można znaleźć obraz ISO VWD), po uprzednim zainstalowaniu plugina do tworzenia raportów, tworzysz sobie nową "web aplikację" (tylko tak "na niby" :) ), aby móc do projektu dodać nowy RDLC (to zwykły XML opisujący raport, od biedy mógłbyś go napisać nawet w notatniku). Edytujesz go sobie wedle potrzeb - nagłówki, tabele, obrazki, dodajesz parametry, swoje własne funkcje w zewnętrznych bibliotekach (możliwości są bardzo duże) i zapisujesz jako RDLC.
Instalujesz "redist" do raportów (jest na necie) - wystarczy dystrybuować z aplikacją 2 czy 3 biblioteki (instalują się w GACu, ale mozna je sobie skopiować lokalnie do \bin). Teraz tylko oprogramować raport po stronie klienta (czyli dodać kontrolkę, przypisać właściwości URL w sekcji LocalReport ścieżkę, ustawić parametry) i wykorzystać metodę, która renderuje raport do XLS albo PDF.
Jesli będziesz zainteresowany, podeślę Ci przykładowy kod (ale już nie dziś, najwcześniej jutro wieczorem) i raport (tzn. nawrzucane obiektów - obrazków, tekstów, byle sprawdzić, jak działa :) ) + kod do bezpośredniego drukowania (przez EMF) z poziomu programu (a nie metody Print, ktora wyświetla niepotrzebnie okno ustawień wydruku).
Mając stały układ (czyli nie musisz grzebać w RDLC) i formatowanie (aczkolwiek w RDLC można formatować warunkowo za pomocą parametrów), możesz sobie dowolnie ustawiać treść contentu - czy to poprzez obiekt biznesowy zbindowany z raportem, czy to poprzez parametry raportu.
Wady:
- trzeba stracić jeden wieczór na znalezienie, ściągnięcie i zainstalowanie VWD 2005 (koniecznie 2005, NIE 2008 - ten nowy nie rozumie raportów klienckich RDLC, tylko serwerowe RDL. Mozna dokonać ręcznej konwersji raportów, ale to już hardcore).
Dodatkowo trzeba ściągnąć plugin do VWD (do edycji raportów) no i redistributable do wyświetlania raportów na formatce.
- raport jest dany raz na zawsze, o ile nie będziesz programowo modyfikował jego struktury (przypominam - XML, czyli od biedy mozna to robić z poziomu aplikacji). Możesz mieć jednak kilka raportów (szablonów) i tylko podawać kontrolce ścieżkę do wybranego. Super sprawa do załatwiania wszelkich wydruków!
Zalety:
- żadnego "lateksowo-pedeefowego" operowania poleceniami formatującymi - edycja WYSIWYG.
- kontrolka zajmie się drukowaniem (Ty już nie musisz, choć możesz, jak wspomniałem)
- dostajesz export do PDF i XLS (nawet z grupowaniem wierszy :) )
- masz duży wpływ na wygląd raportu przez jego sparametryzowanie: od formatowania warunkowego (bold, italic, kolor, rozmiar) po wyświetlaną treść)
- masz skalowany podgląd - zoom (pasek narzędziowy - można go programowo wyłączyć)
- masz automatyczne dzielenie na strony.
- możesz podawać kontrolce runtime ścieżkę do wybranego raportu. Dzięki temu, jak dojdzie nowy wydruk, to przygotujesz nowy plik RDLC i tylko dodasz do katalogu, gdzie je trzymasz, a w aplikacji dodasz nowe menu.
- PDF naprawdę jest ładny i czytelny (sprawdzone).
- jest darmowe (for commercial use)
- plik RDLC to XML, w razie pomyłki w definicji możesz ją poprawić w zwykłym notepadzie.
IMHO niestandardowe wykorzystanie Reporting Services pozwala w wielu przypadkach (gdzie nie trzeba czegoś złożonego renderować, a tylko wstawić dane do szablonu) zapomnieć o problemie drukowania z poziomu aplikacji - czy to raport tabelkowy, czy faktura, czy skierowanie na badania, czy PIT :)
WebInstalator VWD:
http://dobreprogramy.pl/index.php?dz=2&id=2049&Visual+...
ISO:
http://www.softdir.pl/details.php?id=2B1D255057&n=Micr...
Addin do VWD:
http://files.filefront.com/SQLServer2005+ReportAddinms...
Redist:
http://www.microsoft.com/downloads/details.aspx?family...
-----------------
* CodeProject - są rozwiązania:
http://www.codeproject.com/info/search.aspx?artkw=PDF+...Adrian Olszewski edytował(a) ten post dnia 04.03.09 o godzinie 20:42