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; } }
相关推荐
Java 中jasperReport实现动态列打印的实现代码 Java 中jasperReport实现动态列打印的实现代码主要介绍了使用jasperReport实现动态列打印的相关知识点。下面将详细介绍相关知识点。 首先,jasperReport是一个流行的...
7. **动态参数和交互性**:JasperReport还支持动态参数,用户在运行时可以输入值,影响报表的数据和显示。此外,通过嵌入JavaScript或其他脚本,可以实现报表的交互功能,如按钮点击事件等。 这个测试项目很可能...
JasperReport 是基于 Java 的,主要用于生成动态业务报告。它提供了丰富的图形元素、数据绑定和模板设计功能,可以与各种数据库、Java 应用程序和框架(如 Spring)无缝集成。iReport 是 JasperReport 的设计工具,...
2. **表达式语言**:JasperReport使用Java Expression Language (JEL)进行计算和逻辑判断,允许开发者在报表中执行动态操作。 3. **样式和模板重用**:通过样式表(Styles)和模板(Subreports),开发者可以实现...
JasperReport是Java平台上的一个开源报表工具,被广泛用于生成动态业务报告。它的最新版本6.7.0提供了更多的功能和改进,以满足现代企业对数据可视化和报告的需求。在本篇文章中,我们将深入探讨JasperReport的核心...
- 更多的自定义设置,如脚本支持、动态列等。 ##### 4.16 脚本: - 使用 Java 脚本来实现更复杂的功能,如动态生成报表内容等。 #### 五、报表元素 ##### 5.1 选择并插入元素到报表中: - 描述如何选择和插入不同...
**JasperReport与iReport简介** JasperReport是一款开源的报告生成库,它...在实际项目中,合理地整合JasperReport到Web应用,不仅可以实现静态数据的展示,还可以实现动态数据的实时更新,为决策提供有力的数据支持。
字段则对应于数据源中的列,它们在报表中展示实际的数据。 此外,JasperReport还支持多种数据源,包括JDBC连接、JavaBeans、CSV文件等,这使得它能适应各种复杂的应用场景。通过实现特定的接口,用户可以将自己的...
### iReport-JasperReport 报表开发指南 #### 一、引言 iReport 是一个基于 Java 的开源项目,主要用于创建复杂报表。它利用了 JasperReports 引擎的强大功能,为开发者提供了一个可视化的设计界面,使得报表设计...
JasperReport是用Java编写的,它可以生成静态报表,也可以支持动态数据展示。它与Java的IReport设计工具结合使用,使得非技术人员也能通过直观的图形界面设计报表。 2. **报表设计** - **模板(JasperReport模板...
1. **Web应用集成**:将JasperReport与Servlet容器结合,通过HTTP请求动态生成报表。 2. **Eclipse插件**:有Eclipse插件支持JasperReport和iReport的集成,方便开发过程中的调试和测试。 3. **Spring框架整合**:...
Java报表打印过程中,需要将这些数据动态填充到报表模板中,生成最终的打印文档。 7. **打印事件和回调**:在Java Print Service API中,可以注册监听器来处理打印过程中的事件,如打印开始、页面完成、打印结束等...
4. **数据填充**:当动态数据填充到模板时,如果数据长度超出预期,可能会引起格式混乱。需要确保字段有足够的宽度来适应最长的数据值。 5. **特殊字符和转义**:在Word文档中,某些特殊字符可能需要转义,否则可能...
2. **Groups**:用于组织报表内容的逻辑分组,支持动态分页和汇总。 3. **Variables**:计算和存储值的变量,可用于计数、求和、平均等操作。 4. **Subreports**:嵌套在主报表中的独立报表,用于展示更详细的数据...
- **报表结构**:报表由多个部分组成,包括Title(标题)、PageHeader(页眉)、ColumnHeader(列头)、Detail(详细信息)和Summary(汇总)等。 - **参数和字段**:参数用于定义静态文本,可通过后台传递值;...
* Column Header(列头):Detail 中打印的是一张表的话,这 Column Header 就是表中列的列头。 * Column Footer(列脚):Detail 中打印的是一张表的话,这 Column Footer 就是表中列的列脚。 * Summary(统计):...
报表结构在 JasperReport 中通过一系列“带”(Band)来定义,如标题带(Title)、页眉带(Page Header)、内容带(Content)、列头带(Column Header)、行带(Row)、列脚带(Column Footer)、页脚带(Page ...
7. **表达式(Expressions)**:用于计算和转换数据,可以根据需要动态改变报表内容。 **使用JasperReports的过程** 1. **设计jrxml模板**:使用JasperReport Designer或类似的工具设计报表布局。 2. **编译jrxml**...
列出了一些在使用JasperReport时可能遇到的问题及其解决方案,如系统属性设置、Swing应用关闭问题、逻辑运算符使用限制、序列化异常以及图片在XLS格式中不显示等。 5. 屏幕截图 这部分提供了不同报表部分的视觉示例...