สไตล์รายงาน

JasperReports มีคุณลักษณะ <style> ซึ่งช่วยในการควบคุมคุณสมบัติข้อความในเทมเพลตรายงาน องค์ประกอบนี้คือชุดของการตั้งค่าสไตล์ที่ประกาศในระดับรายงาน คุณสมบัติเช่นสีพื้นหน้าสีพื้นหลังไม่ว่าแบบอักษรจะเป็นตัวหนาตัวเอียงหรือปกติขนาดแบบอักษรเส้นขอบของแบบอักษรและคุณลักษณะอื่น ๆ อีกมากมายจะถูกควบคุมโดยองค์ประกอบ <style> สไตล์สามารถขยายสไตล์อื่น ๆ และเพิ่มหรือลบล้างคุณสมบัติของสไตล์พาเรนต์ได้เช่นกัน

คุณสมบัติสไตล์

องค์ประกอบ <style> มีหลายคุณลักษณะ บางส่วนที่ใช้บ่อยที่สุดแสดงอยู่ในตารางด้านล่าง -

ส. อบจ คุณสมบัติและคำอธิบาย
1

name

เป็นข้อบังคับ ต้องไม่ซ้ำกันเนื่องจากอ้างอิงสไตล์รายงานที่เกี่ยวข้องตลอดทั้งรายงาน

2

isDefault

ระบุว่าสไตล์นี้เป็นสไตล์เริ่มต้นของเอกสารหรือไม่

3

style

เป็นการอ้างอิงถึงสไตล์ผู้ปกครอง.

4

mode

ระบุความโปร่งใสขององค์ประกอบ ค่าที่เป็นไปได้ทึบแสงและโปร่งใส

5

forecolor

เป็นสีพื้นหน้าของวัตถุ

6

backcolor

เป็นสีพื้นหลังของวัตถุ

7

fill

กำหนดรูปแบบการเติมที่ใช้ในการเติมวัตถุ ในขณะที่ค่าเดียวที่ได้รับอนุญาตเป็นของแข็ง

6

radius

ระบุรัศมีของส่วนโค้งมุมของสี่เหลี่ยมผืนผ้า

7

scaleImage

ระบุมาตราส่วนสำหรับรูปภาพเท่านั้น ค่าที่เป็นไปได้: คลิป FillFrame, RetainShape, RealHeight,และRealSize

8

hAlign

ระบุการจัดแนวแนวนอน ค่าที่เป็นไปได้: ซ้ายกลางขวาและเป็นธรรม

9

vAlign

ระบุการจัดแนวแนวตั้ง ค่าที่เป็นไปได้: Top, กลางและล่าง

10

rotation

ระบุการหมุนขององค์ประกอบ ค่าที่เป็นไปได้: ไม่มีซ้ายขวาและกลับด้าน

11

lineSpacing

ระบุระยะห่างระหว่างบรรทัดของข้อความ ค่าที่เป็นไปได้: โสด, 1_1_2 คู่

12

markup

ระบุสไตล์มาร์กอัปสำหรับข้อความสไตล์

13

fontName

ระบุชื่อฟอนต์

14

fontSize

ระบุขนาดฟอนต์

15

isBold

ระบุว่ารูปแบบฟอนต์เป็นตัวหนาหรือไม่

16

isItalic

ระบุว่ารูปแบบฟอนต์เป็นตัวเอียงหรือไม่

17

isUnderline

ระบุว่ารูปแบบฟอนต์ถูกขีดเส้นใต้หรือไม่

18

isStrikeThrough

ระบุว่าลักษณะแบบอักษรขีดทับหรือไม่

19

pdfFontName

ระบุชื่อฟอนต์ PDF ที่เกี่ยวข้อง

20

pdfEncoding

ระบุการเข้ารหัสอักขระสำหรับรูปแบบเอาต์พุต PDF

22

isPdfEmbedded

ระบุว่าฟอนต์ PDF ฝังอยู่หรือไม่

23

pattern

ระบุรูปแบบรูปแบบสำหรับข้อความที่จัดรูปแบบ

24

isBlankWhenNull

