Tworzenie wykresów

Wcześniej ludzie musieli polegać na skryptach, aby zbierać dane wykresu i renderować wykres przy użyciu elementu obrazu w szablonie raportu. JasperReports sprawia, że ​​jest to teraz proste, ponieważ ma wbudowaną obsługę wykresów przy użyciu nowego komponentu wykresu.

Korzystając z nowego składnika wykresu, użytkownik musi zastosować tylko ustawienia wizualne i zdefiniować wyrażenia, które pomogą zbudować zestaw danych wykresu. JasperReports używa JFreeChart jako podstawowej biblioteki wykresów. Podczas konfigurowania nowego komponentu wykresu zaangażowane są następujące trzy komponenty -

  • Ogólny składnik wykresu.

  • Zestaw danych wykresu (który grupuje ustawienia związane z danymi wykresu).

  • Wykres wykresu (który grupuje ustawienia wizualne związane ze sposobem renderowania elementów wykresu).

JasperReports obsługuje obecnie następujące typy wykresów: kołowy, kołowy 3D, słupkowy, słupkowy 3D, słupkowy XY, słupkowy ułożony, słupkowy ułożony trójwymiarowo, liniowy, liniowy XY, obszarowy, obszar XY, skumulowany, punktowy, bąbelkowy, szeregów czasowych, wysoki -Low-Open-Close, Candlestick, Multiple Axis, Meter, Thermometer i Gantt.

Właściwości wykresu

Wykresy to zwykłe elementy raportu, więc niektóre ze swoich właściwości są wspólne dla wszystkich pozostałych elementów raportu. Istnieje element JRXML o nazwie <chart>, służy do tworzenia wszelkiego rodzaju wykresów. Ten element grupuje specjalne ustawienia specyficzne dla wykresów, które mają zastosowanie do wszystkich typów wykresów.

Elementy podrzędne wykresu

Podelementami elementu <chart> są -

  • <reportElement> - Są to obiekty wyświetlane, takie jak statyczne teksty, pola tekstowe, obrazy, linie i prostokąty, które umieszczasz w sekcjach szablonu raportu.

  • <Box> - Ten element jest używany do otaczania wykresów obramowaniem, które można dostosować po każdej stronie.

  • <chartTitle>- Ten element służy do umieszczania tytułu wykresu. Pozycja atrybut decyduje położenie tytuł wykresu w raporcie. Ten element ma atrybuty -Position(Wartości mogą być Top , Bottom , Left , Right . Głucha wartość to Top ),color. <chartTitle> ma czcionkę i titleExpression jako podelementy.

  • <chartSubtitle>- Ten element służy do umieszczania podtytułu wykresu. Ten element ma atrybut -color. <chartSubtitle> ma podelementy font i subtitleExpression .

  • <chartLegend>- Element może kontrolować właściwości związane z czcionką, a także kolor tekstu i kolor tła legendy wykresu za pomocą tego elementu. Ten element ma atrybuty -textColor i backgroundColor.

  • <anchorNameExpression> - Ten element tworzy cel dla kotwicy.

  • <hyperlinkReferenceExpression> - Ten element zawiera wyrażenie raportu wskazujące nazwę zasobu zewnętrznego (zwykle adres URL).

  • <hyperlinkAnchorExpression> - Hiperłącze wskazuje kotwicę w zasobie zewnętrznym.

  • <hyperlinkPageExpression> - Hiperłącze kieruje do strony w bieżącym raporcie.

  • <hyperlinkTooltipExpression>- Ten element kontroluje etykietkę narzędzia hiperłącza. Typ wyrażenia powinien być java.lang.String .

  • <hyperlinkParameter> - Ten element, jeśli jest obecny, generuje ostateczne hiperłącze w zależności od wartości parametrów.

Atrybuty wykresu

