ג'ספר מדווח עם אביב

1. סקירה כללית

JasperReports היא ספריית דיווחים קוד פתוח המאפשרת למשתמשים ליצור דוחות מושלמים לפיקסלים שניתן להדפיס או לייצא בפורמטים רבים כולל PDF, HTML ו- XLS.

במאמר זה נחקור את התכונות והשיעורים העיקריים שלו וניישם דוגמאות כדי להציג את יכולותיו.

2. תלות של Maven

ראשית, עלינו להוסיף את דוחות ג'ספר תלות שלנו pom.xml:

 net.sf.jasperreports jasperreports 6.4.0 

הגרסה האחרונה של חפץ זה נמצאת כאן.

3. תבניות דוחות

עיצובי דוחות מוגדרים בקבצי JRXML. אלה קבצי XML רגילים עם מבנה מסוים שמנוע JasperReports יכול לפרש.

בואו נסתכל רק על המבנה הרלוונטי של קבצי JRXML - כדי להבין טוב יותר את חלק ה- Java בתהליך הפקת הדוחות, שהוא המוקד העיקרי שלנו.

בואו ניצור דוח פשוט כדי להציג מידע על העובדים:

3.1. גיבוש דוחות

יש לאסוף קבצי JRXML כדי שמנוע הדוחות יוכל למלא אותם בנתונים.

בואו נבצע פעולה זו בעזרת ה- JasperCompilerManager מעמד:

InputStream employeeReportStream = getClass (). GetResourceAsStream ("/ employeeReport.jrxml"); JasperReport jasperReport = JasperCompileManager.compileReport (employeeReportStream);

כדי למנוע קומפילציה בכל פעם, אנו יכולים לשמור אותו בקובץ:

JRSaver.saveObject (jasperReport, "employeeReport.jasper");

4. אוכלוסייה דיווחים

הדרך הנפוצה ביותר למלא דוחות מקובלים היא באמצעות רשומות ממסד נתונים. זה מחייב את הדוח להכיל שאילתת SQL שהמנוע יבצע כדי להשיג את הנתונים.

ראשית, בואו לשנות את הדוח שלנו כדי להוסיף שאילתת SQL:

    ... 

עכשיו בואו ניצור מקור נתונים פשוט:

@Bean DataSource ציבורי dataSource () {להחזיר EmbeddedDatabaseBuilder חדש () .setType (EmbeddedDatabaseType.HSQL) .addScript ("classpath: עובד-schema.sql") .build (); }

כעת נוכל למלא את הדוח:

JasperPrint jasperPrint = JasperFillManager.fillReport (jasperReport, null, dataSource.getConnection ());

שימו לב שאנחנו עוברים ריק לטיעון השני מכיוון שהדוח שלנו עדיין לא מקבל פרמטרים.

4.1. פרמטרים

פרמטרים שימושיים להעברת נתונים למנוע הדו"ח שהוא לא יכול למצוא במקור הנתונים שלו או כאשר הנתונים משתנים בהתאם לתנאי זמן ריצה שונים.

אנו יכולים גם לשנות חלקים או אפילו את כל שאילתת SQL עם פרמטרים שהתקבלו בפעולת מילוי הדוחות.

ראשית, בואו ונשתנה את הדוח כך שיקבל שלושה פרמטרים:

       // ... 

עכשיו, בואו להוסיף קטע כותרת כדי להציג את כותרת פָּרָמֶטֶר:

 // ...           ... 

לאחר מכן, בואו לשנות את השאילתה לשימוש ב- minSalary ו מַצָב פרמטרים:

בחר * מהעובד היכן שמשכורת> = $ P {minSalary} ו- $ P! {Condition}

שימו לב לתחביר השונה בעת השימוש ב- מַצָב פָּרָמֶטֶר. זה אומר למנוע כי אין להשתמש בפרמטר כסטנדרט הצהרה מוכנה פרמטר, אך כאילו הערך של פרמטר זה היה נכתב במקור בשאילתת SQL.

לסיום, בואו נכין את הפרמטרים ונמלא את הדוח:

פרמטרים של מפה = HashMap חדש (); parameters.put ("כותרת", "דוח עובדים"); parameters.put ("minSalary", 15000.0); parameters.put ("condition", "LAST_NAME = 'Smith' ORDER BY FIRST_NAME"); JasperPrint jasperPrint = JasperFillManager.fillReport (..., פרמטרים, ...);

