Add a new page dynamically

Stimulsoft Reports.JAVA discussion
User avatar
rafaelwithoeft
Posts: 70
Joined: Thu Mar 05, 2015 8:26 pm

Add a new page dynamically

Post by rafaelwithoeft »

Hello, i have two reports (front and back and are separated files), customer like to print the pages, he has a chance to choice if want to print only "front page" or "front and back pages" together.
In this case, i need add "back page" dynamically.

This case is normally used for letters where we can have the content (inside) and out the sender information, Recipient etc ... (outside) on the same sheet.

Knowing that the pages are separated files, how can i add the "back page" dynamically to "front page"?

Thank you
Vladimir
Posts: 1462
Joined: Fri Apr 13, 2007 4:05 am
Location: Earth

Re: Add a new page dynamically

Post by Vladimir »

Hello,

Please try to use this code. This code combines two built report:

Code: Select all

StiReport sourceReport = new StiReport(); // load report 1
sourceReport.render();

// Open and render second report
StiReport sourceReport2 = new StiReport(); // load report 2
sourceReport2.render();

// Now create report and copy rendered page from the reports
StiReport report = new StiReport();
report.setIsRendered(true);

StiUnit newUnit = StiUnit.GetUnitFromReportUnit(report.getReportUnit());

for(StiPage page : sourceReport.getRenderedPages()) {
    page.setReport(report);
    page.NewGuid();
    StiUnit oldUnit = StiUnit.GetUnitFromReportUnit(sourceReport.getReportUnit());
    if (report.getReportUnit() != sourceReport.getReportUnit()) page.convert(oldUnit, newUnit);
    report.getRenderedPages.add(page);
}

for(StiPage page : sourceReport2.getRenderedPages()) {
    page.setReport(report);
    page.NewGuid();
    StiUnit oldUnit = StiUnit.GetUnitFromReportUnit(sourceReport2.getReportUnit());
    if (report.getReportUnit() != sourceReport2.getReportUnit()) page.convert(oldUnit, newUnit);
    report.getRenderedPages().add(page);
}
Thank you.
User avatar
rafaelwithoeft
Posts: 70
Joined: Thu Mar 05, 2015 8:26 pm

Re: Add a new page dynamically

Post by rafaelwithoeft »

Hello, thank you... but it did not work for me :|
I tried this code:

Code: Select all

StiPage page = relatorioVerso.getPages().get(0); // Page  verse to add to current report
page.setReport(relatorioOriginal);		
relatorioOriginal.getPages().addPage(page);
This add me a verse page, but only one page... For example, my report has 6 pages (after render) and only one verse page.

I need, 1 rendered page, 1 verse, 1 rendered page, 1 verse...

How i do it?
Thank you :D
HighAley
Posts: 8431
Joined: Wed Jun 08, 2011 7:40 am
Location: Stimulsoft Office

Re: Add a new page dynamically

Post by HighAley »

Hello, Rafael.

As a way you can create a new report and copy rendered pages there. One from rendered report, one verse and so on.

Thank you.
User avatar
rafaelwithoeft
Posts: 70
Joined: Thu Mar 05, 2015 8:26 pm

Re: Add a new page dynamically

Post by rafaelwithoeft »

Hello, im trying this code, but not working, sometimes return rendered page blank or returning NullPointerException...

you can help me please?

Code: Select all

//New Report
StiReport report = new StiReport();
report.setIsRendered(true);

//get back page report
InputStream stream = new ByteArrayInputStream(relatorioXmlString.getBytes(StandardCharsets.UTF_8));
StiReport relatorioVerso = StiSerializeManager.deserializeReport(stream);

relatorioOriginal.render(); // render main report
relatorioVerso.render(); // render back page

//back page
StiPage paginaVerso = relatorioVerso.getRenderedPages().get(0);
paginaVerso.setReport(report);
paginaVerso.NewGuid();

//foreach all rendered pages of main report and trying to add back page 
for (StiPage page : relatorioOriginal.getRenderedPages()) {
	page.setReport(report);
	page.NewGuid();
	report.getRenderedPages().add(page);
	report.getRenderedPages().add(paginaVerso);
}
return report;
Thank you :)
Vadim
Posts: 363
Joined: Tue Apr 23, 2013 11:23 am

Re: Add a new page dynamically

Post by Vadim »

Hello.
You can try next code:

Code: Select all

//New Report
StiReport report = new StiReport();
report.setIsRendered(true);

//get back page report
InputStream stream = new ByteArrayInputStream(relatorioXmlString.getBytes(StandardCharsets.UTF_8));
StiReport relatorioVerso = StiSerializeManager.deserializeReport(stream);

relatorioOriginal.render(); // render main report
relatorioVerso.render(); // render back page

//back page
StiPage paginaVerso = relatorioVerso.getRenderedPages().get(0);
paginaVerso.setReport(report);
paginaVerso.NewGuid();
report.getRenderedPages().add(paginaVerso);

//foreach all rendered pages of main report and trying to add back page
for (StiPage page : relatorioOriginal.getRenderedPages()) {
   page.setReport(report);
   page.NewGuid();
   report.getRenderedPages().add(page);
}
return report;
User avatar
rafaelwithoeft
Posts: 70
Joined: Thu Mar 05, 2015 8:26 pm

Re: Add a new page dynamically

Post by rafaelwithoeft »

Not working :|
i don't know how i do it...

I need render main report and add back page to each page rendered of main report.. :/
Vadim
Posts: 363
Joined: Tue Apr 23, 2013 11:23 am

Re: Add a new page dynamically

Post by Vadim »

Hello.
Here is working example:

Code: Select all

 StiReport outReport = StiReport.newInstance();
        outReport.setBookmark(report1.getBookmark());
        outReport.getRenderedPages().clear();
        for (StiPage page : report1.getRenderedPages()) {
            outReport.getRenderedPages().add(page);
            outReport.getRenderedPages().add((StiPage) report2.getRenderedPages().get(0).clone());
        }
User avatar
rafaelwithoeft
Posts: 70
Joined: Thu Mar 05, 2015 8:26 pm

Re: Add a new page dynamically

Post by rafaelwithoeft »

Sorry, same problem, render only one blank page.
if i comment this code and go back the original report, this render normally.


* Using latest version

** Tried this code below too(not worked, rendered only pages of master report):

Code: Select all

//get back page report
InputStream stream = new ByteArrayInputStream(relatorioXmlString.getBytes(StandardCharsets.UTF_8));
StiReport relatorioVerso = StiSerializeManager.deserializeReport(stream);

relatorioOriginal.render(); // render main report
relatorioVerso.render(); // render back page
			
StiPagesCollection collection = new StiPagesCollection();
for (StiPage page : relatorioOriginal.getRenderedPages()) {
    collection.add(page);
    collection.add((StiPage) relatorioVerso.getRenderedPages().get(0).clone());
}
relatorioOriginal.getRenderedPages().clear();
relatorioOriginal.setRenderedPages(collection);
Vadim
Posts: 363
Joined: Tue Apr 23, 2013 11:23 am

Re: Add a new page dynamically

Post by Vadim »

Hello
Here is working example, you can see that code works & you can adapt it with your application;
Attachments
new_page.zip
(726.94 KiB) Downloaded 883 times
Post Reply