Atrybuty w elemencie <chart> dostępne dla wszystkich typów wykresów to -

  • isShowLegend- Ten atrybut służy do określenia, czy legenda wykresu zostanie wyświetlona w raporcie. Wartości mogą być prawdziwe lub fałszywe . Wartość domyślna to prawda .

  • evaluationTime- Określa, kiedy będzie oceniane wyrażenie wykresu. Wartości mogą być teraz , raport , strona , kolumna , grupa , pasmo . Wartość domyślna to teraz .

  • evaluationGroup- Ten atrybut określa nazwę grupy, która ma zostać użyta do oceny wyrażeń wykresu. Wartość tego atrybutu musi odpowiadać nazwie grupy, której chcielibyśmy użyć jako grupy ocen wykresu.

  • hyperlinkType- Ten atrybut może zawierać dowolną wartość tekstową. Wartość domyślna to Brak . Oznacza to, że ani pola tekstowe, ani obrazy nie przedstawiają hiperłączy, nawet jeśli występują specjalne wyrażenia hiperłącza.

  • hyperlinkTarget- Ten atrybut pomaga dostosować zachowanie określonego odsyłacza po jego kliknięciu w przeglądarce. Wartości mogą być Self lub Blank . Wartość domyślna to Self .

  • bookmarkLevel- Ten atrybut, gdy jest ustawiony na dodatnią liczbę całkowitą, generuje zakładki w raportach eksportowanych do formatu PDF. Wartość domyślna to 0 .

  • customizerClass- To jest nazwa klasy (opcjonalnie), której można użyć do dostosowania wykresu. Wartość tego elementu musi być ciągiem zawierającym nazwę klasy dostosowania.

Dostosowywanie wykresów

Jak wspomniano powyżej, JasperReports używa JFreeChart jako podstawowej biblioteki wykresów. JFreeChart zawiera funkcje, które nie są bezpośrednio obsługiwane przez JasperReports. Możemy skorzystać z tych funkcji, dostarczając klasę dostosowywania za pośrednictwem atrybutu customizerClass w elemencie <chart>. Klasa dostosowująca to nic innego jak implementacja interfejsu net.sf.jasperreports.engine.JRChartCustomizer . Najłatwiejszym sposobem zaimplementowania tego interfejsu jest rozszerzenie klasy net.sf.jasperreports.engine.JRAbstractChartCustomizer, a tym samym uzyskanie dostępu do parametrów, pól i zmiennych w celu bardziej elastycznego dostosowywania wykresów na podstawie danych raportu.

Zestawy danych wykresów

Jedną z typowych właściwości we wszystkich typach wykresów jest <dataset> element. Zestawy danych wykresów pomagają mapować dane raportu i pobierać dane wykresu w czasie wykonywania. Każdy typ wykresu zawiera różne podelementy definiujące wyrażenia wykresu. Te wyrażenia definiują dane używane do generowania wykresu. Wszystkie te elementy podrzędne zawierają element <dataset>, który określa, kiedy wyrażenia wykresu są oceniane i resetowane.

W JasperReports dostępnych jest kilka typów zestawów danych wykresów, ponieważ każdy typ wykresu działa z określonymi zestawami danych: Kołowy, Kategoria, XY, Szeregi czasowe, Okres, XYZ i Wysoki-niski. Każdy z tych typów zestawów danych implementuje interfejs net.sf.jasperreports.engine.JRChartDataset , który definiuje zestawy danych wykresów. Wszystkie zestawy danych wykresów są inicjowane i zwiększane w ten sam sposób; jednak różnią się one tylko rodzajem danych lub seriami danych, które mapują.

Właściwości zbioru danych

Poniższa tabela podsumowuje atrybuty elementu <dataset> -

Atrybut Opis Wartości
resetType Ten atrybut określa, kiedy wartość wyrażenia wykresu ma zostać zresetowana. Brak, raport, strona, kolumna, grupa. Wartość domyślna toReport.
resetGroup Ten atrybut określa nazwę grupy, w której wartość wyrażenia wykresu jest resetowana. Wartość tego atrybutu musi być zgodna z nazwą dowolnej grupy zadeklarowanej w szablonie raportu JRXML.
IncrementType Ten atrybut określa, kiedy należy ponownie obliczyć wartość wyrażenia wykresu. Brak, raport, strona, kolumna, grupa. Wartość domyślna to"None".
IncrementGroup Ten atrybut określa nazwę grupy, w której przeliczane jest wyrażenie wykresu. Wartość tego atrybutu musi odpowiadać nazwie grupy zadeklarowanej w szablonie raportu JRXML.