ระบุว่าควรแสดงสตริงว่าง (ช่องว่าง) หรือไม่หากนิพจน์ประเมินว่าเป็นโมฆะ

รูปแบบตามเงื่อนไข

ในบางสถานการณ์ควรใช้สไตล์เฉพาะเมื่อตรงตามเงื่อนไขบางประการเท่านั้น (ตัวอย่างเช่นเพื่อสลับสีแถวที่อยู่ติดกันในส่วนรายละเอียดรายงาน) สิ่งนี้สามารถทำได้โดยใช้รูปแบบเงื่อนไข

รูปแบบเงื่อนไขมีสององค์ประกอบ -

  • นิพจน์เงื่อนไขบูลีน
  • สไตล์

รูปแบบที่ใช้เฉพาะกรณีสภาพประเมินไปจริง

การนำสไตล์ไปใช้กับองค์ประกอบรายงาน

องค์ประกอบรายงานทุกประเภทสามารถอ้างอิงข้อกำหนดสไตล์รายงานโดยใช้แอตทริบิวต์ style ดังนั้นคุณสมบัติของสไตล์ทั้งหมดที่ประกาศโดยนิยามสไตล์ที่ใช้ได้กับองค์ประกอบปัจจุบันจะได้รับการสืบทอด หากต้องการลบล้างค่าที่สืบทอดมาสามารถใช้คุณสมบัติสไตล์ที่ระบุในระดับองค์ประกอบรายงานได้

เทมเพลตสไตล์

เราสามารถสร้างชุดรายงานที่มีรูปลักษณ์ร่วมกันได้โดยกำหนดรูปแบบในสถานที่ทั่วไป จากนั้นเทมเพลตลักษณะทั่วไปนี้สามารถอ้างอิงได้โดยเทมเพลตรายงาน เทมเพลตสไตล์คือไฟล์ XML ที่มีคำจำกัดความของสไตล์อย่างน้อยหนึ่งรายการ ไฟล์เทมเพลตสไตล์ที่ใช้โดยรูปแบบ*.jrtx ส่วนขยาย แต่ไม่บังคับ

เทมเพลตสไตล์ประกอบด้วยองค์ประกอบต่อไปนี้ -

  • <jasperTemplate> - นี่คือองค์ประกอบหลักของไฟล์เทมเพลตสไตล์

  • <template> - องค์ประกอบนี้ใช้เพื่อรวมการอ้างอิงไปยังไฟล์เทมเพลตอื่น ๆ เนื้อหาขององค์ประกอบนี้ถูกตีความว่าเป็นตำแหน่งของไฟล์เทมเพลตที่อ้างถึง

  • <style> - องค์ประกอบนี้เหมือนกับองค์ประกอบที่มีชื่อเดียวกันจากเทมเพลตการออกแบบรายงาน (ไฟล์ JRXML) ยกเว้นว่าสไตล์ในเทมเพลตสไตล์ไม่สามารถมีสไตล์ตามเงื่อนไขได้ ข้อ จำกัด นี้เกิดจากข้อเท็จจริงที่ว่าสไตล์ตามเงื่อนไขเกี่ยวข้องกับนิพจน์รายงานและนิพจน์สามารถตีความได้ในบริบทของข้อกำหนดรายงานเดียวเท่านั้น

การอ้างอิงถึงเทมเพลตสไตล์จะรวมอยู่ในรายงาน JRXML เป็นองค์ประกอบ <template> เทมเพลตสไตล์จะโหลดในเวลาเติมรายงานและการอ้างอิงชื่อสไตล์จะได้รับการแก้ไขเมื่อโหลดเทมเพลตทั้งหมดแล้ว เมื่อโหลดเทมเพลตสไตล์และแก้ไขชื่อสไตล์เป็นสไตล์จะมีการสร้างแผนภูมิต้นไม้ / กราฟของเทมเพลตลักษณะโดยด้านบนของแผนภูมิจะเป็นชุดของสไตล์ที่กำหนดไว้ในรายงาน บนแผนภูมินี้การอ้างอิงชื่อสไตล์จะได้รับการแก้ไขเป็นสไตล์สุดท้ายที่ตรงกับชื่อในการข้ามผ่านเชิงลึกก่อน

