package ireport; import javax.swing.JFrame; import java.awt.BorderLayout; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; import com.bestway.bcus.client.common.CustomReportDataSource; import com.bestway.bcus.client.common.DgReportViewer; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.util.JRLoader; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class IReportTest extends JFrame { public IReportTest() { this.setBounds(300, 240, 300, 240); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); getContentPane().setLayout(new BorderLayout(0, 0)); JPanel panel = new JPanel(); getContentPane().add(panel, BorderLayout.CENTER); panel.setLayout(null); JButton btnNewButton = new JButton("\u6253\u5370\u62A5\u8868"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { printReport(); } }); btnNewButton.setBounds(94, 97, 93, 23); panel.add(btnNewButton); } public void printReport(){ try { CustomReportDataSource ds = new CustomReportDataSource( getList()); CustomReportDataSource dss = new CustomReportDataSource( getList()); InputStream masterReportStream = IReportTest.class .getResourceAsStream("Untitled_report_1.jasper"); InputStream commInfoReportStream = IReportTest.class .getResourceAsStream("Untitled_report_1_subreport0.jasper"); JasperReport commInfoReport = (JasperReport) JRLoader .loadObject(commInfoReportStream); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("commInfoReport", commInfoReport); parameters.put("IReportTest", "测试"); parameters.put("list", dss); System.out.println("masterReportStream=="+masterReportStream+" parameters=="+parameters+" ds=="+ds); JasperPrint jasperPrint = JasperFillManager.fillReport( masterReportStream, parameters, ds); DgReportViewer viewer = new DgReportViewer(jasperPrint); viewer.setVisible(true); } catch (JRException e) { e.printStackTrace(); } } public List getList(){ List list = new ArrayList(); list.add(new Student("10001","张三","男","java",20)); list.add(new Student("10002","李四","女","C#",20)); list.add(new Student("10003","王五","男","C++",20)); list.add(new Student("10004","赵六","女","html",20)); return list; } public class Student{ private String id; private String name; private String sex; private String hobby; private Integer age; public Student(String id,String name,String sex,String hobby,Integer age){ this.id = id; this.name = name; this.sex = sex; this.hobby = hobby; this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new IReportTest().setVisible(true); } }); } }
/* * Created on 2004-8-28 * * // * Window - Preferences - Java - Code Style - Code Templates */ package com.bestway.bcus.client.common; import java.awt.BorderLayout; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.swing.JDialog; import javax.swing.JPanel; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.view.JRSaveContributor; import net.sf.jasperreports.view.JRViewer; import com.bestway.client.windows.form.FmMain; /** * @author Administrator // change the template for this generated type comment * go to Window - Preferences - Java - Code Style - Code Templates */ public class DgReportViewer extends JDialog { private static final long serialVersionUID = 1L; private JRViewer viewer = null; private JPanel pnlMain = null; /** Creates new form DgReportViewer */ public DgReportViewer(String sourceFile, boolean isXMLFile, boolean isModal) throws JRException { super(FmMain.getInstance()); this.setModal(isModal); initComponents(); this.viewer = new JRViewer(sourceFile, isXMLFile); removeJRSaveContributor(); this.pnlMain.add(this.viewer, BorderLayout.CENTER); } /** Creates new form DgReportViewer */ public DgReportViewer(String sourceFile, boolean isXMLFile) throws JRException { this(sourceFile, isXMLFile, true); } /** Creates new form DgReportViewer */ public DgReportViewer(InputStream is, boolean isXMLFile, boolean isModal) throws JRException { super(FmMain.getInstance()); this.setModal(isModal); initComponents(); this.viewer = new JRViewer(is, isXMLFile); removeJRSaveContributor(); this.pnlMain.add(this.viewer, BorderLayout.CENTER); } /** Creates new form DgReportViewer */ public DgReportViewer(InputStream is, boolean isXMLFile) throws JRException { this(is, isXMLFile, true); } /** Creates new form DgReportViewer */ public DgReportViewer(JasperPrint jasperPrint, boolean isModal) throws JRException { super(FmMain.getInstance()); initComponents(); this.setModal(isModal); this.viewer = new JRViewer(jasperPrint); removeJRSaveContributor(); this.pnlMain.add(this.viewer, BorderLayout.CENTER); } /** Creates new form DgReportViewer */ public DgReportViewer(JasperPrint jasperPrint) throws JRException { this(jasperPrint, true); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ private void initComponents() { setTitle("报表预览"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); pnlMain = new javax.swing.JPanel(); pnlMain.setLayout(new java.awt.BorderLayout()); getContentPane().add(pnlMain, java.awt.BorderLayout.CENTER); pack(); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit() .getScreenSize(); setSize(new java.awt.Dimension(screenSize.width, screenSize.height - 25)); this .setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); } public void setVisible(boolean b) { this.setLocation(0, 0); super.setVisible(b); } /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) {// GEN-FIRST:event_exitForm this.setVisible(false); this.viewer.clear(); this.viewer = null; this.getContentPane().removeAll(); } /** * @param args * the command line arguments */ public static void main(String args[]) { String fileName = null; boolean isXMLFile = false; // if (args.length == 0) { // usage(); // return; // } int k = 0; while (args.length > k) { if (args[k].startsWith("-F")) fileName = args[k].substring(2); if (args[k].startsWith("-XML")) isXMLFile = true; k++; } try { viewReport("d:/myjrprint.jrprint", false); } catch (JRException e) { e.printStackTrace(); System.exit(1); } } /** * */ private static void usage() { System.out.println("DgReportViewer usage:"); System.out.println("\tjava DgReportViewer -XML -Ffile"); } /** * */ public static void viewReport(String sourceFile, boolean isXMLFile) throws JRException { DgReportViewer jasperViewer = new DgReportViewer(sourceFile, isXMLFile, true); jasperViewer.setVisible(true); } /** * */ public static void viewReport(InputStream is, boolean isXMLFile) throws JRException { DgReportViewer jasperViewer = new DgReportViewer(is, isXMLFile, true); jasperViewer.setVisible(true); } /** * */ public static void viewReport(JasperPrint jasperPrint) throws JRException { DgReportViewer jasperViewer = new DgReportViewer(jasperPrint, true); jasperViewer.setVisible(true); } /** * */ public static void viewReport(String sourceFile, boolean isXMLFile, boolean isModal) throws JRException { DgReportViewer jasperViewer = new DgReportViewer(sourceFile, isXMLFile, isModal); jasperViewer.setVisible(true); } /** * */ public static void viewReport(InputStream is, boolean isXMLFile, boolean isModal) throws JRException { DgReportViewer jasperViewer = new DgReportViewer(is, isXMLFile, isModal); jasperViewer.setVisible(true); } /** * */ public static void viewReport(JasperPrint jasperPrint, boolean isModal) throws JRException { DgReportViewer jasperViewer = new DgReportViewer(jasperPrint, isModal); jasperViewer.setVisible(true); } private void removeJRSaveContributor() { // -------net.sf.jasperreports.view.save.JRPrintSaveContributor // -------net.sf.jasperreports.view.save.JRPdfSaveContributor // -------net.sf.jasperreports.view.save.JRRtfSaveContributor // -------net.sf.jasperreports.view.save.JRHtmlSaveContributor // -------net.sf.jasperreports.view.save.JRSingleSheetXlsSaveContributor // -------net.sf.jasperreports.view.save.JRMultipleSheetsXlsSaveContributor // -------net.sf.jasperreports.view.save.JRCsvSaveContributor // -------net.sf.jasperreports.view.save.JRXmlSaveContributor // -------net.sf.jasperreports.view.save.JREmbeddedImagesXmlSaveContributor List<String> list = new ArrayList<String>(); list.add(net.sf.jasperreports.view.save.JRHtmlSaveContributor.class .getName()); list.add(net.sf.jasperreports.view.save.JRCsvSaveContributor.class .getName()); list.add(net.sf.jasperreports.view.save.JRXmlSaveContributor.class .getName()); list .add(net.sf.jasperreports.view.save.JREmbeddedImagesXmlSaveContributor.class .getName()); for (JRSaveContributor save : viewer.getSaveContributors()) { if (list.contains(save.getClass().getName())) { viewer.removeSaveContributor(save); } } } }
package com.bestway.bcus.client.common; import java.text.DecimalFormat; import java.text.ParseException; import java.util.Date; import java.util.List; import javax.swing.text.NumberFormatter; import net.sf.jasperreports.engine.JREmptyDataSource; import net.sf.jasperreports.engine.JRField; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.PropertyUtils; public class CustomReportDataSource extends JREmptyDataSource { private List list = null; private int index = -1; private Integer maximumFractionDigits = 6; public CustomReportDataSource(List list) { this.list = list; } public CustomReportDataSource(List list,Integer maximumFractionDigits) { this.list = list; this.maximumFractionDigits = maximumFractionDigits==null?0:maximumFractionDigits; } /** * has next data record */ public boolean next() { index++; return (index < list.size()); } public void setFirst() { index = -1; } public Object getFieldValue(JRField field) { String fieldDescription = field.getDescription(); try { Object value = PropertyUtils.getNestedProperty(list.get(index), fieldDescription); if (value == null) { return ""; } if (value instanceof Date) { java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat( "yyyy-MM-dd"); return dateFormat.format((Date) value); } else if (value instanceof Double || value instanceof Float) { Double valuesD = Double.valueOf(value.toString()); return doubleToStr(valuesD); } return ConvertUtils.convert(value); } catch (Exception ex) { // ex.printStackTrace(); return ""; } } // // 设置小数位为6位 // private NumberFormatter numberFormatter = null; private NumberFormatter getNumberFormatter() { if (numberFormatter == null) { numberFormatter = new NumberFormatter(); DecimalFormat decimalFormat1 = new DecimalFormat(); decimalFormat1.setMaximumFractionDigits(maximumFractionDigits); decimalFormat1.setGroupingSize(0); numberFormatter.setFormat(decimalFormat1); } return numberFormatter; } private String doubleToStr(Double value) { // 转换doubleToStr 取数据 try { if (value == null) { return null; } if (value.doubleValue() == 0) { return "0.0"; } getNumberFormatter().setValueClass(Double.class); // // 无穷大,NaN 都清0 // if (value.equals(Double.NEGATIVE_INFINITY) || value.equals(Double.POSITIVE_INFINITY) || value.equals(Double.NaN)) { return "0.0"; } return getNumberFormatter().valueToString(value); } catch (ParseException e) { e.printStackTrace(); return null; } } public Integer getMaximumFractionDigits() { return maximumFractionDigits; } public void setMaximumFractionDigits(Integer maximumFractionDigits) { this.maximumFractionDigits = maximumFractionDigits; } }