Page 1 of 3
Add a new page dynamically
Posted: Tue Jul 14, 2015 12:50 pm
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
Re: Add a new page dynamically
Posted: Wed Jul 15, 2015 12:17 pm
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.
Re: Add a new page dynamically
Posted: Mon Jul 20, 2015 7:27 pm
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

Re: Add a new page dynamically
Posted: Tue Jul 21, 2015 2:42 pm
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.
Re: Add a new page dynamically
Posted: Tue Sep 22, 2015 8:30 pm
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

Re: Add a new page dynamically
Posted: Wed Sep 23, 2015 6:14 am
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;
Re: Add a new page dynamically
Posted: Wed Sep 23, 2015 11:42 am
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.. :/
Re: Add a new page dynamically
Posted: Thu Sep 24, 2015 10:28 am
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());
}
Re: Add a new page dynamically
Posted: Thu Sep 24, 2015 11:41 am
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);
Re: Add a new page dynamically
Posted: Thu Sep 24, 2015 12:34 pm
by Vadim
Hello
Here is working example, you can see that code works & you can adapt it with your application;