打印带有Scrollable Jtable的JPanel

时间:2015-12-04 10:38:53

标签: java swing jpanel

我只想打印一张JPanel,其上有一个可滚动的JTable

我已将JPanelJTable对齐。但我只能打印可见区域。

不会打印可滚动JTable区域中的内容。

2 个答案:

答案 0 :(得分:2)

我建议使用像Jasper Reports这样的东西是有原因的,这已经花费了两天的时间。 JTable并不喜欢这样对待。

基本上,有一个" UI视图",它显示屏幕上的数据和"打印视图"用于生成打印输出。

UI视图...

UI View

打印视图......

Print View

这个例子,在A4纸上,将生成22页......

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.DialogTypeSelection;
import javax.print.attribute.standard.Media;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.PrinterResolution;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableModel;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            DefaultTableModel model = new DefaultTableModel();
            int columnCount = 10;
            for (int index = 0; index < columnCount; index++) {
                model.addColumn((char) ('A' + index));
            }
            for (int row = 0; row < 1000; row++) {
                Object[] data = new Object[columnCount];
                for (int col = 0; col < columnCount; col++) {
                    data[col] = row + "x" + col;
                }
                model.addRow(data);
            }

            setLayout(new BorderLayout());
            JTable table = new JTable(model);
            add(new JScrollPane(table));
            JButton print = new JButton("Print");
            add(print, BorderLayout.SOUTH);
            print.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        PrintPane printPane = new PrintPane(model);

                        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
                        aset.add(MediaSizeName.ISO_A4);
                        aset.add(new PrinterResolution(300, 300, PrinterResolution.DPI));
                        aset.add(DialogTypeSelection.NATIVE);

                        PrinterJob pj = PrinterJob.getPrinterJob();
                        pj.setPrintable(printPane);

                        PageFormat pf = pj.defaultPage();
                        pf.setOrientation(PageFormat.LANDSCAPE);

                        if (pj.printDialog(aset)) {
                            try {
                                pj.print(aset);
                            } catch (PrinterException ex) {
                                ex.printStackTrace();
                            }
                        }
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }

                }
            });
        }

    }

    public class PrintPane extends JPanel implements Printable {

        private JTable table;

        public PrintPane(TableModel model) throws IOException {
            setLayout(new GridBagLayout());
            BufferedImage logo = ImageIO.read(...);
            JLabel header = new JLabel("Honest Bob's Used Ponys", new ImageIcon(logo), JLabel.LEFT);
            header.setFont(header.getFont().deriveFont(Font.BOLD, 24f));
            header.setVerticalAlignment(JLabel.TOP);

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.weightx = 1;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.fill = GridBagConstraints.HORIZONTAL;

            add(header, gbc);

            table = new JTable(model);
            JTableHeader tableHeader = table.getTableHeader();
            gbc.gridy++;
            add(tableHeader, gbc);

            gbc.gridy++;
            gbc.fill = GridBagConstraints.BOTH;
            add(new JTable(model), gbc);
            setBackground(Color.WHITE);
        }

        private int lastPage = 0;
        private double yOffset;

        @Override
        public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
            int result = NO_SUCH_PAGE;

            String name = "I be mighty!";
            String page = Integer.toString(pageIndex);

            double height = pageFormat.getImageableHeight();
            double width = pageFormat.getImageableWidth();

            System.out.println("Page = " + width + "x" + height);

            JTableHeader tableHeader = table.getTableHeader();
            Dimension size = tableHeader.getPreferredSize();
            tableHeader.setPreferredSize(new Dimension((int) width, size.height));
            tableHeader.setSize(table.getPreferredSize());

            size = table.getPreferredSize();
            table.setPreferredSize(new Dimension((int) width, size.height));
            table.setSize(table.getPreferredSize());

            size = getPreferredSize();
            setSize((int)width, size.height);
            invalidate();
            doLayout();

            table.doLayout();
            tableHeader.doLayout();

            if (lastPage != pageIndex) {
                lastPage = pageIndex;
                yOffset = height * pageIndex;
                if (yOffset > getHeight()) {
                    yOffset = -1;
                }
            }

            if (yOffset >= 0) {
                Graphics2D g2d = (Graphics2D) graphics.create();

                g2d.translate((int) pageFormat.getImageableX(),
                        (int) pageFormat.getImageableY());

                g2d.translate(0, -yOffset);
                printAll(g2d);

                g2d.dispose();

                result = PAGE_EXISTS;
                System.out.println("Print page " + pageIndex);
            }
            return result;
        }

    }
}