שים לב שהמפתחות של פרמטרים תואמים לשמות פרמטרים בדוח. אם המנוע מגלה שחסר פרמטר, הוא יקבל את הערך מ- defaultValueExpression של הפרמטר אם יש.

5. ייצוא

כדי לייצא דוח, ראשית, אנו מייצרים אובייקט של מחלקת יצואן התואם לפורמט הקובץ הדרוש לנו.

לאחר מכן, הגדרנו את הדוח הקודם שלנו כמילוי והגדר היכן להפיק את הקובץ שהתקבל.

אופציונלי, אנו יכולים להגדיר אובייקטים של דוחות וייצוא מתאימים להתאמה אישית של תהליך הייצוא.

5.1. PDF

יצואן JRPdfExporter = חדש JRPdfExporter (); exporter.setExporterInput (SimpleExporterInput חדש (jasperPrint)); exporter.setExporterOutput (SimpleOutputStreamExporterOutput חדש ("עובדReport.pdf")); SimplePdfReportConfiguration reportConfig = SimplePdfReportConfiguration חדש (); reportConfig.setSizePageToContent (נכון); reportConfig.setForceLineBreakPolicy (false); SimplePdfExporterConfiguration exportConfig = חדש SimplePdfExporterConfiguration (); exportConfig.setMetadataAuthor ("baeldung"); exportConfig.setEncrypted (true); exportConfig.setAllowedPermissionsHint ("הדפסה"); exporter.setConfiguration (reportConfig); exporter.setConfiguration (exportConfig); exporter.exportReport ();

5.2. XLS

יצואן JRXlsxExporter = חדש JRXlsxExporter (); // הגדר קלט ופלט ... SimpleXlsxReportConfiguration reportConfig = SimpleXlsxReportConfiguration חדש (); reportConfig.setSheetNames (מחרוזת חדשה [] {"נתוני עובדים"}); exporter.setConfiguration (reportConfig); exporter.exportReport ();

5.3. CSV

יצואן JRCsvExporter = חדש JRCsvExporter (); // הגדר קלט ... exporter.setExporterOutput (SimpleWriterExporterOutput חדש ("employeeReport.csv")); exporter.exportReport ();

5.4. HTML

יצואנית HtmlExporter = HtmlExporter חדש (); // הגדר קלט ... exporter.setExporterOutput (חדש SimpleHtmlExporterOutput ("עובדאריך.הטמל")); exporter.exportReport ();

6. דוחות משנה

דו"חות המשנה אינם אלא דוח רגיל המוטמע בדו"ח אחר.

ראשית, בואו ניצור דוח שיציג את הודעות הדוא"ל של עובד:

כעת, בואו ונשתנה את דוח העובדים כך שיכלול את הדו"ח הקודם:

שים לב כי אנו מתייחסים לדיווח המשנה לפי שם הקובץ המחובר ומעבירים אותו ל- עובד עובד וחיבור הדו"ח הנוכחי כפרמטרים.

לאחר מכן, בואו נערך את שני הדוחות:

InputStream employeeReportStream = getClass (). GetResourceAsStream ("/ employeeReport.jrxml"); JasperReport jasperReport = JasperCompileManager.compileReport (employeeReportStream); JRSaver.saveObject (jasperReport, "employeeReport.jasper"); InputStream emailReportStream = getClass (). GetResourceAsStream ("/ employeeEmailReport.jrxml"); JRSaver.saveObject (JasperCompileManager.compileReport (emailReportStream), "employeeEmailReport.jasper");

הקוד שלנו למילוי וייצוא של הדוח אינו דורש שינויים.

7. מסקנה

במאמר זה התבוננו בקצרה בתכונות הליבה של ספריית JasperReports.

הצלחנו לאסוף ולאכלס דוחות עם רשומות ממסד נתונים; העברנו פרמטרים לשינוי הנתונים המוצגים בדוח על פי תנאי זמן ריצה שונים, טבענו דו"חות משנה וייצאנו לפורמטים הנפוצים ביותר.

קוד המקור השלם למאמר זה ניתן למצוא באתר GitHub.