package com.ag.secp.platform.office.pdf;

import cn.hutool.core.date.DateUtil;
import com.ag.util.StrUtil;
import com.raqsoft.report.model.ReportDefine;
import com.raqsoft.report.usermodel.Context;
import com.raqsoft.report.usermodel.Engine;
import com.raqsoft.report.usermodel.IReport;
import com.raqsoft.report.util.ReportUtils;

import java.util.Date;
import java.util.Map;
import java.util.UUID;

/**
 * Description: 通过润乾报表动态生成pdf,输出到服务器目录
 * Author: agsoft
 * Version: 1.0
 * Create Date: 2020-06-02 09:36:26
 */
public class ExportPdfWithRqsoft {


    /**
     * 生成pdf文件
     *
     * @param reporttemplatename 报表模板名称
     * @param reporttemplatePath 报表模板存放路径
     * @param pdffileGenpath     报表文件生成路径
     * @param paramMap           报表查询参数
     * @param filename           报表生成的文件名
     */
    public void genPdf(String reporttemplatename, String reporttemplatePath, String pdffileGenpath, Map paramMap, String filename) {
        //保证报表名称的完整性
        int iTmp = 0;
        if ((iTmp = reporttemplatename.lastIndexOf(".rpx")) <= 0) {
            reporttemplatename = reporttemplatename + ".rpx";
            iTmp = 0;
        }
        String reportFile = reporttemplatePath + reporttemplatename;
        Context cxt = new Context();
        try {
            ReportDefine rd = (ReportDefine) ReportUtils.read(reportFile);
            for (Object key : paramMap.entrySet()) {
                cxt.setParamValue(key.toString(), paramMap.get(key).toString());//报表需要传递的参数
            }
            Engine engine = new Engine(rd, cxt);   //构造报表引擎
            IReport iReport = engine.calc();   //运算报表
            if (StrUtil.isEmpty(filename))
                filename = DateUtil.format(new Date(), "yyyy-MM-dd") + "-" + UUID.randomUUID() + ".pdf";
            ReportUtils.exportToPDF(pdffileGenpath + filename, iReport);
        } catch (Throwable e) {
            e.printStackTrace();
        }

    }
}
