Advertisement
Gaudenz

JasperReportApp.java

Feb 16th, 2025
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.97 KB | None | 0 0
  1. package kotlin.GUI;
  2.  
  3. import java.awt.*;
  4. import java.io.File;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import javax.swing.*;
  8. import net.miginfocom.swing.MigLayout;
  9. import com.formdev.flatlaf.extras.FlatSVGIcon;
  10. import net.sf.jasperreports.engine.*;
  11. import net.sf.jasperreports.engine.design.JasperDesign;
  12. import net.sf.jasperreports.engine.xml.JRXmlLoader;
  13.  
  14. public class JasperReportApp {
  15.     private JFrame frame;
  16.     private JTextField incidentTypeField, dateTimeField, locationField, involvedPersonsField,
  17.                        narrativeField, actionsField, recommendationsField, reportedByField, dateReceivedField;
  18.     private File selectedTemplate, selectedImage1, selectedImage2;
  19.     private JLabel templateLabel, imageLabel1, imageLabel2;
  20.     FlatSVGIcon sagisag, logo;
  21.  
  22.     /**
  23.      * @wbp.parser.entryPoint
  24.      */
  25.     public JasperReportApp() {
  26.         frame = new JFrame("Incident Report Generator");
  27.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28.         frame.setSize(800, 600);
  29.  
  30.         // Initialize main panel with MigLayout
  31.         JPanel mainPanel = new JPanel(new MigLayout("fillx, insets 20", "[right][grow]", "[]10[]"));
  32.        
  33.         // Type of Incident
  34.         mainPanel.add(new JLabel("Type of Incident:"), "cell 0 0");
  35.         incidentTypeField = new JTextField(20);
  36.         mainPanel.add(incidentTypeField, "cell 1 0, growx, wrap");
  37.  
  38.         // Date and Time
  39.         mainPanel.add(new JLabel("Inclusive Date and Time:"), "cell 0 1");
  40.         dateTimeField = new JTextField(20);
  41.         mainPanel.add(dateTimeField, "cell 1 1, growx, wrap");
  42.  
  43.         // Location
  44.         mainPanel.add(new JLabel("Exact Location:"), "cell 0 2");
  45.         locationField = new JTextField(20);
  46.         mainPanel.add(locationField, "cell 1 2, growx, wrap");
  47.  
  48.         // Involved Persons
  49.         mainPanel.add(new JLabel("Involved Persons:"), "cell 0 3");
  50.         involvedPersonsField = new JTextField(20);
  51.         mainPanel.add(involvedPersonsField, "cell 1 3, growx, wrap");
  52.  
  53.         // Narrative Details
  54.         mainPanel.add(new JLabel("Narrative Details:"), "cell 0 4");
  55.         narrativeField = new JTextField(20);
  56.         mainPanel.add(narrativeField, "cell 1 4, growx, h 60!, wrap");
  57.  
  58.         // Actions Taken
  59.         mainPanel.add(new JLabel("Actions Taken:"), "cell 0 5");
  60.         actionsField = new JTextField(20);
  61.         mainPanel.add(actionsField, "cell 1 5, growx, h 60!, wrap");
  62.  
  63.         // Recommendations
  64.         mainPanel.add(new JLabel("Recommendations:"), "cell 0 6");
  65.         recommendationsField = new JTextField(20);
  66.         mainPanel.add(recommendationsField, "cell 1 6, growx, h 60!, wrap");
  67.  
  68.         // Reported By
  69.         mainPanel.add(new JLabel("Reported By:"), "cell 0 7");
  70.         reportedByField = new JTextField(20);
  71.         mainPanel.add(reportedByField, "cell 1 7, growx, wrap");
  72.  
  73.         // Date Received
  74.         mainPanel.add(new JLabel("Date Received:"), "cell 0 8");
  75.         dateReceivedField = new JTextField(20);
  76.         mainPanel.add(dateReceivedField, "cell 1 8, growx, wrap");
  77.  
  78.         // Template selection
  79.         JButton importTemplateButton = new JButton("Import JRXML Template");
  80.         importTemplateButton.addActionListener(e -> selectTemplate());
  81.         mainPanel.add(importTemplateButton, "cell 0 9");
  82.         templateLabel = new JLabel("No template selected");
  83.         mainPanel.add(templateLabel, "cell 1 9, wrap");
  84.  
  85.         // Logo section
  86. //       REPLACE WITH LOGO you USE
  87.         sagisag = new FlatSVGIcon("DepEd_Sagisag.svg", 0.2f);
  88.         logo = new FlatSVGIcon("DepEd_Logo.svg", 0.2f);
  89.        
  90.         JPanel logoPanel = new JPanel(new MigLayout("insets 0", "[]20[]", "[]"));
  91.         imageLabel1 = new JLabel(sagisag);
  92.         logoPanel.add(imageLabel1, "cell 0 0");
  93.  
  94.         imageLabel2 = new JLabel(logo);
  95.         logoPanel.add(imageLabel2, "cell 1 0");
  96.        
  97.         mainPanel.add(logoPanel, "cell 1 10, center, wrap");
  98.  
  99.         // Generate button
  100.         JButton generatePDFButton = new JButton("Generate PDF");
  101.         generatePDFButton.addActionListener(e -> generateReport());
  102.         mainPanel.add(generatePDFButton, "cell 1 11, right");
  103.  
  104.         // Add scroll pane
  105.         JScrollPane scrollPane = new JScrollPane(mainPanel);
  106.         scrollPane.setBorder(null);
  107.         frame.getContentPane().add(scrollPane);
  108.  
  109.         frame.setVisible(true);
  110.     }
  111.  
  112.     private void selectTemplate() {
  113.         JFileChooser fileChooser = new JFileChooser();
  114.         if (fileChooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) {
  115.             selectedTemplate = fileChooser.getSelectedFile();
  116.             templateLabel.setText("Selected: " + selectedTemplate.getAbsolutePath());
  117.         }
  118.     }
  119.  
  120.     private void generateReport() {
  121.         if (selectedTemplate == null || selectedImage1 == null || selectedImage2 == null) {
  122.             JOptionPane.showMessageDialog(frame, "Please select a template and both images.", "Error",
  123.                     JOptionPane.ERROR_MESSAGE);
  124.             return;
  125.         }
  126.         try {
  127.             JasperDesign jasperDesign = JRXmlLoader.load(selectedTemplate);
  128.             JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
  129.  
  130.             Map<String, Object> parameters = new HashMap<>();
  131.             parameters.put("TypeOfIncident", incidentTypeField.getText());
  132.             parameters.put("DateTime", dateTimeField.getText());
  133.             parameters.put("ExactLocation", locationField.getText());
  134.             parameters.put("InvolvedPersons", involvedPersonsField.getText());
  135.             parameters.put("NarrativeDetails", narrativeField.getText());
  136.             parameters.put("ActionsTaken", actionsField.getText());
  137.             parameters.put("Recommendations", recommendationsField.getText());
  138.             parameters.put("ReportedBy", reportedByField.getText());
  139.             parameters.put("DateReceived", dateReceivedField.getText());
  140.             parameters.put("DepEdSagisag", sagisag.getImage());
  141.             parameters.put("DepEdLogo", logo.getImage());
  142.  
  143.             JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
  144.  
  145.             JFileChooser fileChooser = new JFileChooser();
  146.             fileChooser.setDialogTitle("Save PDF");
  147.             if (fileChooser.showSaveDialog(frame) == JFileChooser.APPROVE_OPTION) {
  148.                 File outputFile = new File(fileChooser.getSelectedFile() + ".pdf");
  149.                 JasperExportManager.exportReportToPdfFile(jasperPrint, outputFile.getAbsolutePath());
  150.                 JOptionPane.showMessageDialog(frame, "PDF saved: " + outputFile.getAbsolutePath());
  151.             }
  152.         } catch (Exception e) {
  153.             e.printStackTrace();
  154.             JOptionPane.showMessageDialog(frame, "Error generating report: " + e.getMessage(), "Error",
  155.                     JOptionPane.ERROR_MESSAGE);
  156.         }
  157.     }
  158.  
  159.     public static void main(String[] args) {
  160.         SwingUtilities.invokeLater(JasperReportApp::new);
  161.     }
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement