2010-04-19 3 views
7

Я новичок в JasperReports. Я могу создать простой PDF-документ с Javabean datasource. В моем проекте я создал два отдельных pdf-документа с отдельным javabean datasource. Теперь я хочу объединить оба документа в один документ. Может ли кто-нибудь сказать мне, как объединить оба документа в один документ с помощью JasperReports?Как объединить два документа PDF в один отчет в JasperReports?

ответ

1

Вы можете использовать подзаголовок для этого. Вам не нужно воссоздавать ваши текущие отчеты. Создайте главный отчет с 0 полями. Добавьте все свои отчеты к этому в качестве подзаголовка и поставьте условие, что, если источник данных доступен для этого, только затем распечатайте этот отчет. Теперь поместите все ваши отдельные источники данных в один источник данных карты и передайте этот источник данных для получения основного отчета. Конфигурируйте все подписи к ключу на карте.

23

к сожалению, решение построить отчет к югу и использовать 2 различных DataSource или что-либо соединения вы использовали

но есть простой способ получить над этим вопросом: D просто просто нет новых сообщений .. ... Вуаля

оК позволяет сделать это

JasperPrint jp1 = JasperFillManager.fillReport(url.openStream(), parameters, 
        new JRBeanCollectionDataSource(inspBean)); 
JasperPrint jp2 = JasperFillManager.fillReport(url.openStream(), parameters, 
        new JRBeanCollectionDataSource(inspBean)); 

нормально мы имеем более 2 записей ..lets принять нашу первую запись JP1 и добавьте контент JP2 в него

List pages = jp2 .getPages(); 
for (int j = 0; j < pages.size(); j++) { 
    JRPrintPage object = (JRPrintPage)pages.get(j); 
    jp1.addPage(object); 

} 
JasperViewer.viewReport(jp1,false); 

Эта работа как шарм .. с парой петель вы можете объединить любое количество отчета вместе .. без создания новых отчетов

http://lnhomez.blogspot.com/2011/11/merge-multiple-jasper-reports-in-to.html

+0

+1 Легкое и изящное решение, после того как я столкнулся с подписями, панорамируя друг над другом и еще много чего. – Smig

+0

Это приятное решение (спасибо Lahiru), поскольку у нас есть требование, когда два разных уведомления о языках должны быть отправлены клиентам, а клиент может выбрать оба или один язык. То, что @lahiru предложило, идеально подходит для нашей корзины. – Anand

+0

Я думаю, что это может быть решением для проблемы ниже. Http: //stackoverflow.com/questions/29974890/how-can-i-have-multiple-jrbeancollectiondatasource-in-jasperfillmanager-fillrepo – prime

0

несколько страниц в одном JasperPrint

Пример кода :

DefaultTableModel dtm = new DefaultTableModel(new Object[0][3], new String[]{"Id","Name","Family"}); 
String[] fields= new String[3];  
boolean firstFlag=true; 
JasperPrint jp1 =null; 
JasperPrint jp2 =null; 
for (int i=0 ; i<=pagesCount ; i++) 
{ 
    fields[0]= "id"; 
    fields[1]= "name"; 
    fields[2]= "family"; 
    dtm.insertRow(0, fields); 
    try 
    { 
     Map<String, Object> params = new HashMap<String, Object>();     
     if (firstFlag) 
     { 
     jp1 = JasperFillManager.fillReport(getClass().getResourceAsStream(reportsource), params, new JRTableModelDataSource(dtm));     
     firstFlag=false;        
     }else 
     { 
     jp2 = JasperFillManager.fillReport(getClass().getResourceAsStream(reportsource), params, new JRTableModelDataSource(dtm)); 
     jp1.addPage(jp2.getPages().get(0)); 
     }  
    }catch (Exception e) 
    { 
     System.out.println(e.fillInStackTrace().getMessage()); 
    } 
} 
JasperViewer.viewReport(jp1,false); 
Смежные вопросы