2012-06-26 3 views
2

Можно ли объединить субресурсы в кадре, размещенном в полосе деталей? Цель состоит в том, чтобы отобразить эти субресурсы и предыдущие определенные элементы в разделе «Детали» из шаблона.dynamicjasper addConcatenatedReport в кадре

Если я использую dynamicReportBuilder.setTemplateFile(TEMPLATE); и dynamicReportBuilder.addConcatenatedReport(subreport);, чтобы вставить подзаголовки в подробный отчет, который загружен из шаблона, предыдущие определенные элементы в детализации элемента шаблона отчета исчезают. Поэтому я ищу способ сохранить эти элементы.

+0

Это не ясно, в вашем вопросе, что вы пытаетесь сделать. Можете ли вы объяснить больше или, может быть, создать картинку, чтобы попытаться объяснить, что именно вы пытаетесь сделать? –

+0

Если я использую 'dynamicReportBuilder.setTemplateFile (TEMPLATE);' и 'dynamicReportBuilder.addConcatenatedReport (subreport);', чтобы вставлять вложенные отчеты в подробный отчет, который загружается из шаблона, предыдущие определенные элементы в диалоговом окне Детали шаблона отчета ива. Поэтому я ищу способ сохранить эти элементы. –

ответ

1

Основываясь на ваших комментариях, кажется, что происходит одна из двух вещей.

1) У вас есть под-отчет, определенный в диапазоне Detail файла шаблона.

В этом случае это не сработает. Полоса Detail в файле шаблона должна быть пустой. Если это так, то более вероятно, что вы просто игнорируете то, что у вас есть, и делаете все остальное. За дополнительной информацией обращайтесь к HOW-TO Use custum jrxml templates.

2) dynamicReportBuilder.addConcatenatedReport(subreport); не делает, что вы думаете.

Этот метод добавляет второй отчет в конец первого отчета. Подумайте об этом больше как о партии. Это то же самое, что установка значения для JASPER_PRINT_LIST в качестве параметра экспорта при непосредственном использовании API отчетов Jasper. За дополнительной информацией обращайтесь к HOW-TO Add Concatenated Reports.


Dynamic Jasper - отличная библиотека, но на самом деле предназначена только для работы со стандартными табличными отчетами. Он поддерживает некоторые дополнительные функции, включая суб-отчеты, но может быть ограниченным.

Из того, что я могу найти до сих пор, возможно, вы можете добавлять только суб-отчеты в верхние и нижние колонтитулы групп. Таким образом, в вашем случае вам, вероятно, потребуется добавить группу для отчета сначала, используя GroupBuilder. Затем вы можете добавить вспомогательный отчет в нижний колонтитул группы. Трюк для группы состоит в том, чтобы убедиться, что каждая строка станет ее собственной группой, выбрав соответствующие поля для группировки.

Вы можете посмотреть примеры кода в HOW-TO Add labels in group header and footer, чтобы посмотреть, как создавать группы.

Чтобы посмотреть, как добавить к отчету отчеты, вы можете использовать метод DynamicReportBuilder.addSubreportInGroupFooter(). Для получения дополнительной информации об этой части и примере см. HOW-TO Add Subreports (fast way).

Другой вариант, который у вас есть, - не использовать Dynamic Jasper для этого конкретного отчета и просто использовать файлы jrxml и API Jasper Report для этого. Это может быть или не быть проще в зависимости от вашей установки.

+0

Спасибо @jschoen. Ваши комментарии очень полезны. Я ищу новый подход, используя Dynamic Reports 2.5.1. Когда у меня будет решение, я опубликую здесь. –

+0

Проблема заключается в следующем: мне нужно распечатать текст только в нижней части первой страницы, и я пробовал много кода неудачно, потому что на следующих страницах напечатано раздражающее пустое пространство. –

+0

Хавьер, вам нужно выслать какой-то код или что-то в своем вопросе, чтобы понять, что именно вы пытаетесь сделать. Может быть, небольшой пример работы, который показывает проблему. Я хочу помочь, но без кода я не могу. –

0

Автор Ricardo Mariaca. Этот код является решением, Спасибо Рикардо и Dynamic Report

private void build() { 
    try { 
     JasperPdfExporterBuilder pdfExporterBuilder = export 
       .pdfExporter(PDF_FILE); 
     JasperReportBuilder jasperReportBuilderMain = report() 
       .columns(
         col.column("Item", "item", type.stringType()), 
         col.column("Quantity", "quantity", 
           type.integerType()), 
         col.column("Unit price", "unitprice", 
           type.bigDecimalType())) 
       .setDataSource(createSubreportDataSource()) 
       // .detail(cmp.subreport(createSubreport())) 
       .setWhenNoDataType(WhenNoDataType.ALL_SECTIONS_NO_DETAIL); 

     JasperReportBuilder jasperReportBuilderDisclaimer = report() 
       .setPageFormat(PageType.A4, PageOrientation.LANDSCAPE) 
       .summary(cmp.subreport(jasperReportBuilderMain)) 
       .summaryWithPageHeaderAndFooter() 
       .setWhenNoDataType(WhenNoDataType.ALL_SECTIONS_NO_DETAIL) 
       .columnHeader(
         cmp.text("first page header").setFixedHeight(50)) 
       .columnFooter(
         cmp.text(DISCLAIMER).setStretchWithOverflow(true) 
           .setFixedHeight(250)) 
       .pageHeader(
         Templates 
           .createTitleComponent("Ricardo Mariaca Approach")) 
       .pageFooter(Templates.footerComponent).show() 
       .toPdf(pdfExporterBuilder); 

    } catch (DRException e) { 
     e.printStackTrace(); 
    } 
} 

private JRDataSource createSubreportDataSource() { 
    DRDataSource dataSource = new DRDataSource("item", "quantity", 
      "unitprice"); 
    for (int i = 0; i < 180; i++) { 
     dataSource.add("Book", (int) (Math.random() * 10) + 1, 
       new BigDecimal(Math.random() * 100 + 1)); 
    } 
    return dataSource; 
} 

}

Смежные вопросы