SpringBoot+AngularJS+Jaspersoft Studio实现多张报表打印控制

报表在JavaWeb中是个非常常用的技术,本文介绍使用SpringBoot+AngularJS+Jaspersoft Studio对报表打印进行实现
一.使用Jaspersoft Studio进行报表的绘制后,存放在src/main/resources/reports文件夹下。
二.实现多张报表生成后台代码详解
此方法应用了JasperReport和JRAbstractExporter包对报表进行无脑化编译。

     @RestController
     @RequestMapping(LevyDetailController.BASE_URL)
      public class LevyDetailController {
   

    public static Logger LOGGER = LoggerFactory.getLogger(LevyDetailController.class);

    /** 根路径 */
    public final static String BASE_URL = "/reports/levy";

    /** 报表打印服务接口类 */
    @Resource
    private LevyDetailService levyDetailService;

    @SuppressWarnings("unchecked")
    @RequestMapping(method = RequestMethod.GET)
    public void printReport(@RequestParam("format") String format, @RequestParam("companyId") Long companyId,
            @RequestParam(required = false) Long issue, @RequestParam(required = false) Long pageIndex,
            HttpServletRequest request, HttpServletResponse response) {
        String requestFullUri = request.getRequestURI() + "?" + request.getQueryString();
        OrganizationApplyService organizationApplyService = (OrganizationApplyService) SpringContextUtils
                .getApplicationContext().getBean("organizationApplyServiceImpl");
        OrganizationApply company = organizationApplyService.findByOrgId(companyId);
        // 获取报表数据
        CompanyLevyListDTO result = levyDetailService.getLevyDetail(company, issue);
        // result.setList(null);测试空报表
        // 打印控制获取上下文
        ApplicationContext ctx = SpringContextUtils.getApplicationContext();
        org.springframework.core.io.Resource resource = null;
        if (result.getList() == null) {
            // 生成空白报表
            resource = ctx.getResource("classpath:/reports/rptEmpty.jrxml");
        } else {
            resource = ctx.getResource("classpath:/reports/rptLevyDetailx.jrxml");
        }

        InputStream inputStream;
        try {
            // 译为输入流
            inputStream = resource.getInputStream();
            // 编译报表
            JasperReport jasperReport = JasperCompileManager.compileReport(inputStream);
            JRAbstractExporter exporter = new JRPdfExporter();
            List<JasperPrint> list = new ArrayList<>();
            // 多张报表打印实现
            if (result.getList() != null) {
                for (CompanyLevyDTO dto : result.getList()) {
                    // 获取报表数据map源
                    JasperPrint jasperprint = JasperFillManager.fillReport(jasperReport,
                            LevyDetaiFactorySolitary.getReportData(format, requestFullUri, dto, issue,
                                    company.getName(), company.getCompanyNumber()),
                            LevyDetaiFactorySolitary.mapData(dto.getLevyBodyListDTO()));
                    list.add(jasperprint);
                }
            } else {
                JasperPrint jasperprint = JasperFillManager.fillReport(jasperReport,
                        (Map<String, Object>) DefaultEmptyFactory.getReportData(format, requestFullUri),
                        DefaultEmptyFactory.mapData());

                list.add(jasperprint);
            }
            // 设置前台编译格式
            ServletOutputStream baos = response.getOutputStream();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, list);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
            exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
            exporter.exportReport();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JRException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    }

三.单张报表生成后台代码详解
此方法使用最基本SpringBooot response传入字节数组方式生成报表,代码如下:

 @RestController
 @RequestMapping(LevyDetailController.BASE_URL)
 public class LevyDetailController {
   

public static Logger LOGGER = LoggerFactory.getLogger(LevyDetailController.class);

/** 根路径 */
public final static String BASE_URL = "/reports/levy";

/** 报表打印服务接口类 */
@Resource
private LevyDetailService levyDetailService;

@Autowired
private PileStamperClient pileStamperClient;

@RequestMapping(method = RequestMethod.GET)
public void printReport(@RequestParam("format") String format,
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值