`

JasperReport动态列

 
阅读更多
Java代码 复制代码 收藏代码
  1. import java.io.File;   
  2. import java.io.FileOutputStream;   
  3. import java.io.OutputStream;   
  4. import java.util.ArrayList;   
  5. import java.util.HashMap;   
  6. import java.util.List;   
  7. import java.util.Map;   
  8.     
  9. import javax.print.attribute.HashPrintRequestAttributeSet;   
  10. import javax.print.attribute.HashPrintServiceAttributeSet;   
  11. import javax.print.attribute.PrintRequestAttributeSet;   
  12. import javax.print.attribute.PrintServiceAttributeSet;   
  13. import javax.print.attribute.standard.Copies;   
  14. import javax.print.attribute.standard.MediaSizeName;   
  15. import javax.print.attribute.standard.PrinterName;   
  16.     
  17. import net.sf.jasperreports.engine.JRException;   
  18. import net.sf.jasperreports.engine.JRExporterParameter;   
  19. import net.sf.jasperreports.engine.JRReport;   
  20. import net.sf.jasperreports.engine.JasperCompileManager;   
  21. import net.sf.jasperreports.engine.JasperExportManager;   
  22. import net.sf.jasperreports.engine.JasperFillManager;   
  23. import net.sf.jasperreports.engine.JasperPrint;   
  24. import net.sf.jasperreports.engine.JasperReport;   
  25. import net.sf.jasperreports.engine.base.JRBaseLine;   
  26. import net.sf.jasperreports.engine.base.JRBasePrintText;   
  27. import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;   
  28. import net.sf.jasperreports.engine.design.JRDesignBand;   
  29. import net.sf.jasperreports.engine.design.JRDesignExpression;   
  30. import net.sf.jasperreports.engine.design.JRDesignField;   
  31. import net.sf.jasperreports.engine.design.JRDesignStaticText;   
  32. import net.sf.jasperreports.engine.design.JRDesignTextField;   
  33. import net.sf.jasperreports.engine.design.JasperDesign;   
  34. import net.sf.jasperreports.engine.export.JRPrintServiceExporter;   
  35. import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter;   
  36. import net.sf.jasperreports.engine.util.JRSaver;   
  37.     
  38. import org.apache.commons.beanutils.BasicDynaBean;   
  39. import org.apache.commons.beanutils.BasicDynaClass;   
  40. import org.apache.commons.beanutils.DynaBean;   
  41. import org.apache.commons.beanutils.DynaProperty;   
  42. import org.apache.commons.logging.Log;   
  43. import org.apache.commons.logging.LogFactory;   
  44.     
  45. import com.inqgen.iqlis.template.jsf.bean.TemplateDirectoryAdminBean;   
  46.     
  47. /**  
  48.  * JasperReport 動態列 打印  
  49.  * @author hxy  
  50.  *  
  51.  */  
  52. public class ReportProcess {   
  53.     
  54.  private static Log logger = LogFactory   
  55.    .getLog(TemplateDirectoryAdminBean.class);   
  56.  /** 設置字段寬度 */  
  57.  private final static int textWidth = 80;   
  58.  /** 設置字段高度 */  
  59.  private final static int textHeight = 20;   
  60.  /** coulumnHeader區域字體大小 */  
  61.  private final static int columnHeaderfontSize = 14;   
  62.  /** detail 區域字體大小 */  
  63.  private final static int fontSize = 12;   
  64.  /** 設置間距 */  
  65.  private final static int X = 80;   
  66.  /** coulumnHeader區域高度 */  
  67.  private final static int columnHeaderHeight = 20;   
  68.  /** detail 區域高度 */  
  69.  private final static int detailHeight = 20;   
  70.  /**  */  
  71.  private static String aliasColumn = "column";   
  72.     
  73.  public static void main(String args[]){   
  74.   try {   
  75.    String[] columns = {"字段1""字段2""字段3""字段4"};   
  76.    File f = new File("d://test.pdf");   
  77.    List<Object[]> list = new ArrayList<Object[]>();   
  78.    Object[] obj = null;   
  79.    for(int j=0;j<50;j++){   
  80.     obj = new Object[columns.length];   
  81.     for(int i=0;i<columns.length;i++){   
  82.      obj[i] = columns[i]+j+","+i;   
  83.     }   
  84.     list.add(obj);   
  85.    }   
  86.    OutputStream out = new FileOutputStream(f);   
  87.    preview(columns, list, out);   
  88.    out.close();   
  89.    logger.info("成功~");   
  90.   } catch (Exception e) {   
  91.    // TODO Auto-generated catch block   
  92.    e.printStackTrace();   
  93.   }   
  94.  }   
  95.     
  96.  /**  
  97.   * PDF打印  
  98.   *   
  99.   * @param headers  
  100.   *            colimnHeaders  
  101.   * @param list  
  102.   *            數據來源  
  103.   * @param out  
  104.   *            輸出流  
  105.   * @throws Exception  
  106.   */  
  107.  public static void preview(String headers[], List<Object[]> list,   
  108.    OutputStream out) throws Exception {   
  109.   long start = System.currentTimeMillis();   
  110.   String[] alias = preaseAliasColumnHeaders(headers);   
  111.   JasperReport jp = getJasperReport(headers, alias);   
  112.   Map<String, Object> parameters = new HashMap<String,Object>();   
  113.   JasperPrint jasperPrint = JasperFillManager.fillReport(jp, parameters,   
  114.     new JRBeanCollectionDataSource(getBaseList(alias, phrase(list))));   
  115.   logger.info("Filling time : " + (System.currentTimeMillis() - start));   
  116.   JasperExportManager.exportReportToPdfStream(jasperPrint, out);   
  117.   logger.info("Printing time : " + (System.currentTimeMillis() - start));   
  118.  }   
  119.     
  120.  /**  
  121.   * 打印機打印報表  
  122.   *   
  123.   * @param headers  
  124.   *            colimnHeaders  
  125.   * @param list  
  126.   *            數據來源  
  127.   * @param parameters  
  128.   *            Map 參數  
  129.   * @param printerName  
  130.   *            打印機名稱  
  131.   *  @param printerName  
  132.   *            打印機份數  
  133.   * @param tempFileName  
  134.   *            创建报表打印临时文件的路径  
  135.   * @throws Exception  
  136.   */  
  137.  public static void print(String headers[], List<Object[]> list,   
  138.    Map<String, Object> parameters, String printerName, int copies,   
  139.    String tempFileName) throws Exception {   
  140.   long start = System.currentTimeMillis();   
  141.   /** 获取打印报表数据 */  
  142.   String[] alias = preaseAliasColumnHeaders(headers);   
  143.   JasperReport jp = getJasperReport(headers, alias);   
  144.   JasperPrint jasperPrint = JasperFillManager.fillReport(jp, parameters,   
  145.     new JRBeanCollectionDataSource(getBaseList(alias, phrase(list))));   
  146.   /** 保存向打印机发送的临时报表数据 */  
  147.   JRSaver.saveObject(jasperPrint, tempFileName);   
  148.   logger.info("Filling time : " + (System.currentTimeMillis() - start));   
  149.   /** 设置打印参数 */  
  150.   PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();   
  151.   /** 设置A4纸张 */  
  152.   printRequestAttributeSet.add(MediaSizeName.ISO_A4);   
  153.   /** 設置打印份數 */  
  154.   printRequestAttributeSet.add(new Copies(copies));   
  155.   /** 设置打印机 */  
  156.   PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();   
  157.   /** 添加打印机名称 */  
  158.   // "Epson Stylus 800 ESC/P// 2"   
  159.   printServiceAttributeSet.add(new PrinterName(printerName, null));   
  160.   /** 打印机对象 */  
  161.   JRPrintServiceExporter exporter = new JRPrintServiceExporter();   
  162.   /** 向打印机发送的临时报表数据 */  
  163.   exporter   
  164.     .setParameter(JRExporterParameter.INPUT_FILE_NAME, tempFileName);   
  165.   exporter.setParameter(   
  166.     JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET,   
  167.     printRequestAttributeSet);   
  168.   exporter.setParameter(   
  169.     JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET,   
  170.     printServiceAttributeSet);   
  171.   /** 是否弹出打印页数的提示对话框 */  
  172.   exporter.setParameter(   
  173.     JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG,   
  174.     Boolean.FALSE);   
  175.   /** 是否弹出打印机设置属性的提示对话框 */  
  176.   exporter.setParameter(   
  177.     JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG,   
  178.     Boolean.FALSE);   
  179.   /** 执行打印机打印报表 */  
  180.   exporter.exportReport();   
  181.   logger.info("Printing time : " + (System.currentTimeMillis() - start));   
  182.  }   
  183.     
  184.  public static List<String[]> phrase(List<Object[]> list){   
  185.   List<String[]> temps = new ArrayList<String[]>();   
  186.   String []s= null;   
  187.   for(Object[] obj : list){   
  188.    s = new String[obj.length];   
  189.    for(int i = 0;i<obj.length;i++){   
  190.     s[i] = obj[i].toString();   
  191.    }   
  192.    temps.add(s);   
  193.   }   
  194.   return temps;   
  195.  }   
  196.     
  197.  /**  
  198.   * 產生columnHeaders的別名(Headers[]有可能為中文,所以有必要用別名來替換)  
  199.   *   
  200.   * @param headers  
  201.   * @return  
  202.   */  
  203.  private static String[] preaseAliasColumnHeaders(String headers[]) {   
  204.   int size = headers.length;   
  205.   String[] alias = new String[size];   
  206.   for (int i = 0; i < size; i++) {   
  207.    alias[i] = aliasColumn + i;   
  208.   }   
  209.   return alias;   
  210.  }   
  211.     
  212.  /**  
  213.   * 產生Template文件  
  214.   *   
  215.   * @param headers  
  216.   * @param alias  
  217.   * @return  
  218.   * @throws JRException  
  219.   */  
  220.  @SuppressWarnings("deprecation")   
  221.  private static JasperReport getJasperReport(String[] headers,   
  222.    String alias[]) throws JRException {   
  223.   JasperDesign design = new JasperDesign();   
  224.     
  225.   // name="statistics"   
  226.   design.setName("statistics");   
  227.   // columnCount="1"   
  228.   // printOrder="Vertical"   
  229.   design.setPrintOrder(JRReport.PRINT_ORDER_VERTICAL);   
  230.   // orientation="Portrait"   
  231.   design.setOrientation(JRReport.ORIENTATION_PORTRAIT);   
  232.   // pageWidth="595"   
  233.   design.setPageWidth(595);   
  234.   // pageHeight="842"   
  235.   design.setPageHeight(842);   
  236.   // columnWidth="535"   
  237.   design.setColumnWidth(535);   
  238.   // columnSpacing="0"   
  239.   design.setColumnSpacing(0);   
  240.   // leftMargin="30"   
  241.   design.setLeftMargin(30);   
  242.   // rightMargin="30"   
  243.   design.setRightMargin(30);   
  244.   // topMargin="20"   
  245.   design.setTopMargin(20);   
  246.   // bottomMargin="20"   
  247.   design.setBottomMargin(20);   
  248.   // whenNoDataType="NoPages"   
  249.   design.setWhenNoDataType(JRReport.WHEN_NO_DATA_TYPE_BLANK_PAGE);   
  250.   // isTitleNewPage="false"   
  251.   design.setTitleNewPage(false);   
  252.   // isSummaryNewPage="false"   
  253.   design.setSummaryNewPage(false);   
  254.     
  255.   // JRDesignBand title = new JRDesignBand();   
  256.   // title.setHeight(50);   
  257.   // JRDesignStaticText titleText = new JRDesignStaticText();   
  258.   // titleText.setText("test report");   
  259.   // titleText.setX(230);   
  260.   // titleText.setFontSize(20);   
  261.   // titleText.setHeight(50);   
  262.   // titleText.setWidth(100);   
  263.   // title.addElement(titleText);   
  264.   // design.setTitle(title);   
  265.   JRDesignBand columnHeader = new JRDesignBand();   
  266.   columnHeader.setHeight(columnHeaderHeight);   
  267.     
  268.   JRDesignBand detail = new JRDesignBand();   
  269.   detail.setHeight(detailHeight);   
  270.     
  271.   for (int i = 0; i < headers.length; i++) {   
  272.    // add column headers   
  273.    JRDesignStaticText staticText = new JRDesignStaticText();   
  274.    staticText.setText(headers[i]);   
  275.    staticText.setFontSize(columnHeaderfontSize);   
  276.    staticText.setHeight(textHeight);   
  277.    staticText.setWidth(textWidth);   
  278.    staticText.setX(X * i);   
  279.    staticText.setPdfFontName("MHei-Medium");   
  280.    staticText.setPdfEmbedded(true);   
  281.    staticText.setPdfEncoding("UniCNS-UCS2-H");   
  282.    staticText.setTextAlignment(JRBasePrintText.HORIZONTAL_ALIGN_CENTER);   
  283.    staticText.setLeftBorder(JRBaseLine.PEN_1_POINT);   
  284.    staticText.setTopBorder(JRBaseLine.PEN_1_POINT);   
  285.    staticText.setRightBorder(JRBaseLine.PEN_1_POINT);   
  286.    staticText.setBottomBorder(JRBaseLine.PEN_1_POINT);   
  287.    columnHeader.addElement(staticText);   
  288.     
  289.    // define fields   
  290.    JRDesignField field = new JRDesignField();   
  291.    field.setName(alias[i]);   
  292.    field.setValueClass(String.class);   
  293.    design.addField(field);   
  294.     
  295.    // add text fields for displaying fields   
  296.    JRDesignTextField textField = new JRDesignTextField();   
  297.    JRDesignExpression expression = new JRDesignExpression();   
  298.    expression.setText("$F{" + alias[i] + "}");   
  299.    expression.setValueClass(String.class);   
  300.    textField.setExpression(expression);   
  301.    textField.setFontSize(fontSize);   
  302.    textField.setHeight(textHeight);   
  303.    textField.setWidth(textWidth);   
  304.    textField.setX(X * i);   
  305.    textField.setPdfFontName("MHei-Medium");   
  306.    textField.setPdfEmbedded(true);   
  307.    textField.setPdfEncoding("UniCNS-UCS2-H");   
  308.    textField.setTextAlignment(JRBasePrintText.HORIZONTAL_ALIGN_CENTER);   
  309.    textField.setLeftBorder(JRBaseLine.PEN_1_POINT);   
  310.    textField.setTopBorder(JRBaseLine.PEN_1_POINT);   
  311.    textField.setRightBorder(JRBaseLine.PEN_1_POINT);   
  312.    textField.setBottomBorder(JRBaseLine.PEN_1_POINT);   
  313.    detail.addElement(textField);   
  314.   }   
  315.   design.setColumnHeader(columnHeader);   
  316.   design.setDetail(detail);   
  317.     
  318.   return JasperCompileManager.compileReport(design);   
  319.  }   
  320.     
  321.  /**  
  322.   * 利用反射機制,裝拼數據  
  323.   *   
  324.   * @param headers  
  325.   * @param list  
  326.   * @return  
  327.   * @throws Exception  
  328.   */  
  329.  private static List<Object> getBaseList(String[] headers,   
  330.    List<String[]> list) throws Exception {   
  331.   List<Object> result = new ArrayList<Object>();   
  332.   int length = headers.length;   
  333.   DynaProperty[] dynaProps = new DynaProperty[length];   
  334.   for (int i = 0; i < length; i++) {   
  335.    dynaProps[i] = new DynaProperty(headers[i], String.class);   
  336.   }   
  337.   BasicDynaClass dynaClass = new BasicDynaClass("first",   
  338.     BasicDynaBean.class, dynaProps);   
  339.   for (Object[] obj : list) {   
  340.    DynaBean employee = dynaClass.newInstance();   
  341.    for (int i = 0; i < length; i++) {   
  342.     employee.set(headers[i], obj[i]);   
  343.    }   
  344.    result.add(employee);   
  345.   }   
  346.   return result;   
  347.  }   
  348.     
  349. }  
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.HashPrintServiceAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.PrintServiceAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.PrinterName;
 
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRReport;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.base.JRBaseLine;
import net.sf.jasperreports.engine.base.JRBasePrintText;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JRDesignBand;
import net.sf.jasperreports.engine.design.JRDesignExpression;
import net.sf.jasperreports.engine.design.JRDesignField;
import net.sf.jasperreports.engine.design.JRDesignStaticText;
import net.sf.jasperreports.engine.design.JRDesignTextField;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.export.JRPrintServiceExporter;
import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter;
import net.sf.jasperreports.engine.util.JRSaver;
 
import org.apache.commons.beanutils.BasicDynaBean;
import org.apache.commons.beanutils.BasicDynaClass;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
import com.inqgen.iqlis.template.jsf.bean.TemplateDirectoryAdminBean;
 
/**
 * JasperReport 動態列 打印
 * @author hxy
 *
 */
public class ReportProcess {
 
 private static Log logger = LogFactory
   .getLog(TemplateDirectoryAdminBean.class);
 /** 設置字段寬度 */
 private final static int textWidth = 80;
 /** 設置字段高度 */
 private final static int textHeight = 20;
 /** coulumnHeader區域字體大小 */
 private final static int columnHeaderfontSize = 14;
 /** detail 區域字體大小 */
 private final static int fontSize = 12;
 /** 設置間距 */
 private final static int X = 80;
 /** coulumnHeader區域高度 */
 private final static int columnHeaderHeight = 20;
 /** detail 區域高度 */
 private final static int detailHeight = 20;
 /**  */
 private static String aliasColumn = "column";
 
 public static void main(String args[]){
  try {
   String[] columns = {"字段1", "字段2", "字段3", "字段4"};
   File f = new File("d://test.pdf");
   List<Object[]> list = new ArrayList<Object[]>();
   Object[] obj = null;
   for(int j=0;j<50;j++){
    obj = new Object[columns.length];
    for(int i=0;i<columns.length;i++){
     obj[i] = columns[i]+j+","+i;
    }
    list.add(obj);
   }
   OutputStream out = new FileOutputStream(f);
   preview(columns, list, out);
   out.close();
   logger.info("成功~");
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 /**
  * PDF打印
  * 
  * @param headers
  *            colimnHeaders
  * @param list
  *            數據來源
  * @param out
  *            輸出流
  * @throws Exception
  */
 public static void preview(String headers[], List<Object[]> list,
   OutputStream out) throws Exception {
  long start = System.currentTimeMillis();
  String[] alias = preaseAliasColumnHeaders(headers);
  JasperReport jp = getJasperReport(headers, alias);
  Map<String, Object> parameters = new HashMap<String,Object>();
  JasperPrint jasperPrint = JasperFillManager.fillReport(jp, parameters,
    new JRBeanCollectionDataSource(getBaseList(alias, phrase(list))));
  logger.info("Filling time : " + (System.currentTimeMillis() - start));
  JasperExportManager.exportReportToPdfStream(jasperPrint, out);
  logger.info("Printing time : " + (System.currentTimeMillis() - start));
 }
 
 /**
  * 打印機打印報表
  * 
  * @param headers
  *            colimnHeaders
  * @param list
  *            數據來源
  * @param parameters
  *            Map 參數
  * @param printerName
  *            打印機名稱
  *  @param printerName
  *            打印機份數
  * @param tempFileName
  *            创建报表打印临时文件的路径
  * @throws Exception
  */
 public static void print(String headers[], List<Object[]> list,
   Map<String, Object> parameters, String printerName, int copies,
   String tempFileName) throws Exception {
  long start = System.currentTimeMillis();
  /** 获取打印报表数据 */
  String[] alias = preaseAliasColumnHeaders(headers);
  JasperReport jp = getJasperReport(headers, alias);
  JasperPrint jasperPrint = JasperFillManager.fillReport(jp, parameters,
    new JRBeanCollectionDataSource(getBaseList(alias, phrase(list))));
  /** 保存向打印机发送的临时报表数据 */
  JRSaver.saveObject(jasperPrint, tempFileName);
  logger.info("Filling time : " + (System.currentTimeMillis() - start));
  /** 设置打印参数 */
  PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
  /** 设置A4纸张 */
  printRequestAttributeSet.add(MediaSizeName.ISO_A4);
  /** 設置打印份數 */
  printRequestAttributeSet.add(new Copies(copies));
  /** 设置打印机 */
  PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
  /** 添加打印机名称 */
  // "Epson Stylus 800 ESC/P// 2"
  printServiceAttributeSet.add(new PrinterName(printerName, null));
  /** 打印机对象 */
  JRPrintServiceExporter exporter = new JRPrintServiceExporter();
  /** 向打印机发送的临时报表数据 */
  exporter
    .setParameter(JRExporterParameter.INPUT_FILE_NAME, tempFileName);
  exporter.setParameter(
    JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET,
    printRequestAttributeSet);
  exporter.setParameter(
    JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET,
    printServiceAttributeSet);
  /** 是否弹出打印页数的提示对话框 */
  exporter.setParameter(
    JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG,
    Boolean.FALSE);
  /** 是否弹出打印机设置属性的提示对话框 */
  exporter.setParameter(
    JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG,
    Boolean.FALSE);
  /** 执行打印机打印报表 */
  exporter.exportReport();
  logger.info("Printing time : " + (System.currentTimeMillis() - start));
 }
 
 public static List<String[]> phrase(List<Object[]> list){
  List<String[]> temps = new ArrayList<String[]>();
  String []s= null;
  for(Object[] obj : list){
   s = new String[obj.length];
   for(int i = 0;i<obj.length;i++){
    s[i] = obj[i].toString();
   }
   temps.add(s);
  }
  return temps;
 }
 
 /**
  * 產生columnHeaders的別名(Headers[]有可能為中文,所以有必要用別名來替換)
  * 
  * @param headers
  * @return
  */
 private static String[] preaseAliasColumnHeaders(String headers[]) {
  int size = headers.length;
  String[] alias = new String[size];
  for (int i = 0; i < size; i++) {
   alias[i] = aliasColumn + i;
  }
  return alias;
 }
 
 /**
  * 產生Template文件
  * 
  * @param headers
  * @param alias
  * @return
  * @throws JRException
  */
 @SuppressWarnings("deprecation")
 private static JasperReport getJasperReport(String[] headers,
   String alias[]) throws JRException {
  JasperDesign design = new JasperDesign();
 
  // name="statistics"
  design.setName("statistics");
  // columnCount="1"
  // printOrder="Vertical"
  design.setPrintOrder(JRReport.PRINT_ORDER_VERTICAL);
  // orientation="Portrait"
  design.setOrientation(JRReport.ORIENTATION_PORTRAIT);
  // pageWidth="595"
  design.setPageWidth(595);
  // pageHeight="842"
  design.setPageHeight(842);
  // columnWidth="535"
  design.setColumnWidth(535);
  // columnSpacing="0"
  design.setColumnSpacing(0);
  // leftMargin="30"
  design.setLeftMargin(30);
  // rightMargin="30"
  design.setRightMargin(30);
  // topMargin="20"
  design.setTopMargin(20);
  // bottomMargin="20"
  design.setBottomMargin(20);
  // whenNoDataType="NoPages"
  design.setWhenNoDataType(JRReport.WHEN_NO_DATA_TYPE_BLANK_PAGE);
  // isTitleNewPage="false"
  design.setTitleNewPage(false);
  // isSummaryNewPage="false"
  design.setSummaryNewPage(false);
 
  // JRDesignBand title = new JRDesignBand();
  // title.setHeight(50);
  // JRDesignStaticText titleText = new JRDesignStaticText();
  // titleText.setText("test report");
  // titleText.setX(230);
  // titleText.setFontSize(20);
  // titleText.setHeight(50);
  // titleText.setWidth(100);
  // title.addElement(titleText);
  // design.setTitle(title);
  JRDesignBand columnHeader = new JRDesignBand();
  columnHeader.setHeight(columnHeaderHeight);
 
  JRDesignBand detail = new JRDesignBand();
  detail.setHeight(detailHeight);
 
  for (int i = 0; i < headers.length; i++) {
   // add column headers
   JRDesignStaticText staticText = new JRDesignStaticText();
   staticText.setText(headers[i]);
   staticText.setFontSize(columnHeaderfontSize);
   staticText.setHeight(textHeight);
   staticText.setWidth(textWidth);
   staticText.setX(X * i);
   staticText.setPdfFontName("MHei-Medium");
   staticText.setPdfEmbedded(true);
   staticText.setPdfEncoding("UniCNS-UCS2-H");
   staticText.setTextAlignment(JRBasePrintText.HORIZONTAL_ALIGN_CENTER);
   staticText.setLeftBorder(JRBaseLine.PEN_1_POINT);
   staticText.setTopBorder(JRBaseLine.PEN_1_POINT);
   staticText.setRightBorder(JRBaseLine.PEN_1_POINT);
   staticText.setBottomBorder(JRBaseLine.PEN_1_POINT);
   columnHeader.addElement(staticText);
 
   // define fields
   JRDesignField field = new JRDesignField();
   field.setName(alias[i]);
   field.setValueClass(String.class);
   design.addField(field);
 
   // add text fields for displaying fields
   JRDesignTextField textField = new JRDesignTextField();
   JRDesignExpression expression = new JRDesignExpression();
   expression.setText("$F{" + alias[i] + "}");
   expression.setValueClass(String.class);
   textField.setExpression(expression);
   textField.setFontSize(fontSize);
   textField.setHeight(textHeight);
   textField.setWidth(textWidth);
   textField.setX(X * i);
   textField.setPdfFontName("MHei-Medium");
   textField.setPdfEmbedded(true);
   textField.setPdfEncoding("UniCNS-UCS2-H");
   textField.setTextAlignment(JRBasePrintText.HORIZONTAL_ALIGN_CENTER);
   textField.setLeftBorder(JRBaseLine.PEN_1_POINT);
   textField.setTopBorder(JRBaseLine.PEN_1_POINT);
   textField.setRightBorder(JRBaseLine.PEN_1_POINT);
   textField.setBottomBorder(JRBaseLine.PEN_1_POINT);
   detail.addElement(textField);
  }
  design.setColumnHeader(columnHeader);
  design.setDetail(detail);
 
  return JasperCompileManager.compileReport(design);
 }
 
 /**
  * 利用反射機制,裝拼數據
  * 
  * @param headers
  * @param list
  * @return
  * @throws Exception
  */
 private static List<Object> getBaseList(String[] headers,
   List<String[]> list) throws Exception {
  List<Object> result = new ArrayList<Object>();
  int length = headers.length;
  DynaProperty[] dynaProps = new DynaProperty[length];
  for (int i = 0; i < length; i++) {
   dynaProps[i] = new DynaProperty(headers[i], String.class);
  }
  BasicDynaClass dynaClass = new BasicDynaClass("first",
    BasicDynaBean.class, dynaProps);
  for (Object[] obj : list) {
   DynaBean employee = dynaClass.newInstance();
   for (int i = 0; i < length; i++) {
    employee.set(headers[i], obj[i]);
   }
   result.add(employee);
  }
  return result;
 }
 
}
分享到:
评论

相关推荐

    jasperReport动态列的实现

    实现了jasperReport进行报表动态列的实现,使用者只需要利用eclipse将工程文件导入,即可查看运行结果的展示,不需要其他的配置和jar包如果想进行动态展示只需要修改构造参数就可以看到动态的展示

    jasperreport 6.4.1报表动态列,以及生成导出html

    jasperreport 6.4.1报表动态列,以及生成导出html,可直接导入到eclipse中进行运行,包含一个完整的demo

    jasperReport 动态合并单元格示例

    jasperReport 动态合并单元格示例

    Java 中jasperReport实现动态列打印的实现代码

    主要介绍了Java 中jasperReport实现动态列打印的实现代码的相关资料,希望通过本文大家能掌握这部分内容,需要的朋友可以参考下

    jasperreport列合并

    jasperreport列合并,将导出的excel合并列

    JasperReport动态表头及subreport实现多表

    使用subreport实现多表分页并动态适应列数,目前还在努力实现中,后续将更新。。。

    动态生成JasperReports报表

    该小项目以编码形式实现了JaperReports的动态报表功能,以满足用户对报表的高度定制化。 使用该项目时的注意事项: 1.使用Eclipse导入该项目 2.下载JasperReports Library,将JasperReports的jar文件及其依赖jar...

    ireport固定表头隐藏列

    本报表在jasperreports-5.6.0基础上增加以下功能; 1、 表头固定 2、 列的隐藏及显示 3、 列的固定 示例代码可正常运行、本代码为非正式版

    jasper动态输出列 工程带jar包

    jasper动态输出列 工程带全部jar包 配置JDK即可运行 建议jdk 8

    基于jbpm与activiti的工作流平台技术架构介绍

    同时系统可以支持URL访问权限、数据权限、列权限及页面按钮权限的统一配置管理。系统的安全认证机制如下所示: 【图五】系统安全拦截原理 4.动态表单管理 BPMX3提供了基于数据库内部表、外部表、视图等来生成在线...

    JSP实用技巧集合,jsp编程的一些小技巧总结

    51. 使用iReport和Jasperreport开发报表? 52. 使用iText生成PDF? 53. 制作图片水印? 54. 在页面中屏蔽键盘功能键? 55. 禁止用户复制网页内容? 56. 实现不在地址拦中显示当前URL? 57. 获取用户的真实IP地址? 58...

    jsp编程技巧集锦

    使用iReport和Jasperreport开发报表? 52. 使用iText生成PDF? 53. 制作图片水印? 54. 在页面中屏蔽键盘功能键? 55. 禁止用户复制网页内容? 56. 实现不在地址拦中显示当前URL? 57. 获取用户的...

Global site tag (gtag.js) - Google Analytics