转自:http://www.cnblogs.com/ms-grf/p/6756243.html
报表js
$scope.printCpTempletMasterDetail = function (cpId) {
        var parameters = {
            reportFileName: "reports/doctorstation/CpTempletMasterDetail.jasper",
            parameters: {
                'cpId': cpId
            }
        };
        var printInfoObject = {
            type: "report",
            appletParameters: {
                is_direct_print: true,
                is_display: false,
                printer_name: null,
                report_url: "api/jasper-prints/doctor-station/cp-order-detail"
            },
            reportParameter: parameters
        };
        HrUtils.postMessageToBaseFrame(printInfoObject, "*");
    };
报表DoctorstationPrintResource.java
package com.heren.his.report.api;
import com.heren.his.report.facade.DoctorstationPrintFacade;
import com.heren.his.report.vo.JasperPrintParamsVo;
import net.sf.jasperreports.engine.JasperPrint;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Path("doctor-station")
public class DoctorstationPrintResource {
    @javax.inject.Inject
    private DoctorstationPrintFacade doctorstationPrintFacade;
    /**
     * 打印路径明细
     * @param parameters
     * @return
     */
    @GET
    @Path("cp-order-detail")
    @Produces({MediaType.APPLICATION_OCTET_STREAM})
    public JasperPrint fillCpTempletMasterDetailReport(@QueryParam("parameter") JasperPrintParamsVo parameters){
        return doctorstationPrintFacade.fillCpTempletMasterDetailReport(parameters);
    }
}
报表DoctorstationPrintFacade.java
package com.heren.his.report.facade;
import com.google.common.base.Strings;
import com.heren.his.report.common.HrResultSet;
import com.heren.his.report.vo.JasperPrintParamsVo;
import com.heren.his.report.vo.doctorstation.ErOutpBloodDetail;
import com.heren.his.report.vo.doctorstation.ErOutpBloodVO;
import com.heren.his.report.vo.doctorstation.MedicalRecordInfoVO;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.data.JRMapCollectionDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static com.heren.his.report.util.ReportUtils.obtainJasperReportByFileName;
public class DoctorstationPrintFacade extends BaseJasperFillFacade {
    private static final Logger LOGGER = LoggerFactory.getLogger(DoctorstationPrintFacade.class);
    @Inject
    private MedicalInfoDataFacade medicalInfoDataFacade;
    /**
     * 打印路径医嘱明细
     *
     * @param jasperPrintParamsVo
     * @return
     */
    public JasperPrint fillCpTempletMasterDetailReport(JasperPrintParamsVo jasperPrintParamsVo) {
        LOGGER.debug("填充报表[{}];填充时使用参数:[{}]。", jasperPrintParamsVo.getReportFileName(), jasperPrintParamsVo.getParameters());
        Map reportParam = jasperPrintParamsVo.getParameters();//js里面的cpId
        reportParam.put("SUBREPORT_DIR", "reports/doctorstation/");
        return hrFillReportWithConnection(obtainJasperReportByFileName(jasperPrintParamsVo.getReportFileName()), reportParam);
    }
}
报表
1:创建主报表master.jrxml
先在master.jrxml新建两个parameters,名字是上面代码中红色标注的 如下图
cpId是用来写sql的主键,而SUBREPORT_DIR是用来连接子报表的一个地址

开始写master.jrxml的sql语句如下图
 
写完sql点击Read Fields就可以把master.jrxml里用到的参数放置在Fields里面了

完善master.jrxml
2:建立子报表 nurse.jrxml




下面这个STAGE_ID是从父报表传到子报表的参数(因为子报表也需要写sql也需要查询条件)

子报表建立完成
 
最主要的一点配置子报表如下

然后把连接子报表的SUBREPORT_DIR变量设置一下如下

生成.jasper文件如下

做测试如下

                    
                

                
            
        
浙公网安备 33010602011771号