JasperReport动态列

系统 1424 0
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动态列


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论