ตัวอย่าง

มาลองใช้สไตล์ตามเงื่อนไขและเทมเพลตสไตล์กัน มาเพิ่ม <style> องค์ประกอบ alternateStyleไปยังเทมเพลตรายงานที่มีอยู่ของเรา (การออกแบบรายงานบท) ตามเงื่อนไขสีแบบอักษรจะเปลี่ยนเป็นสีน้ำเงินสำหรับการนับคู่ เราได้รวมเทมเพลตสไตล์ไว้ด้วย"styles.jrtx". เทมเพลตรายงานที่แก้ไขแล้ว (jasper_report_template.jrxml) มีดังนี้ บันทึกลงในไดเร็กทอรี C: \ tools \ jasperreports-5.0.1 \ test -

<?xml version = "1.0"?>
<!DOCTYPE jasperReport PUBLIC
   "//JasperReports//DTD Report Design//EN"
   "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<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 = "842" columnWidth = "515"
   leftMargin = "40" rightMargin = "40" topMargin = "50" bottomMargin = "50">
	
   <template>"styles.jrtx"</template>
   
   <style name = "alternateStyle" fontName = "Arial" forecolor = "red">
      <conditionalStyle>
         <conditionExpression>
            <![CDATA[new Boolean($V{countNumber}.intValue() % 2 == 0)]]>
         </conditionExpression>
			
         <style forecolor = "blue" isBold = "true"/>
      </conditionalStyle>
   </style>
   
   <parameter name = "ReportTitle" class = "java.lang.String"/>
   <parameter name = "Author" class = "java.lang.String"/>

   <queryString>
      <![CDATA[]]>
   </queryString>

   <field name = "country" class = "java.lang.String">
      <fieldDescription><![CDATA[country]]></fieldDescription>
   </field>

   <field name = "name" class = "java.lang.String">
      <fieldDescription><![CDATA[name]]></fieldDescription>
   </field>

   <variable name = "countNumber" class = "java.lang.Integer" calculation = "Count">
      <variableExpression><![CDATA[Boolean.TRUE]]></variableExpression>
   </variable>

   <title>
      <band height = "70">
         
         <line>
            <reportElement x = "0" y = "0" width = "515" height = "1"/>
         </line>
         
         <textField isBlankWhenNull = "true" bookmarkLevel = "1">
            <reportElement x = "0" y = "10" width = "515" height = "30"/>
				
            <textElement textAlignment = "Center">
               <font size = "22"/>
            </textElement>
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$P{ReportTitle}]]>
            </textFieldExpression>
            
            <anchorNameExpression><![CDATA["Title"]]></anchorNameExpression>
         </textField>

         <textField isBlankWhenNull = "true">
            <reportElement  x = "0" y = "40" width = "515" height = "20"/>
            
            <textElement textAlignment = "Center">
               <font size = "10"/>
            </textElement>
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$P{Author}]]>
            </textFieldExpression>
				
         </textField>
      
      </band>
   </title>

   <columnHeader>
      <band height = "23">
         
         <staticText>
            <reportElement mode = "Opaque" x = "0" y = "3" 
               width = "535" height = "15" backcolor = "#70A9A9" />
            
            <box>
               <bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
            </box>
				
            <textElement />
				
            <text>
               <![CDATA[]]>
            </text>
				
         </staticText>
         
         <staticText>
            <reportElement x = "414" y = "3" width = "121" height = "15" />
            
            <textElement textAlignment = "Center" verticalAlignment = "Middle">
               <font isBold = "true" />
            </textElement>
				
            <text><![CDATA[Country]]></text>
         </staticText>
         
         <staticText>
            <reportElement x = "0" y = "3" width = "136" height = "15" />
            
            <textElement textAlignment = "Center" verticalAlignment = "Middle">
               <font isBold = "true" />
            </textElement>
				
            <text><![CDATA[Name]]></text>
         </staticText>
      
      </band>
   </columnHeader>

   <detail>
      <band height = "16">
         
         <staticText>
            <reportElement mode = "Opaque" x = "0" y = "0" 
               width = "535" height = "14" backcolor = "#E5ECF9" />
            
            <box>
               <bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
            </box>
            
            <textElement />
				
            <text>
               <![CDATA[]]>
            </text>
				
         </staticText>
         
         <textField>
            <reportElement style = "alternateStyle" x = "414" y = "0" 
               width = "121" height = "15" />
            
            <textElement textAlignment = "Center" verticalAlignment = "Middle">
               <font size = "9" />
            </textElement>
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$F{country}]]>
            </textFieldExpression>
         </textField>
         
         <textField>
            <reportElement x = "0" y = "0" width = "136" height = "15" 
               style = "Strong"/>
            <textElement textAlignment = "Center" verticalAlignment = "Middle" />
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$F{name}]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </detail>