Poniższa tabela podsumowuje podelementy elementu <dataaset> -

Element podrzędny Opis
<incrementWhenExpression> Sposób zwiększania zbioru danych wykresu można dostosować, odfiltrowując niepożądane dane za pomocą tego elementu podrzędnego.
<datasetRun> Zawiera informacje wymagane do utworzenia wystąpienia podrzędnego zbioru danych raportu.

Typy zbiorów danych

Konkretne typy zbiorów danych wyjaśniono poniżej -

Zestaw danych kołowych

Zbiór danych kołowych charakteryzuje się następującymi wyrażeniami -

  • <keyExpression> - reprezentuje kategorie, które będą tworzyły wycinki na wykresie kołowym. To wyrażenie może zwrócić dowolny obiekt java.lang.Comparable.

  • <valueExpression> - tworzy wartości odpowiadające każdej kategorii / kluczowi w zbiorze danych. Wartości to zawsze obiekty java.lang.Number.

  • <labelExpression> - jeśli brakuje tego wyrażenia, wykres wyświetli domyślne etykiety dla każdego wycinka na wykresie kołowym. Użyj tego wyrażenia, które zwraca wartości java.lang.String, aby dostosować etykiety elementów na wykresie kołowym.

  • <sectionHyperlink> - ustawia hiperłącza powiązane z sekcjami kołowymi.

Zbiór danych kategorii

Zbiór danych kategorii charakteryzuje się elementem <categorySeries>, który zawiera -

  • <seriesExpression> - wskazuje nazwę serii. To wyrażenie może zwrócić dowolny obiekt java.lang.Comparable.

  • <categoryExpression> - zwraca nazwę kategorii dla każdej wartości wewnątrz serii określonej przez wyrażenie serii. Kategorie to obiekty java.lang.Comparable.

  • <valueExpression> - tworzy wartości odpowiadające każdej kategorii w zbiorze danych. Wartości to zawsze obiekty java.lang.Number.

  • <labelExpression> - jeśli brakuje tego wyrażenia, wykres wyświetli domyślne etykiety dla każdego elementu na wykresie. Użyj tego wyrażenia, które zwraca wartości java.lang.String, aby dostosować etykiety pozycji na wykresie.

  • <itemHyperlink> - ustawia hiperłącza związane z elementami wykresu.

Zestaw danych XY

Zbiór danych XY charakteryzuje się elementem <xySeries>, który zawiera -

  • <seriesExpression> - wskazuje nazwę serii. To wyrażenie może zwrócić dowolny obiekt java.lang.Comparable.

  • <xValueExpression> - zwraca wartość java.lang.Number reprezentującą wartość X z pary (x, y), która zostanie dodana do bieżącej serii danych.

  • <yValueExpression> - zwraca wartość java.lang.Number reprezentującą wartość Y z pary (x, y), która zostanie dodana do bieżącej serii danych.

  • <labelExpression> - jeśli brakuje tego wyrażenia, wykres wyświetli domyślne etykiety dla każdego elementu na wykresie. Użyj tego wyrażenia, które zwraca wartości java.lang.String, aby dostosować etykiety pozycji na wykresie.

  • <itemHyperlink> - ustawia hiperłącza związane z elementami wykresu.

Zbiór danych XYZ

Zbiór danych XYZ charakteryzuje się elementem <xyzSeries>, który zawiera -

  • <seriesExpression> - wskazuje nazwę serii. To wyrażenie może zwrócić dowolny obiekt java.lang.Comparable.

  • <xValueExpression> - zwraca wartość java.lang.Number reprezentującą wartość X z pozycji (x, y, z), która zostanie dodana do bieżącej serii danych.

  • <yValueExpression> - zwraca wartość java.lang.Number reprezentującą wartość Y z pozycji (x, y, z), która zostanie dodana do bieżącej serii danych.

  • <zValueExpression> - zwraca wartość java.lang.Number reprezentującą wartość Z z pozycji (x, y, z), która zostanie dodana do bieżącej serii danych.

  • <labelExpression> - jeśli brakuje tego wyrażenia, wykres wyświetli domyślne etykiety dla każdego elementu na wykresie. Użyj tego wyrażenia, które zwraca wartości java.lang.String, aby dostosować etykiety pozycji na wykresie.

  • <itemHyperlink> - ustawia hiperłącza związane z elementami wykresu.

