2015-04-18 24 views
7

Ho un rapporto principale che viene stampato orizzontalmente. Ha 5 colonne. Su ogni colonna voglio mettere un rapporto secondario. Così ho creato questo:Come estendere automaticamente la banda di dettaglio quando l'ordine di stampa è impostato su "orizzontale" in JasperReport?

Main report

e il sub-report proprio come questo:

Subreport

Il problema è che quando ho eseguito io ottenere la seguente eccezione:

net.sf.jasperreports.engine.JRRuntimeException: Subreport overflowed on a band that does not support overflow. 

Sembra che i report jasper non possano allungare verticalmente la banda di dettagli quando è presente un sottoreport e l'ordine di stampa i s impostato su orizzontale.

Cosa posso fare per evitare questo errore e ottenere quello che voglio?

+1

Si può fornire il file jrxml? – user1791574

+0

prova ad aggiungere un campo di testo e all'interno del campo di testo crea la tua variabile di campo attuale – Arasu

risposta

1

Ho trovato la soluzione per questo problema. Dopo una ricerca approfondita ho scoperto che, purtroppo, non c'è modo di farlo su Jasper Reports perché, non importa cosa, quando hai un rapporto stampato orizzontalmente, la banda "Dettaglio" non cambierà mai la sua altezza. Pertanto, i sottoreport o i campi di testo che escono generano un'eccezione.

La soluzione per questo problema è lavorare senza report, ad esempio con un generatore di PDF come iText. Questo è il codice che ho fatto per achive quello che volevo con iText se qualcuno ne ha bisogno:

Document document = new Document(); 
File arquivo = new File("C:\\Users\\Mateus\\Desktop\\testezãozarãozão.pdf"); 
PdfWriter.getInstance(document, new FileOutputStream(arquivo)); 
document.open(); 

LinkedHashMap<Produto, LinkedHashMap<String, List<PrePedidoItem>>> produtos = createStructuredHashMap(); 

for (Produto produto : produtos.keySet()) { 
    PdfPTable table = new PdfPTable(5); 
    PdfPCell cellProduto = new PdfPCell(); 
    Phrase phraseProduto = new Phrase(String.valueOf(produto)); 
    phraseProduto.setFont(new Font(Font.FontFamily.HELVETICA, 11, Font.BOLD|Font.UNDERLINE, new BaseColor(50, 65, 200))); 
    cellProduto.addElement(phraseProduto); 
    cellProduto.setColspan(5); 
    cellProduto.setHorizontalAlignment(PdfPCell.ALIGN_MIDDLE); 
    cellProduto.setBorder(Rectangle.NO_BORDER); 
    cellProduto.setPaddingBottom(10); 
    cellProduto.setPaddingTop(20); 
    table.addCell(cellProduto); 
    LinkedHashMap<String, List<PrePedidoItem>> mapas = produtos.get(produto); 
    int mapasAdicionados = 0; 
    for (String mapa : mapas.keySet()) { 
     PdfPCell cellMapa = new PdfPCell(); 
     Phrase phraseMapa = new Phrase(mapa); 
     phraseMapa.setFont(new Font(Font.FontFamily.HELVETICA, 9, Font.BOLD, new BaseColor(215, 100, 0))); 
     cellMapa.addElement(phraseMapa); 
     List<PrePedidoItem> itensDoMapa = mapas.get(mapa); 
     for (PrePedidoItem item : itensDoMapa) { 
      DecimalFormat df = new DecimalFormat("###,##0.00"); 
      Phrase phraseItem = new Phrase(df.format(item.getLargura()) + " x " + df.format(item.getComprimento())); 
      phraseItem.setFont(new Font(Font.FontFamily.HELVETICA, 9, Font.NORMAL, BaseColor.BLACK)); 
      cellMapa.addElement(phraseItem); 
     } 
     cellMapa.setBorder(Rectangle.NO_BORDER); 
     table.addCell(cellMapa); 
     mapasAdicionados ++; 
     if(mapasAdicionados == 5) { 
      mapasAdicionados = 0; 
     } 
    } 
    PdfPCell celulaPreenchimentoMapas = new PdfPCell(); 
    celulaPreenchimentoMapas.setColspan(5 - mapasAdicionados); 
    celulaPreenchimentoMapas.setBorder(Rectangle.NO_BORDER); 
    table.addCell(celulaPreenchimentoMapas); 
    document.add(table); 
} 

document.close(); 
Desktop.getDesktop().open(arquivo);