https://issues.apache.org/bugzilla/show_bug.cgi?id=51210

             Bug #: 51210
           Summary: FO transform to PDF completely in memory!? =>
                    OutOfMemoryError
           Product: Fop
           Version: 1.0
          Platform: PC
            Status: NEW
          Severity: normal
          Priority: P2
         Component: general
        AssignedTo: fop-dev@xmlgraphics.apache.org
        ReportedBy: mhilp...@gmx.de
    Classification: Unclassified


So far, we had no problems transforming *.fo files with FOP 1.0 to PDF. Now, we
get OutOfMemoryErrors for *.fo files of about 150 MB and bigger. We tried the
64 Bit JVM with -Xmx2048m and still get OutOfMemoryError after a while.

During the long period of PDF transformation we noticed that the destination
*.pdf file is not increasing in size but stays at 0 KB! Therefore, it seems
that FOP/Transform is trying to generate the PDF completely in RAM!?

My transformation method:

--------------------------------------------------------------
    /**
     * Transform XSL-FO.
     * 
     * @param nameOfInputFile Name of input FO file (e.g. "Test.fo").
     * @param nameOfOutputFile Name of output PDF file (e.g. "Test.pdf").
     * @param mimeType MIME type for the output format (e.g.
MimeConstants.MIME_PDF).
     * @return The generated PDF file or null if failed.
     * @throws Exception on error.
     * @since 4.15.0
     * @see <a
href="http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/examples/embedding/java/embedding/ExampleFO2PDF.java?view=markup";>convertFO2PDF()</a>
     */
    @SuppressWarnings("unchecked")
    public final File transformFO(final String nameOfInputFile, final String
nameOfOutputFile, final String mimeType) throws Exception {
        File result = null;

        OutputStream os = null;
        try {
            final File fileOutput = new File(nameOfOutputFile);
            os = new BufferedOutputStream(new FileOutputStream(fileOutput));

            final Fop fop = fopFactory.newFop(mimeType, foUserAgent, os);
            final StreamSource ssFO = new StreamSource(new
File(nameOfInputFile));
            final Transformer transformer = factory.newTransformer(); 

            transformer.setErrorListener(new ErrorListener() {
                @Override
                public void error(TransformerException exception) throws
TransformerException {
                    LOGGER.severe("transformFO("+nameOfInputFile+"):
"+exception.getMessage(), exception);
                }//error()

                @Override
                public void fatalError(TransformerException exception) throws
TransformerException {
                    LOGGER.severe("transformFO("+nameOfInputFile+"):
"+exception.getMessage(), exception);
                }//fatalError()

                @Override
                public void warning(TransformerException exception) throws
TransformerException {
                    LOGGER.warning("transformFO("+nameOfInputFile+"):
"+exception.getMessage(), exception);
                }//warning()
            });

            final Result res = new SAXResult(fop.getDefaultHandler());
            transformer.transform(ssFO, res);

            if (LOGGER.isLoggable(Level.FINE)) {
                final FormattingResults foResults = fop.getResults();
                LOGGER.fine("Generated " + foResults.getPageCount() + " PDF
pages in total:");
                final List<PageSequenceResults> pss =
foResults.getPageSequences();
                for (final PageSequenceResults psr : pss) {
                    LOGGER.fine("PageSequence " +
(String.valueOf(psr.getID()).length() > 0 ? psr.getID() : "<no id>") + "
generated " + psr.getPageCount() + " pages.");
                }
            }

            result = fileOutput;
        } finally {
            if (os != null) { os.close(); }
        }

        return result;
    }//transformFO()
--------------------------------------------------------------------------

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

Reply via email to