Zestaw danych szeregów czasowych

Zbiór danych szeregów czasowych jest scharakteryzowany przez atrybut timePeriod i element <timeSeries>. Atrybut timePeriod określa typ serii danych w zestawie danych. Szeregi czasowe mogą zawierać wartości liczbowe skojarzone z dniami, miesiącami, latami lub innymi wstępnie zdefiniowanymi okresami. Możliwe wartości to: rok, kwartał, miesiąc, tydzień, dzień - jest to wartość domyślna, godzina, minuta, sekunda, milisekunda.

Element <timeSeries> zawiera -

  • <seriesExpression> - wskazuje nazwę serii. To wyrażenie może zwrócić dowolny obiekt java.lang.Comparable.

  • <timePeriodExpression> - zwraca wartość java.util.Date, z której silnik wyodrębni odpowiedni okres czasu w zależności od wartości ustawionej dla atrybutu timePeriod wspomnianego powyżej.

  • <valueExpression> - zwraca wartość java.lang.Number do skojarzenia z odpowiednią wartością okresu czasu podczas zwiększania bieżącej serii zbioru danych.

  • <labelExpression> - jeśli brakuje tego wyrażenia, wykres wyświetli domyślne etykiety dla każdego elementu na wykresie. Użyj tego wyrażenia, które zwraca wartości java.lang.String, aby dostosować etykiety pozycji na wykresie.

  • <itemHyperlink> - ustawia hiperłącza związane z elementami wykresu.

Zestaw danych dla okresu

Zbiór danych okresu jest scharakteryzowany przez element <timePeriodSeries>, który zawiera -

  • <seriesExpression> - wskazuje nazwę serii. To wyrażenie może zwrócić dowolny obiekt java.lang.Comparable.

  • <startDateExpression> - określa początek przedziału dat, z którym zostanie skojarzona wartość liczbowa, gdy zostanie dodana do szeregu okresów.

  • <endDateExpression> - określa koniec przedziału dat, z którym wartość liczbowa zostanie skojarzona, gdy zostanie dodana do szeregu okresów.

  • <valueExpression> - zwraca wartość java.lang.Number do powiązania z bieżącym interwałem dat określonym przez wyrażenia daty początkowej i końcowej.

  • <labelExpression> - jeśli brakuje tego wyrażenia, wykres wyświetli domyślne etykiety dla każdego elementu na wykresie. Użyj tego wyrażenia, które zwraca wartości java.lang.String, aby dostosować etykiety pozycji na wykresie.

  • <itemHyperlink> - ustawia hiperłącza związane z elementami wykresu.

High Low Dataset

Zbiór danych o wysokim i niskim poziomie charakteryzuje się następującymi wyrażeniami -

  • <seriesExpression> - obecnie tylko jedna seria jest obsługiwana na wykresie High-Low lub Candlestick. Jednak ta pojedyncza seria musi być identyfikowana przez java.lang.Comparable wartość zwracana przez to wyrażenie, a także musi być używana jako nazwa serii w legendzie wykresu.

  • <dateExpression> - zwraca datę, do której odnosi się bieżąca pozycja (wysoka, niska, otwarta, zamknięta, wolumen).

  • <highExpression> - zwraca wartość java.lang.Number, która będzie częścią pozycji danych dodanej do serii, gdy zbiór danych zostanie zwiększony.

  • <lowExpression> - zwraca wartość java.lang.Number, która będzie częścią elementu danych dodanego do serii, gdy zbiór danych zostanie zwiększony.

  • <openExpression> - zwraca wartość java.lang.Number, która będzie częścią elementu danych dodanego do serii, gdy zbiór danych zostanie zwiększony.

  • <closeExpression> - zwraca wartość java.lang.Number, która będzie częścią pozycji danych dodanej do serii, gdy zbiór danych zostanie zwiększony.

  • <volumeExpression> - wyrażenie liczbowe, które zwraca wartość woluminu do użycia dla bieżącego elementu danych. Służy tylko do wykresów świecowych.

  • <itemHyperlink> - ustawia hiperłącza związane z elementami wykresu.

