Jump to content
Changes to the Jaspersoft community edition download ×

How can I use JasperFillManager.fillReportToStream?


klingela
Go to solution Solved by teodord,

Recommended Posts

 

I have a simple Java program that takes a .jrxml file, compiles it, then fills it. The data for the report is supplied in an XML file. After the fill is done, the data is exported to PDF.

// Parse input documentDocument document = JRXmlUtils.parse(new File(xmlFile));// Set it as the data source in the parametersparameters.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, document);// Create and set the virtualizerJRFileVirtualizer virtualizer = new JRFileVirtualizer(2, "/tmp");virtualizer.setReadOnly(true);parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);// Fill the reportString jasperFile = designFile.replaceAll(".jrxml",".jasper");print = JasperFillManager.fillReport(jasperFile, parameters);// Export the report to PDFArrayList<JasperPrint> jasperPrints = new ArrayList<JasperPrint>();jasperPrints.add(print);JRPdfExporter exp = new JRPdfExporter();exp.setParameter (JRExporterParameter.JASPER_PRINT_LIST, jasperPrints);exp.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFileName );exp.exportReport();[/code]

My confusion is about the export

That fill line above works great for small reports, but once I get an XML source file approaching 1/2 MB, it will spin for over a day, regardless of setting the file virtualizer (which I do).

I see there is another method called fillReportToSteam. My confusion is that with fillReport, I have to do an extra step to export to PDF. What sort of stream is fillReportToStream writing to, and how do I specify that? Will fillReportToStream write to a PDF file?

I haven't been able to find any examples. I was hoping I could take advantage of the stream so that I could measure the progress and get these PDFs to complete in a normal span of time.

UPDATE: fillReportToStream doesn't work for PDF files, at least in 4.7. That's extremely unfortunate. It "creates" a PDF file, but it's corrups and can't be read. And even then, it doesn't work any different than what I do above. In other words, for my 1/2 MB source file, it just sits and churns forever with the PDF file at 0 bytes.

UPDATE 2: Looks like it creates JasperPrint files.

UPDATE 3: I have the "streaming" solution working for an extremely small file. But for the "large" file (like 1/2 of a MB is large) it churns at 100% CPU for 2 hours, and the file that is supposed to be "streamed" to is still at zero bytes.

The hits seem to keep coming with this JasperReports library. I've done some interesting stuff with it in the past, but ever since I "upgraded" from 3.5 to 4.7, I am dead in the water.

Link to comment
Share on other sites

  • Replies 5
  • Created
  • Last Reply

Top Posters In This Topic

klingela,

Until somone with a better answer shows up, try looking at some of these performance related pages to see if they help in troubleshooting.  You might want to file an Issue under the Tracker for the export to PDF not working. 

Other interesting pages:

https://forums.oracle.com/forums/thread.jspa?threadID=2055773  -  About alternatives to fillReportToStream

There are also other support options available to you as well.

Hope this helps ....

 

Link to comment
Share on other sites

  • Solution

Hi,

Can we see your JRXML report template? I suspect it is about a layout inconsistency that coupled with the specifics of the data you are having in the larger file causes JR to enter an infinite loop trying to create new pages just because some content never seems to fit a new page.

In any case, this is not related to how you fill the reports, to files, streams or whatever.

Thanks,
Teodor

Link to comment
Share on other sites

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...