有一个重要问题,一行可能会分成两页。这将要求您能够计算适合页面的行数并相应地剪切Graphics,但是我会留给您弄清楚

答案 1 :(得分:1)

nb:这个答案基本上延伸到了以前的答案,但不适合其他答案

使用Jasper报告的示例

JasperReports是时间的投资。虽然学习曲线可能很陡峭,但一旦你开始了解它,它就非常非常灵活。我们使用必须为我们的项目必须导出的每个报告(包括UI)编写不少于3个导出,现在,我们编写一个并导出为PDF,打印机,excel(和word,html)。当您想要更改报告(即添加页面编号)时,它会改变一个地方并且代码基本保持不变

您还需要

Jasper Reports

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.PrinterResolution;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPrintServiceExporter;
import net.sf.jasperreports.engine.fill.AsynchronousFillHandle;
import net.sf.jasperreports.engine.fill.AsynchronousFilllListener;
import net.sf.jasperreports.engine.fill.FillListener;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimplePrintServiceExporterConfiguration;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            DefaultTableModel model = new DefaultTableModel();
            int columnCount = 10;
            for (int index = 0; index < columnCount; index++) {
                model.addColumn((char) ('A' + index));
            }
            for (int row = 0; row < 1000; row++) {
                Object[] data = new Object[columnCount];
                for (int col = 0; col < columnCount; col++) {
                    data[col] = row + "x" + col;
                }
                model.addRow(data);
            }

            setLayout(new BorderLayout());
            JTable table = new JTable(model);
            add(new JScrollPane(table));
            JButton print = new JButton("Print");
            add(print, BorderLayout.SOUTH);
            print.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    List<ReportData> data = new ArrayList<>(model.getRowCount());
                    for (int row = 0; row < model.getRowCount(); row++) {
                        ReportData reportData = new ReportData();
                        for (int col = 0; col < model.getColumnCount(); col++) {
                            reportData.add((String) model.getValueAt(row, col));
                        }
                        data.add(reportData);
                    }

                    JDialog dialog = new JDialog(SwingUtilities.windowForComponent(TestPane.this), "Generating Report");
                    dialog.setModal(true);
                    dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
                    JPanel panel = new JPanel(new BorderLayout());
                    panel.setBorder(new EmptyBorder(20, 20, 20, 20));
                    dialog.setContentPane(panel);
                    dialog.add(new JLabel("Please wait..."));
                    dialog.pack();

                    PrintWorker printWorker = new PrintWorker(data);
                    printWorker.addPropertyChangeListener(new PropertyChangeListener() {
                        @Override
                        public void propertyChange(PropertyChangeEvent evt) {
                            PrintWorker worker = (PrintWorker) evt.getSource();
                            String name = evt.getPropertyName();
                            if ("state".equalsIgnoreCase(name)) {
                                if (worker.isDone()) {
                                    dialog.setVisible(false);

                                    try {
                                        worker.get();
                                    } catch (InterruptedException | ExecutionException ex) {
                                        ex.printStackTrace();
                                    }
                                }
                            } else if ("status".equalsIgnoreCase(name)) {
                                ReportStatus status = worker.getStatus();
                                switch (status) {
                                    case FAILED:
                                        dialog.setVisible(false);
                                        JOptionPane.showMessageDialog(TestPane.this, "Report Generation Failed", "Error", JOptionPane.ERROR_MESSAGE);
                                        break;
                                    case CANCELLED:
                                        dialog.setVisible(false);
                                        JOptionPane.showMessageDialog(TestPane.this, "Report Generation was Cancelled", "Warning", JOptionPane.WARNING_MESSAGE);
                                        break;
                                    case COMPLETED:
                                        dialog.setVisible(false);
                                        System.out.println("Yippe :)");
                                        JasperPrint jp = worker.getJasperPrint();
                                        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
                                        aset.add(new PrinterResolution(300, 300, PrinterResolution.DPI));
                                        aset.add(MediaSizeName.ISO_A4);

                                        JRPrintServiceExporter printer = new JRPrintServiceExporter();
                                        printer.setExporterInput(new SimpleExporterInput(jp));

                                        SimplePrintServiceExporterConfiguration configuration = new SimplePrintServiceExporterConfiguration();
                                        configuration.setPrintRequestAttributeSet(aset);
                                        configuration.setDisplayPageDialog(false);
                                        configuration.setDisplayPrintDialog(true);
                                        printer.setConfiguration(configuration);

                                        try {
                                            printer.exportReport();
                                        } catch (JRException ex) {
                                            ex.printStackTrace();
                                        }
                                        break;
                                }
                            }
                        }
                    });
                    printWorker.execute();

                    dialog.setLocationRelativeTo(TestPane.this);
                    dialog.setVisible(true);
                }
            });
        }

    }

    public class ReportData {
        private List<String> data = new ArrayList<>(25);

        public List<String> getData() {
            return data;
        }

        public void add(String value) {
            data.add(value);
        }

    }

    public enum ReportStatus {
        FAILED, COMPLETED, CANCELLED;
    }

    public static class PrintWorker extends SwingWorker<ReportStatus, Void> {

        private List<ReportData> data;
        private ReportStatus status = ReportStatus.FAILED;
        private JasperPrint jasperPrint;

        private ReentrantLock waitLock = new ReentrantLock();
        private Condition waitCon = waitLock.newCondition();

        public PrintWorker(List<ReportData> data) {
            this.data = data;
        }

        public ReportStatus getStatus() {
            return status;
        }

        public JasperPrint getJasperPrint() {
            return jasperPrint;
        }

        @Override
        protected ReportStatus doInBackground() throws Exception {
            try (InputStream is = getClass().getResourceAsStream("/test/reports/SalesReport.jasper")) {

                JasperReport report = (JasperReport) JRLoader.loadObject(is);

                Map<String, Object> mapParameters = new HashMap<>(5);
                BufferedImage img = ImageIO.read(getClass().getResource("/test/images/Logo.png"));
                mapParameters.put("LOGO", img);

                AsynchronousFillHandle handler = AsynchronousFillHandle.createHandle(report, mapParameters, new JRBeanCollectionDataSource(data));
                handler.addFillListener(new FillListener() {

                    @Override
                    public void pageGenerated(JasperPrint jp, int i) {
                        System.out.println("Page Generated " + i);
                    }

                    @Override
                    public void pageUpdated(JasperPrint jp, int i) {
                        System.out.println("Page Update " + i);
                    }

                });
                handler.addListener(new AsynchronousFilllListener() {

                    @Override
                    public void reportFinished(final JasperPrint jp) {
                        System.out.println("Finished...");
                        status = ReportStatus.COMPLETED;
                        jasperPrint = jp;
                        firePropertyChange("status", null, status);
                        waitLock.lock();
                        try {
                            waitCon.signalAll();
                        } finally {
                            waitLock.unlock();
                        }
                    }

                    @Override
                    public void reportCancelled() {
                        System.out.println("Cancelled...");
                        status = ReportStatus.CANCELLED;
                        firePropertyChange("status", null, status);
                        waitLock.lock();
                        try {
                            waitCon.signalAll();
                        } finally {
                            waitLock.unlock();
                        }
                    }

                    @Override
                    public void reportFillError(Throwable thrwbl) {
                        System.out.println("Failed...");
                        status = ReportStatus.FAILED;
                        firePropertyChange("status", null, status);

                        thrwbl.printStackTrace();

                        waitLock.lock();
                        try {
                            waitCon.signalAll();
                        } finally {
                            waitLock.unlock();
                        }
                    }
                });
                handler.startFill();

            }

            waitLock.lock();
            try {
                waitCon.await();
            } finally {
                waitLock.unlock();
            }

            System.out.println("All done here");
            return status;
        }

    }
}