Zestaw danych wartości

Jest to specjalna implementacja zestawu danych wykresów, która zawiera pojedynczą wartość i jest używana do renderowania wykresów z miernika i termometru. Wartość jest zbierana przy użyciu wyrażenia <valueExpression>.

Wykresy

Innym wspólnym elementem JRXML we wszystkich typach wykresów jest <plot> element. To pozwala nam zdefiniować kilka cech wykresu, takich jak orientacja i kolor tła. Wykresy różnią się w zależności od typu wykresu.

Atrybut fabuły

Poniższa tabela podsumowuje atrybuty elementu <plot> -

Atrybut Opis Wartości
kolor tła Ten atrybut określa kolor tła wykresu. Dowolna sześciocyfrowa wartość szesnastkowa jest prawidłową wartością tego atrybutu. Wartość szesnastkowa musi być poprzedzona znakiem #.
orientacja Ten atrybut określa orientację wykresu. Poziomo, pionowo Domyślna wartość to „Pionowo”
backgroundAlpha Ten atrybut określa przezroczystość koloru tła wykresu. Prawidłowe wartości tego atrybutu obejmują dowolną liczbę dziesiętną z przedziału od 0 do 1 włącznie. Im wyższa liczba, tym mniej przezroczyste będzie tło. Wartość domyślna to „1”.
foregroundAlpha Ten atrybut określa przezroczystość kolorów pierwszego planu wykresu. Prawidłowe wartości tego atrybutu obejmują dowolną liczbę dziesiętną z przedziału od 0 do 1 włącznie. Im wyższa liczba, tym mniej przezroczyste będzie tło. Wartość domyślna to „1”.
labelRotation Ten atrybut umożliwia obracanie etykiet tekstowych na osi X w celu obracania w prawo lub w lewo. Ten atrybut ma zastosowanie tylko do wykresów, dla których oś x nie jest numeryczna lub nie wyświetla dat. Wartość domyślna to „0,0”.

Element <plot> ma podelement <seriesColor>, którego atrybuty to: seriesOrder i color . Ten element dostosowuje kolory dla serii i ich położenie w sekwencji kolorów.

Specyficzne ustawienia wykresów

  • piePlot - Nie ma określonych ustawień

  • pie3DPlot- Zawiera atrybut depthFactor , wartość liczbową z zakresu od 0 do 1, która reprezentuje głębokość ciasta jako procent wysokości obszaru kreślenia.

  • barPlot - Można wyświetlać lub ukrywać etykiety znaczników, znaczniki lub etykiety elementów i zapewnia ustawienia dla obu osi.

  • bar3DPlot - Zapewnia te same ustawienia, co barPlot i generuje efekt 3D przy użyciu atrybutów xOffset i yOffset.

  • linePlot - Można wyświetlać lub ukrywać linie łączące punkty elementów, można wyświetlać lub ukrywać kształty powiązane z punktami elementów i zapewniać ustawienia dla obu osi.

  • scatterPlot - Podobnie jak linePlot, może pokazywać lub ukrywać linie łączące punkty elementów, może pokazywać lub ukrywać kształty powiązane z punktami elementów i zapewnia ustawienia dla obu osi.

  • areaPlot - Zawiera ustawienia dla obu osi.

  • bubblePlot - Można ustawić wymiary bąbelków, ustawiając atrybut scaleType i zapewnić ustawienia dla obu osi.

  • timeSeriesPlot - Można wyświetlać lub ukrywać linie łączące punkty elementów, można wyświetlać lub ukrywać kształty powiązane z punktami elementów i zapewniać ustawienia dla obu osi.

  • highLowPlot - Można pokazać lub ukryć otwarte tiki, można pokazać lub ukryć zamknięte tiki i zapewnia ustawienia dla obu osi.

  • candlestickPlot - Można pokazać lub ukryć głośność i zapewnić ustawienia dla obu osi.

  • meterPlot - Zawiera określone ustawienia kształtu tarczy, kąta skali, jednostek miary, interwału taktu, koloru tarczy, koloru igły, koloru zaznaczenia, czcionki wyświetlania wartości, wzoru koloru i formatu, zakresu danych i interwałów licznika.

  • thermometerPlot - Zawiera określone ustawienia dotyczące lokalizacji wartości, koloru rtęci, pokazania / ukrycia linii wartości, czcionki wyświetlanej wartości, koloru i wzoru formatu, zakresu danych, zakresu niskiego, średniego i wysokiego.

  • multiAxisChart - Zawiera określone ustawienia osi uwzględnionej w wykresie.

