【问题标题】:How to auto stretch detail band when print order is set to "horizontal" in JasperReport?在 JasperReport 中将打印顺序设置为“水平”时如何自动拉伸细节带?
【发布时间】:2015-04-18 12:18:16
【问题描述】:

我有一个横向打印的主报告。它有 5 列。 在每一列我想放一个子报告。所以我创建了这个:

而子报告是这样的:

问题是,当我运行时出现以下异常:

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

当 jasper 报告中有子报告并且打印顺序设置为水平时,似乎无法垂直拉伸详细信息带。

我能做些什么来避免这个错误并实现我想要的?

【问题讨论】:

  • 你能提供你的jrxml文件吗?
  • 尝试添加一个文本字段并在文本字段内创建您的实际字段变量

标签: java jasper-reports


【解决方案1】:

我找到了解决这个问题的方法。经过深入搜索后,我发现,可悲的是,在 Jasper Reports 上没有办法做到这一点,因为无论如何,当你有一个水平打印的报告时,“细节”带永远不会改变它的高度。因此,溢出的子报表或文本字段将引发异常。

此问题的解决方法是在没有报告的情况下工作,例如使用 iText 之类的 PDF 生成器。 如果有人需要,这是我使用 iText 实现我想要的代码:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多