2009-11-06 11 views
8

Chciałbym utworzyć stronę dynamicznego raportowania za pomocą strony JSP. Zasadniczo powinien zawierać następujące części:JasperReports wyjście html i pdf

  1. Filtr: Użytkownik może określić warunki filtra i nacisnąć przycisk filtru.
  2. Dane wyjściowe HTML: Wynik filtru można zobaczyć tutaj. To jedna duża strona html (lub kilka, jeśli jedna strona byłaby zbyt duża). Może zawierać linki do innych części systemu.
  3. Wydruk PDF: Użytkownik powinien mieć możliwość zapisania wersji raportu PDF przeznaczonej do wydrukowania lub archiwizacji.

Zamiast implementować wszystko samodzielnie, chciałbym użyć biblioteki raportowania java, więc stworzyłem mój raport przy użyciu JasperReports. Wynik w formacie pdf jest naprawdę niezły, ale eksport html raportu nie jest odpowiedni dla moich celów.

Eksport html JasperReport tworzy plik html z dużą ilością hardwired kodu i całkiem losowymi opcjami konfiguracji. Na przykład domyślnie tworzy tabelę z białym tłem (<table style="... bgcolor="white" ... ">), którą można wyłączyć przy użyciu opcji IS_WHITE_PAGE_BACKGROUND, z drugiej strony cellpadding="0" cellspacing="0" border="0" są podłączone w znaczniku cellpadding="0" cellspacing="0" border="0" w znaczniku table. Jest to również dziwne (i utrudnia stylowanie css), że zamiast klas rozpiętości plik html zawiera <span style="font-family: sansserif; color: #000000; font-size: 10.0px;"> dla wszystkich moich pól.

Oczywiście mogę zaimplementować wyjście HTML przy użyciu JSP, ale oznacza to, że muszę zaprojektować wyjście dwukrotnie (raz w jrxml dla JasperReports, raz w JSP), i muszę ponownie wdrożyć funkcje raportowania (takie jak obliczenia częściowe, obliczenie całkowite, grupowanie ...), co jest sprzeczne z zasadą DRY.

Jaka jest najlepsza praktyka wdrażania? Czy możliwe jest stworzenie lepszego eksportu HTML za pomocą JasperReports?

Odpowiedz

12

Nie jest łatwo zmienić format wyjściowy pliku JasperReports na dobry. Oto stary cytat dlaczego:

... formaty dokumentów, takich jak HTML lub XLS, nie obsługują absolutne pozycjonowanie tekstu i elementów graficznych. Zawartość tych dokumentów jest uporządkowana w strukturze siatki lub tabeli. Z Oczywiście, niektórzy mogą twierdzić, że absolutna pozycjonowanie elementów HTML jest możliwe dzięki CSS, ale można być pewność, że średnia CSS funkcjonalność jest daleki od bycia realizowanego we wszystkich przeglądarkach lub tym samego dokumentu HTML nie będzie wyglądał wszędzie tak samo.

To dlatego^JasperReports wbudowane eksporterów, które wytwarzają HTML, XLS lub dokumenty CSV użyciu specjalnego algorytmu w celu zorganizowania elementy obecne na pewien dokument strony w jakiejś siatki. Kiedy raport wzory są bardzo skomplikowane lub aglomerowany, przechodząc z absolutnego pozycjonowania do siatki lub tabela układu produkuje bardzo skomplikowanych tabel z wielu nieużywanych wierszy i kolumn, aby uczynić go do pustej przestrzeni pomiędzy elementami lub ich specjalnego dostosowania .

source

jak wspomniano jest to stary, ale o ile mogę powiedzieć, że to nadal dokładne.

Lista rzeczy, które można kontrolować za eksportera HTML jest bardzo ograniczony:

net.sf.jasperreports.export.html.frames.as.nested.tables 
net.sf.jasperreports.export.html.remove.emtpy.space.between.rows 
net.sf.jasperreports.export.html.size.unit 
net.sf.jasperreports.export.html.using.images.to.align 
net.sf.jasperreports.export.html.white.page.background 
net.sf.jasperreports.export.html.wrap.break.word 
net.sf.jasperreports.export.{format}.exclude.origin.{suffix}.{arbitrary_name} 
net.sf.jasperreports.export.{format}.exclude.origin.keep.first.{suffix}.{arbitrary_name} 

documentation here

Byłem z dala od HTML i używać tylko PDF, Excel oraz CSV, chyba klientów żądanie HTML. Jeśli musisz używać HTML, możesz zdefiniować arkusz stylów do pracy z witryną i użyć jQuery, aby usunąć wszystkie style śródliniowe, aby Twój arkusz stylów przejął kontrolę. Coś takiego:

$(document).ready(function() { 
    $('span').removeAttr('style'); 
}); 
+1

Natknąłem się na ten wpis dzisiaj, używam html i muszę usunąć ten zakres generowany. Jak już wspomniałeś w swojej odpowiedzi, zrozumiałem, używając jQuery. Mam pytanie, gdzie napisać ten kod i jak zintegrować go z moimi raportami? Proszę, prowadź mnie –