Rodzaje wykresów

JasperReports oferuje wbudowaną obsługę kilku typów wykresów. Są one wymienione poniżej -

  • pieChart - połączenie zbioru danych Pie i wykresu Pie.

  • pie3DChart - Grupuje zestaw danych Pie i wykres Pie 3D.

  • barChart - Podstawowa kombinacja zestawu danych kategorii i wykresu słupkowego.

  • bar3DChart - Zawija zestaw danych kategorii i wykres słupkowy 3D.

  • xyBarChart - Obsługuje zestawy danych z okresu czasu, zestawy danych szeregów czasowych i zestawy danych XY oraz wykorzystuje wykres słupkowy do renderowania osi i elementów.

  • stackedBarChart - Wykorzystuje dane ze zbioru danych kategorii i renderuje jego zawartość za pomocą wykresu słupkowego.

  • stackedBar3DChart - Wykorzystuje dane ze zbioru danych kategorii i renderuje jego zawartość za pomocą wykresu Bar 3D.

  • lineChart - Grupuje zestaw danych kategorii i wykres liniowy.

  • xyLineChart - Grupuje zestaw danych XY i wykres liniowy.

  • areaChart - Elementy ze zbioru danych kategorii są renderowane przy użyciu wykresu powierzchni.

  • stackedAreaChart - Elementy ze zbioru danych kategorii są renderowane przy użyciu wykresu powierzchni.

  • xyAreaChart - Wykorzystuje dane ze zbioru danych XY i renderuje je poprzez wykres powierzchni.

  • scatterChart - Zawija zbiór danych XY wykresem punktowym.

  • bubbleChart - Łączy zestaw danych XYZ z wykresem bąbelkowym.

  • timeSeriesChart - Grupuje zestaw danych szeregów czasowych i wykres szeregów czasowych.

  • highLowChart - Połączenie zestawu danych High-Low i wykresu High-Low.

  • candlestickChart - Wykorzystuje dane z zestawu danych High-Low, ale ze specjalnym wykresem świecowym.

  • meterChart - Wyświetla pojedynczą wartość z zestawu danych wartości na tarczy, używając opcji renderowania z wykresu miernika.

  • thermometerChart - Wyświetla pojedynczą wartość w zestawie danych wartości przy użyciu opcji renderowania z wykresu termometru.

  • multiAxisChart - Zawiera wiele osi zakresu, z których wszystkie mają wspólną oś domeny.

Przykład

Aby zademonstrować wykresy, napiszmy nowy szablon raportu (jasper_report_template.jrxml). Tutaj dodamy <barChart> do sekcji <pageHeader> i <pieChart> do sekcji <summary>. Na wykresach pokazywalibyśmy oceny uzyskane z każdego przedmiotu. Zapisz go w kataloguC:\tools\jasperreports-5.0.1\test. Zawartość pliku jest taka, jak podano poniżej -

<?xml version = "1.0" encoding = "UTF-8"?>