JasperReport jxml

现在,在我使用JasperReports的3 - 4年里,我从未手动编写jxml,我总是使用表单编辑器,但是,这样你就可以粘贴这个在...

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.1.1.final using JasperReports Library version 6.1.1  -->
<!-- 2015-12-08T11:39:14 -->
<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="SalesReport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="3d6825b2-df5d-47ee-a901-26f4c5fa3429">
    <parameter name="LOGO" class="java.awt.Image" isForPrompting="false"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="data" class="java.util.List"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="107" splitType="Stretch">
            <image hAlign="Center" vAlign="Middle">
                <reportElement key="" x="0" y="0" width="100" height="100" uuid="3d8b698a-aaa1-45d4-b979-2c2f70ab3858">
                    <property name="local_mesure_unitwidth" value="cm"/>
                    <property name="local_mesure_unitheight" value="cm"/>
                </reportElement>
                <imageExpression><![CDATA[$P{LOGO}]]></imageExpression>
            </image>
            <staticText>
                <reportElement x="105" y="0" width="450" height="100" uuid="eb5d50a7-5931-4473-b2e5-56766c4263d6"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="Calibri" size="36" isBold="true"/>
                </textElement>
                <text><![CDATA[Honest Bob's Used Ponies]]></text>
            </staticText>
        </band>
    </title>
    <columnHeader>
        <band height="36" splitType="Stretch">
            <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.HorizontalRowLayout"/>
            <staticText>
                <reportElement x="0" y="0" width="60" height="36" uuid="e30efc2e-843d-4c1e-b28a-760ac3166e75">
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                </reportElement>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Calibri" size="12"/>
                </textElement>
                <text><![CDATA[A]]></text>
            </staticText>
            <staticText>
                <reportElement x="60" y="0" width="55" height="36" uuid="761a067d-03b3-4e91-92af-08e1ea4d03dd">
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                </reportElement>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Calibri" size="12"/>
                </textElement>
                <text><![CDATA[B]]></text>
            </staticText>
            <staticText>
                <reportElement x="115" y="0" width="55" height="36" uuid="1b753893-a380-4a77-8938-3dcea6486383">
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                </reportElement>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Calibri" size="12"/>
                </textElement>
                <text><![CDATA[C]]></text>
            </staticText>
            <staticText>
                <reportElement x="170" y="0" width="55" height="36" uuid="c46b1125-8c9c-4768-9267-75c87bf2c7c3">
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                </reportElement>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Calibri" size="12"/>
                </textElement>
                <text><![CDATA[D]]></text>
            </staticText>
            <staticText>
                <reportElement x="225" y="0" width="55" height="36" uuid="dfe91e74-f722-43cf-9a34-a4cd0ca202a1">
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                </reportElement>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Calibri" size="12"/>
                </textElement>
                <text><![CDATA[E]]></text>
            </staticText>
            <staticText>
                <reportElement x="280" y="0" width="55" height="36" uuid="e5504504-c5a5-4c36-a3a0-3702cc52609c">
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                </reportElement>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Calibri" size="12"/>
                </textElement>
                <text><![CDATA[F]]></text>
            </staticText>
            <staticText>
                <reportElement x="335" y="0" width="55" height="36" uuid="c9e49d80-fc80-4f64-ae43-9ac4da4a3fda">
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                </reportElement>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Calibri" size="12"/>
                </textElement>
                <text><![CDATA[G]]></text>
            </staticText>
            <staticText>
                <reportElement x="390" y="0" width="55" height="36" uuid="9ad6dcae-605d-47e8-bdee-e230dea5970c">
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                </reportElement>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Calibri" size="12"/>
                </textElement>
                <text><![CDATA[H]]></text>
            </staticText>
            <staticText>
                <reportElement x="445" y="0" width="55" height="36" uuid="9ed989a1-d8fa-45d4-812b-42ed4de292b0">
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                </reportElement>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Calibri" size="12"/>
                </textElement>
                <text><![CDATA[I]]></text>
            </staticText>
            <staticText>
                <reportElement x="500" y="0" width="55" height="36" uuid="ba50fbea-9323-4c5d-814c-356d1752ecd6">
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                </reportElement>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Calibri" size="12"/>
                </textElement>
                <text><![CDATA[J]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="16" splitType="Stretch">
            <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
            <textField>
                <reportElement x="0" y="0" width="60" height="16" uuid="d3d12d31-bce2-4850-8c68-4ca336869302"/>
                <box>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement>
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{data}.get(0)]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="60" y="0" width="55" height="16" uuid="c30464ca-c723-4378-abf0-0c1e9d282a14"/>
                <box>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement>
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{data}.get(1)]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="115" y="0" width="55" height="16" uuid="7451163c-37da-48fa-aa42-b62e7e81bb3c"/>
                <box>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement>
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{data}.get(2)]]></textFieldExpression>
            </textField>
            <textField pattern="">
                <reportElement x="170" y="0" width="55" height="16" uuid="4038f5d0-bfc5-475c-91cd-103e0dee7cf9"/>
                <box>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement>
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{data}.get(3)]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="225" y="0" width="55" height="16" uuid="f7369acd-ad91-4170-ac4f-b46a888666e1"/>
                <box>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement>
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{data}.get(4)]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="280" y="0" width="55" height="16" uuid="942c7d77-39c0-4632-8c73-c18d6a27ed66"/>
                <box>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement>
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{data}.get(5)]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="335" y="0" width="55" height="16" uuid="dcea008b-b4c4-480c-8853-ef60eca945c6"/>
                <box>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement>
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{data}.get(6)]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="390" y="0" width="55" height="16" uuid="17e05f28-ae3c-4ecf-baff-77ff2d2aab66"/>
                <box>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement>
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{data}.get(7)]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="445" y="0" width="55" height="16" uuid="4dad91f1-0451-403b-a02c-6eb26d58ea97"/>
                <box>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                </box>
                <textElement>
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{data}.get(8)]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="500" y="0" width="55" height="16" uuid="0b584a93-a736-4fa3-b7b9-dcb909638aad"/>
                <box>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement>
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{data}.get(9)]]></textFieldExpression>
            </textField>
            <rectangle>
                <reportElement mode="Opaque" x="0" y="0" width="555" height="16" backcolor="rgba(0, 84, 73, 0.1254902)" uuid="8ba2fd94-84a3-4b28-86c2-7c4306b64774">
                    <printWhenExpression><![CDATA[new Boolean( $V{PAGE_COUNT}.intValue() % 2 != 0)]]></printWhenExpression>
                </reportElement>
                <graphicElement>
                    <pen lineWidth="0.0" lineColor="#000000"/>
                </graphicElement>
            </rectangle>
        </band>
    </detail>
    <pageFooter>
        <band height="16">
            <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
            <textField>
                <reportElement x="235" y="0" width="275" height="16" uuid="db59b963-ace0-4103-a6e2-81ec2d02c6bb"/>
                <textElement textAlignment="Right">
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA["Page " + $V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Report">
                <reportElement x="510" y="0" width="45" height="16" uuid="13f222e8-e2fd-437e-a9ca-95c1d0c8736f"/>
                <textElement textAlignment="Left">
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[" of " + $V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>
        </band>
    </pageFooter>
</jasperReport>