Marcin Pigłowski

Marcin Pigłowski Specjalista ds. baz
danych

Temat: Strona zapisana jako pdf

Witam,

czy znacie jakiś sposób zapisania wygenerowanej strony jako pdf?
Zakładamy, że jest tak sformatowana, żeby mieścić się na szerokość kartki A4?
może ktoś miał styczność ze skryptami lub kontrolkami umożliwiającymi taką operację?
musi generować pdfa z polskimi znakami dialektycznymi i umieszczoną na stronie grafiką.

konto usunięte

Temat: Strona zapisana jako pdf

1. fpdf - biblioteka php, toworzysz PDF przy pomocy metod klasy fpdf, znaki PL w UTF8 z tego co pamietam.

2. DominoPDF http://www.primeapple.com/ - Biblioteka DLL, w zasadzie powstala dla Lotus Domino, ale mozesz ja wykorzystywac jako regularna dll'ke - nie znalazlem nic na temat oplat licencyjnych, uzywasz jeszcze prosciej niz fpdf - podajesz URI do pliku html: dzialaja page-break'i, style css w wyniku dostajesz gotowego PDF'a. Co do znakow PL to nie testowalem, tylko na norweskich - wiec przypuszczam ze nie powinno byc problemu.

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

konto usunięte

Temat: Strona zapisana jako pdf

Adrian Olszewski:
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.

Dobre toto Panie ;)

Temat: Strona zapisana jako pdf

...a bo mnie, Panie, już nerw brał niejeden :) gdy podczas pisania aplikacji, w której drukowanie wyników i tworzenie plików Excela to tylko drobny element, traciłem czas na kolejnych przepisach-cud "how2print"... Od renderowania formatki (....), przez własnoręczne rysowanie do metapliku, przez kilka bibliotek, które co prawda darmowe, ale albo nie do komercyjnego wykorzystania, albo nie było wykresów, jakie potrzebowałem...

I wtedy sobie przypomniałem, że rok temu bardzo się lubiliśmy z Rep.Srs. i że "można by ten-tego pokombinować", bo narzędzie sporo umie, a raporty da się renderować także w wersji "client" :)

Tylko martwi mnie, że VWD 2008 póki co nie wspiera RDLC (przynajmniej w wersji Express)...

PS: ... aaa właśnie, wykresy też ładne rysuje (i da się w nich sparametryzować wszystko: od koloru siatki rzędnych po czcionkę skali), kolejny atut :)Adrian Olszewski edytował(a) ten post dnia 04.03.09 o godzinie 20:57
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: Strona zapisana jako pdf

Adrian Olszewski:
Tylko martwi mnie, że VWD 2008 póki co nie wspiera RDLC (przynajmniej w wersji Express)...
Dziwne, bo 2005 w wersji Express (trzeba coś doinstalować) wspiera. To jest właśnie jedyne narzędzie Expressowe 2005, które ma wbudowany designer RDLC.

pozdrawiaMM

Temat: Strona zapisana jako pdf

Dokładnie to miałem na myśli :)

Jak pisałem, da się z nowego formatu (m.in. tablica zamieniła się w coś o nazwie "tablix") przejść ręcznie przez edycję w notatniku, ale... ... ... ... no właśnie :)

Szkoda wielka, bo jeśli VWD2005 za jakiś czas "zniknie" z serwerów, a 2008 nadal będzie tutaj kulawe (a może po prostu MS zrezygnował z RDLC? Ale dlaczego?), to wielu programistów nawet nie będzie wiedzieć, jakie fajne narzędzie mieli do dyspozycji...

konto usunięte

Temat: Strona zapisana jako pdf

A ja polecam tego lib'a...

http://www.winnovative-software.com/

IMHO z tego co patrzylem nie ma sobie rownych wsrod odpowiednikow open-source a nawet wsrod komercyjnych sie wyroznia, szczegolne wrazenie robi wywolanie go np. na onet.pl, polecam odpalenie demo.
Karol Orzechowski

Karol Orzechowski SharePoint
2007/2010,
SQLServer,
PowerPivot, .NET,
MVC

Temat: Strona zapisana jako pdf

Zgadza się. RDLC i kontrolka ReporViewer to najlepszy sposób na raporty, które można zapisać do różnych formatów. Używam tego połączenia na samych narzędziach express i efekt jest naprawdę rewelacyjny. Co do niekompatybilności w 2008 to uważam, że MS chciał poprawić sprzedawalność Reporting Services, ponieważ w wielu wypadkach można było sprytnie użyć właśnie klienckich rdlc zamiast armat na wróble i osadzić na stronie ASP.NET czy w aplikacji forms'owej.

konto usunięte

Temat: Strona zapisana jako pdf

Karol Orzechowski:
Zgadza się. RDLC i kontrolka ReporViewer to najlepszy sposób na raporty, które można zapisać do różnych formatów.

- brak exportu do worda
- brak webowego preview i print...

przynajmniej z tego co kojarze dyskwalifikowalo uzycie w moich aplikacjach ;/

konto usunięte

Temat: Strona zapisana jako pdf

Jeśli chcesz stworzyć taką funkcjonalność w aplikacji webowej to dobrym rozwiązaniem może się okazać IText.Net bądź AbcPDF.Net. Oba komponenty umożliwiają transformację kodu HTML bezpośrednio do dokumentu PDF.

Temat: Strona zapisana jako pdf

Z radością ogłaszam, że jest już długo oczekiwany addin do tworzenia RDLC w VWD 2008 :)

http://www.microsoft.com/downloads/details.aspx?Family...

Sprawdziłem - działa :)

konto usunięte

Temat: Strona zapisana jako pdf

podepne sie z drugiej strony:
gdyby przyszło wam kiedyś do głowy drukowanie zbiorczego wydruku kastomizowanego z dowolnego DataGridView to chętnie udostępnię kod klasy printera wynaleziony gdzieś kiedyś i zmodyfikowany do wersji mi odpowiadającej (niestety do pdf nie drukuje, chyba że przez PDF creator :) ).

Co do PDF - testowałem iTextNet - potwierdzam jego działanie.Piotr Jędrkowiak edytował(a) ten post dnia 28.03.09 o godzinie 20:59

Następna dyskusja:

Otwieranie PDF'a ze strumienia




Wyślij zaproszenie do