<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
   http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
   name = "jasper_report_template" pageWidth = "595" pageHeight = "860"
   columnWidth = "515" leftMargin = "40" rightMargin = "40"
   topMargin = "50" bottomMargin = "50">

   <field name = "subjectName" class = "java.lang.String"/>
   <field name = "marks" class = "java.lang.Integer"/>
   
   <variable name = "countNumber" class = "java.lang.Integer" calculation = "Count">
      <variableExpression>
         <![CDATA[Boolean.TRUE]]>
      </variableExpression>
   </variable>
   
   <background>
      <band splitType = "Stretch"/>
   </background>
   
   <title>
      <band height = "79" splitType = "Stretch"/>
   </title>
   
   <pageHeader>
      <band height = "200">
    
         <barChart>
            <chart evaluationTime = "Report">
               <reportElement x = "0" y = "0" width = "555" height = "200"/>
            
               <chartTitle>
                  <titleExpression>
                     <![CDATA["My First JR Bar Chart"]]>
                  </titleExpression>
               </chartTitle>
            </chart>
      
            <categoryDataset>
               <dataset incrementType = "None"/>
            
               <categorySeries>
                  <seriesExpression>
                     <![CDATA[$F{subjectName}]]>
                  </seriesExpression>
            
                  <categoryExpression>
                     <![CDATA[$F{subjectName}]]>
                  </categoryExpression>
            
                  <valueExpression>
                     <![CDATA[$F{marks}]]>
                  </valueExpression>

               </categorySeries>
            </categoryDataset>
      
            <barPlot isShowTickMarks = "false">
               <plot/>
            </barPlot>
         </barChart>
      
      </band>
   </pageHeader>
   
   <columnHeader>
      <band height = "20" splitType = "Stretch"/>
   </columnHeader>
   
   <detail>
      <band height = "20" splitType = "Stretch"/>
   </detail>
   
   <columnFooter>
      <band height = "20" splitType = "Stretch"/>
   </columnFooter>
   
   <pageFooter>
      <band height = "20" splitType = "Stretch"/>
   </pageFooter>
   
   <summary>
      <band height = "400" splitType = "Stretch">
      
         <pieChart>
            <chart evaluationTime = "Report">
               <reportElement x = "135" y = "0" width = "270" height = "300"/>
            
               <chartTitle>
                  <titleExpression>
                     <![CDATA["My First JR Pie Chart"]]>
                  </titleExpression>
               </chartTitle>
            </chart>
         
            <pieDataset>
               <dataset incrementType = "None"/>
               
               <keyExpression>
                  <![CDATA[$F{subjectName}]]>
               </keyExpression>
            
               <valueExpression>
                  <![CDATA[$F{marks}]]>
               </valueExpression>
            </pieDataset>
            
            <piePlot>
               <plot/>
               <itemLabel/>
            </piePlot>
         </pieChart>
      
      </band>
   </summary>
	
</jasperReport>

Szczegóły powyższego pliku podano poniżej -

  • Element JRXML używany do tworzenia wykresu słupkowego znajduje się </barChart> w <pageHeader>. Zawiera element podrzędny </chart>, który zawiera element podrzędny <reportElement> definiujący wymiary i położenie wykresu.

  • Element <dataset> na wykresie słupkowym musi być ujęty między elementami <categoryDataset> i </categoryDataset> JRXML.

  • <categoryDataset> musi zawierać element <categorySeries>. Ten element definiuje, jaki element danych będą reprezentować słupki (w tym przykładzie nazwy podmiotów).

  • <categoryDataset> musi również zawierać element, który określa, w jaki sposób dane zostaną podzielone na kategorie w celu porównania. Tutaj dane są oddzielone nazwami podmiotów.

  • Element <valueExpression> definiuje, jakie wyrażenie jest używane do określenia wartości każdego słupka na wykresie. Tutaj używamy „znaków”.

  • W przypadku wykresu kołowego użyliśmy elementu <pieChart> w sekcji <summary>. Zawiera element podrzędny </chart>.

  • Element podrzędny zawiera wyrażenie raportu wskazujące, czego użyć jako klucza na wykresie. Tutaj użyliśmy subjectName.

  • Element podrzędny zawiera wyrażenie używane do obliczenia wartości klucza. Tutaj użyliśmy znaków.

Kody java do wypełniania raportów pozostają niezmienione. Zawartość plikuC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java są jak podano poniżej -

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class JasperReportFill {
   @SuppressWarnings("unchecked")
   public static void main(String[] args) {
      String sourceFileName = 
         "C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";

      DataBeanList DataBeanList = new DataBeanList();
      ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();

      JRBeanCollectionDataSource beanColDataSource = new 
         JRBeanCollectionDataSource(dataList);

      Map parameters = new HashMap();

      try {
         JasperFillManager.fillReportToFile( sourceFileName,
            parameters, beanColDataSource);
      } catch (JRException e) {
         e.printStackTrace();
      }
   }
}

