Jump to content
We've recently updated our Privacy Statement, available here ×

Pageheader cutted on new page


thiago.pimenta_1

Recommended Posts

Sometimes the pageheader is cut out when is in the begining of a page. Seems like a bug, because i'm not capable to reproduce this problem, some pages works fine but sometimes no(like the example, its missing pageheader "17 - blablablabla" ).
All .jrxml are the same with no diference, in jasper studio is all ok.
I'm using DynamicJasper to generate my many tables like that example in the .png  and joining for export in pdf. I will show a bite of code thats run this.
Somebody can help me pls?

private void generateSection(String titleSection, DynamicReportBuilder drb, Map<String, Object> section, Map<String, Object> params, boolean startOnNewPage) {      // Section      Style sectionStyle = new StyleBuilder(false, "sectionStyle")            .setTransparent(false)            .setBackgroundColor(new Color(155, 205, 155))            .setVerticalAlign(VerticalAlign.MIDDLE)            .setHorizontalAlign(HorizontalAlign.CENTER)            .setFont(FontPri.DEJAVU_SANS_LARGE_BOLD)            .build();      DynamicReportBuilder drbSection = new DynamicReportBuilder()            .setTitle(titleSection).setTitleStyle(sectionStyle)            .setTitleAnchorNameExpression(""" + titleSection + """)            .setTitleBookmarkLevel(1)            .setMargins(0, 0, 30, 15)            .setWhenNoDataAllSectionNoDetail();      DynamicReport drSection = drbSection.build();      drb.addConcatenatedReport(drSection,            new ClassicLayoutManager(),            null,            DJConstants.DATA_SOURCE_ORIGIN_PARAMETER,            DJConstants.DATA_SOURCE_TYPE_JRDATASOURCE,            startOnNewPage);      section.forEach((k, o) -> {         if (o instanceof Map) {            boolean isInformacoesGerais = "informacoesGerais.dados".equals(k);            Map<String, Object> tab = cast(o, Map.class);            DynamicReportBuilder drbTab = new DynamicReportBuilder()                  .setReportName(k)                  .setPrintBackgroundOnOddRows(true)                  .setMargins(30, 15, 30, 15)                  .setTitleHeight(15).setHeaderHeight(15)                  .setUseFullPageWidth(true)                  .setWhenNoDataAllSectionNoDetail();            setStyles(drbTab);            // Titulo e fonte da tabela da tabela            if (!isInformacoesGerais) {               drbTab.setTitle(tab.get("cod").toString() + " - " + tab.get("_descricao").toString());               drbTab.addAutoText("Fonte: " + coalesce(tab.get("_fonte"), "Desconhecida"),                     AutoText.POSITION_FOOTER, AutoText.ALIGNMENT_LEFT, 555,                     new Style("fonteStyle"));            }            // Configuração colunas da tabela            List<Map<String, Object>> fields = cast(tab.get("_fields"), List.class);            // Adicionar colunas            Boolean isMulti = (Boolean) tab.get("_isMulti");            Boolean isDescricao = !tab.values().stream()                  .filter(row -> row instanceof Map)                  .allMatch(row -> cast(row, Map.class).get("_descricao") == "");            if (!isMulti) {               if (isDescricao) {                  drbTab.addColumn(ColumnBuilder.getNew()                        .setColumnProperty("_descricao", String.class.getName())                        .setTitle(isInformacoesGerais ? null : tab.get("_eDesc").toString()).setWidth(150)                        .setHeaderStyle(new Style("descricaoHeaderStyle"))                        .setStyle(new Style("descricaoStyle"))                        .build());               }               for (Map<String, Object> field : fields) {                  drbTab.addColumn(ColumnBuilder.getNew()                        .setColumnProperty(field.get("key").toString(), String.class.getName())                        // sub.get("tipo") -> String, Integer, Float...                        .setTitle(isInformacoesGerais ? null : field.get("descricao").toString()).setWidth(80)                        .build());               }               // Transformar dados e inserir em parametros               ArrayList<Map<String, ?>> list = new ArrayList<>();               List<Integer> order = (List<Integer>) tab.get("_order");               for (Integer ecod: order) {                  Map<String, Object> evalue = cast(tab.get(ecod.toString()), Map.class);                  if (evalue == null) continue;                  HashMap<String, Object> row = new HashMap<>();                  row.put("_descricao", evalue.getOrDefault("_descricao", "--").toString());                  fields.forEach(field -> {                     Object resposta = evalue.get(field.get("key"));                     if(empty(resposta)) resposta = "";                     Object tipo = field.get("tipo"); // É por tipo mas por enquanto é possivel mapear pelo tipo da instancia                     if (resposta instanceof Map) {                        resposta = ((Map) resposta).getOrDefault("descricao", "");                     } else if (resposta instanceof List) {                        resposta = ((List) resposta).stream().map(r -> ((Map) r).getOrDefault("descricao", "")).reduce((d0, d1) -> d0 + "n" + d1).orElse("");                     }                     row.put(field.get("key").toString(), resposta.toString());                  });                  list.add(row);               }               params.put(k, new JRMapCollectionDataSource(list));            } else {               int indexColField = 0;               if (isDescricao) {                  int width = 150;                  String eDesc = tab.get("_eDesc").toString();                  // Estilizar condicional                  int qtdFields = (Integer) ((ArrayList) tab.get("_fields")).stream().filter(f -> f instanceof Map)                        .map(o1 -> ((List)((Map)o1).getOrDefault("fields", list(0))).size())                        .reduce((o1, o2) -> (int)o1 + (int)o2).get();                  if (qtdFields > 18) width = 150;                  else if (qtdFields > 14 && eDesc.length() > 3) width = 150;                  else if (qtdFields > 9) width = 70;                  else if (qtdFields > 6) width = 100;                  // ---------------                  drbTab.addColumn(ColumnBuilder.getNew()                        .setColumnProperty("_descricao", String.class.getName())                        .setTitle(eDesc).setWidth(width)                        .setHeaderStyle(new StyleBuilder(true, "descricaoMHeaderStyle", "headerStyle")                              .setVerticalAlign(VerticalAlign.MIDDLE)                              .setStretching(Stretching.RELATIVE_TO_BAND_HEIGHT)                              .build())                        .setStyle(new Style("descricaoStyle"))                        .build());                  indexColField = 1;               }               for (Map<String, Object> field : fields) {                  Boolean isMultiField = "multi".equals(field.get("tipo"));                  if(isMultiField) {                     List<Map<String, Object>> subfields = (List<Map<String, Object>>) field.get("fields");                     subfields.forEach(subfield -> {                        String keyProperty = field.get("key") + "." + subfield.get("key");                        drbTab.addColumn(ColumnBuilder.getNew()                              .setColumnProperty(keyProperty, String.class.getName())                              .setTitle(subfield.get("descricao").toString()).setWidth(85)                              .build());                     });                     drbTab.setColspan(indexColField, subfields.size(), field.get("descricao").toString());                     indexColField += subfields.size();                  } else {                     drbTab.addColumn(ColumnBuilder.getNew()                           .setColumnProperty(field.get("key").toString(), String.class.getName())                           .setTitle(field.get("descricao").toString()).setWidth(80)                           .setHeaderStyle(new StyleBuilder(true, "descricaoMHeaderStyle", "headerStyle")                                 .setHorizontalAlign(HorizontalAlign.CENTER)                                 .setVerticalAlign(VerticalAlign.MIDDLE)                                 .setStretching(Stretching.RELATIVE_TO_BAND_HEIGHT)                                 .build())                           .build());                     indexColField += 1;                  }               }               // Transformar dados e inserir em parametros               ArrayList<Map<String, ?>> list = new ArrayList<>();               List<Integer> order = (List<Integer>) tab.get("_order");               for (Integer ecod: order) {                  Map<String, Object> evalue = cast(tab.get(ecod.toString()), Map.class);                  if (evalue == null) continue;                  HashMap<String, Object> row = new HashMap<>();                  row.put("_descricao", evalue.get("_descricao").toString());                  fields.forEach(field -> {                     Boolean isMultiField = "multi".equals(field.get("tipo"));                     if(isMultiField) {                        List<Map<String, Object>> subfields = (List<Map<String, Object>>) field.get("fields");                        subfields.forEach(subfield -> {                           String keyProperty = field.get("key") + "." + subfield.get("key");                           Object resposta = evalue.get(keyProperty);                           if (empty(resposta)) resposta = "";                           Object tipo = field.get("tipo"); // É por tipo mas por enquanto é possivel mapear pelo tipo da instancia                           if (resposta instanceof Map) {                              resposta = ((Map) resposta).getOrDefault("descricao", "");                           } else if (resposta instanceof List) {                              resposta = ((List) resposta).stream().map(r -> ((Map) r).getOrDefault("descricao", "")).reduce((d0, d1) -> d0 + "n" + d1).orElse("");                           }                           row.put(keyProperty, resposta.toString());                        });                     } else {                        Object resposta = evalue.getOrDefault(field.get("key"), "");                        Object tipo = field.get("tipo"); // É por tipo mas por enquanto é possivel mapear pelo tipo da instancia                        if (resposta instanceof Map) {                           resposta = ((Map) resposta).getOrDefault("descricao", "");                        } else if (resposta instanceof List) {                           resposta = ((List) resposta).stream().map(r -> ((Map) r).getOrDefault("descricao", "")).reduce((d0, d1) -> d0 + "n" + d1).orElse("");                        }                        row.put(field.get("key").toString(), resposta.toString());                     }                  });                  list.add(row);               }               params.put(k, new JRMapCollectionDataSource(list));            }            try {               DynamicReport drTab = drbTab.build();               JasperReport jrTab = DynamicJasperHelper.generateJasperReport(drTab, new ClassicLayoutManager(), null);               jrTab.getPageHeader().setSplitType(SplitTypeEnum.PREVENT);               if(Env.isDev()) DynamicJasperHelper.generateJRXML(jrTab, "UTF-8",System.getProperty("user.dir")+ "/target/reports/" + k + ".jrxml");               drb.addConcatenatedReport(jrTab, k,                     DJConstants.DATA_SOURCE_ORIGIN_PARAMETER,                     DJConstants.DATA_SOURCE_TYPE_JRDATASOURCE);            } catch (Exception e) {               logger.error(e);            }         }      });   }[/code]

 

Link to comment
Share on other sites

  • Replies 3
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...