</jasperReport>

เนื้อหาของเทมเพลตสไตล์ styles.jrtxมีรายละเอียดดังนี้. บันทึกลงในไดเร็กทอรี C: \ tools \ jasperreports-5.0.1 \ test

<?xml version = "1.0"?>

<!DOCTYPE jasperTemplate PUBLIC "-//JasperReports//DTD Template//EN"
  "http://jasperreports.sourceforge.net/dtds/jaspertemplate.dtd">

<jasperTemplate>
   <style name = "Strong" isBold = "true" pdfFontName = "Helvetica-Bold" 
      backcolor = "lightGray forecolor = "green"/>
</jasperTemplate>

รหัส java สำหรับการกรอกรายงานยังคงไม่เปลี่ยนแปลง เนื้อหาของไฟล์C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java มีดังต่อไปนี้ -

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();
      /**
       * Passing ReportTitle and Author as parameters
       */
      parameters.put("ReportTitle", "List of Contacts");
      parameters.put("Author", "Prepared By Manisha");

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

เนื้อหาของไฟล์ POJO C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java มีดังต่อไปนี้ -

package com.tutorialspoint;

public class DataBean {
   private String name;
   private String country;

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public String getCountry() {
      return country;
   }

   public void setCountry(String country) {
      this.country = country;
   }
}

เนื้อหาของไฟล์ C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java มีดังต่อไปนี้ -

package com.tutorialspoint;

import java.util.ArrayList;

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

      dataBeanList.add(produce("Manisha", "India"));
      dataBeanList.add(produce("Dennis Ritchie", "USA"));
      dataBeanList.add(produce("V.Anand", "India"));
      dataBeanList.add(produce("Shrinath", "California"));

      return dataBeanList;
   }

   /**
    * This method returns a DataBean object,
    * with name and country set in it.
    */
   private DataBean produce(String name, String country) {
      DataBean dataBean = new DataBean();
      dataBean.setName(name);
      dataBean.setCountry(country);
      
      return dataBean;
   }
}

การสร้างรายงาน

เราจะรวบรวมและเรียกใช้ไฟล์ข้างต้นโดยใช้กระบวนการสร้าง ANT ปกติของเรา เนื้อหาของไฟล์ build.xml (บันทึกภายใต้ไดเร็กทอรี C: \ tools \ jasperreports-5.0.1 \ test) มีดังต่อไปนี้

ไฟล์อิมพอร์ต - baseBuild.xml ถูกเลือกจากบทEnvironment Setupและควรอยู่ในไดเร็กทอรีเดียวกับ 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>

ต่อไปให้เปิดหน้าต่างบรรทัดคำสั่งและไปที่ไดเร็กทอรีที่วาง build.xml สุดท้ายรันคำสั่งant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport เป็นเป้าหมายเริ่มต้น) เป็น -

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 build.sysclasspath=last;
   set to false for repeatable builds
   [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.

จากการรวบรวมข้างต้นหน้าต่าง JasperViewer จะเปิดขึ้นตามที่แสดงในหน้าจอด้านล่าง -

ที่นี่เราจะเห็นว่าสีของแบบอักษรเปลี่ยนเป็นสีน้ำเงินสำหรับการนับคู่ (ในประเทศของคอลัมน์) ในชื่อคอลัมน์สีฟอนต์จะเปลี่ยนเป็นสีเขียว (สไตล์นี้อ้างอิงจากเทมเพลตสไตล์)