Ponieważ będziemy wyświetlać oceny uzyskane z każdego przedmiotu, należy zmienić POJO. PlikC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java zawartość jest taka, jak podano poniżej -

package com.tutorialspoint;

public class DataBean {
   private String subjectName;
   private Integer marks;

   public String getSubjectName() {
      return subjectName;
   }

   public void setSubjectName(String subjectName) {
      this.subjectName = subjectName;
   }

   public Integer getMarks() {
      return marks;
   }

   public void setMarks(Integer marks) {
      this.marks = marks;
   }

}

Nawet zawartość pliku C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java należy zaktualizować, jak podano poniżej -

package com.tutorialspoint;

import java.util.ArrayList;

public class DataBeanList {
   public ArrayList<DataBean> getDataBeanList() {
      ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();

      dataBeanList.add(produce("English", 58));
      dataBeanList.add(produce("SocialStudies", 68));
      dataBeanList.add(produce("Maths", 38));
      dataBeanList.add(produce("Hindi", 88));
      dataBeanList.add(produce("Scince", 78));
      
      return dataBeanList;
   }

   /*
    * This method returns a DataBean object, with subjectName ,
    * and marks set in it.
    */
   private DataBean produce(String subjectName, Integer marks) {
      DataBean dataBean = new DataBean();

      dataBean.setSubjectName(subjectName);
      dataBean.setMarks(marks);

      return dataBean;
   }
}

Generowanie raportów

Następnie skompilujmy i uruchommy powyższe pliki przy użyciu naszego zwykłego procesu kompilacji ANT. Zawartość pliku build.xml (zapisanego w katalogu C: \ tools \ jasperreports-5.0.1 \ test) jest taka, jak podano poniżej.

Plik importu - baseBuild.xml jest pobierany z rozdziału Konfiguracja środowiska i powinien być umieszczony w tym samym katalogu, co plik build.xml.

<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
   <import file = "baseBuild.xml" />
   
   <target name = "viewFillReport" depends = "compile,compilereportdesing,run"
      description = "Launches the report viewer to preview the 
      report stored in the .JRprint file.">
      
      <java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
         <arg value = "-F${file.name}.JRprint" />
         <classpath refid = "classpath" />
      </java>
   </target>
   
   <target name = "compilereportdesing" description = "Compiles the JXML file and
      produces the .jasper file.">
		
      <taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
         <classpath refid = "classpath" />
      </taskdef>
      
      <jrc destdir = ".">
         <src>
            <fileset dir = ".">
               <include name = "*.jrxml" />
            </fileset>
         </src>
			
         <classpath refid = "classpath" />
      </jrc>
   </target>

</project>

Następnie otwórzmy okno wiersza poleceń i przejdźmy do katalogu, w którym znajduje się plik build.xml. Na koniec wykonaj polecenieant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport jest domyślnym celem) w następujący sposób -

C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml

clean-sample:
   [delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint

compile:
   [mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
   [javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
   warning: 'includeantruntime' was not set, defaulting to bu
   [javac] Compiling 3 source files to C:\tools\jasperreports-5.0.1\test\classes

compilereportdesing:
   [jrc] Compiling 1 report design files.
   [jrc] log4j:WARN No appenders could be found for logger
   (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
   [jrc] log4j:WARN Please initialize the log4j system properly.
   [jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig 
      for more info.
   [jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.

run:
   [echo] Runnin class : com.tutorialspoint.JasperReportFill
   [java] log4j:WARN No appenders could be found for logger
   (net.sf.jasperreports.extensions.ExtensionsEnvironment).
   [java] log4j:WARN Please initialize the log4j system properly.

viewFillReport:
   [java] log4j:WARN No appenders could be found for logger
   (net.sf.jasperreports.extensions.ExtensionsEnvironment).
   [java] log4j:WARN Please initialize the log4j system properly.

BUILD SUCCESSFUL
Total time: 19 minutes 45 seconds

W wyniku powyższej kompilacji otworzy się okno JasperViewer, jak na poniższym ekranie -

Tutaj widzimy, że wykres słupkowy jest tworzony w nagłówku strony, a wykres kołowy jest tworzony w sekcjach podsumowania.