private String createTimeCardReport(ReportVo reportVo, List<DocumentVo> documentVos) {
    if (documentVos == null) return "";
    HtmlGenerator htmlGenerator = new HtmlGenerator();
    Map<String, Object> variables = new HashMap<String, Object>();
    String timeCardReportHead = null;
    Template timeCardReportTable = null;
    Template timeCardReportTr = null;
    StringBuffer timeCardReportTableStrs = new StringBuffer();

    int index = 0;
    String templateHead = "config/templates/" + reportVo.getReportType() + "_head.html";
    String templateTable = "config/templates/" + reportVo.getReportType() + "_table.html";
    String templateTr = "config/templates/" + reportVo.getReportType() + "_tr.html";
    try {
      for (DocumentVo documentVo : documentVos) {
        variables = documentVo.fillDataMap();
        if (index == 0) {
          timeCardReportHead = htmlGenerator.generate(templateHead, variables);
          timeCardReportTable = htmlGenerator.generate(templateTable);
          timeCardReportTr = htmlGenerator.generate(templateTr);
        }
        String timeCardReportTableStr = htmlGenerator.generate(timeCardReportTable, variables);
        timeCardReportTableStrs.append(
            timeCardReportTableStr.replace(
                "#tr#", createTimeCardTrReport(timeCardReportTr, documentVo, htmlGenerator)));
      }
      return timeCardReportHead.replace("#table#", timeCardReportTableStrs.toString());
    } catch (IOException e) {
      e.printStackTrace();
    } catch (TemplateException e) {
      e.printStackTrace();
    }
    return "";
  }
 private String createTimeCardTrReport(
     Template timeCardReportTr, DocumentVo documentVo, HtmlGenerator htmlGenerator) {
   try {
     Map<String, Object> variables = new HashMap<String, Object>();
     variables = documentVo.fillDataMap();
     StringBuffer timeCardReportTrStr = new StringBuffer();
     timeCardReportTrStr.append(htmlGenerator.generate(timeCardReportTr, variables));
     return timeCardReportTrStr.toString();
   } catch (IOException e) {
     e.printStackTrace();
   } catch (TemplateException e) {
     e.printStackTrace();
   }
   return "";
 }