title: Java Transformation to PDF
body: <p>I am doing a POC for one of my performance projects. Currently I'm facing an <em>OutOfMemoryError</em>. First we had loaded an XML file using DOM and then attempted to transform it with XSL into a PDF. After reading one of the comments from this forum, I switched to a SAX parser but it still gives the same error.</p>
  
  <p>The file is 30MB and the System Memory is 512MB.</p>
  
  <pre><code>System.out.println("FOP XMLTOPDFConverter\n");
              System.out.println("Preparing...");
  
              // Setup directories
  /*          File baseDir = new File(".");
              File outDir = new File(baseDir, "out");
              outDir.mkdirs();*/
  
              // Setup input and output files
              File xmlfile = new File("C:/Documents and Settings/agarwgau/Desktop/300k/File_0000036357.XML");
              File xsltfile = new File("C:/Documents and Settings/agarwgau/Desktop/300k/UCB110037EventList.xsl");
              File pdffile = new File("C:/Documents and Settings/agarwgau/Desktop/300k/ResultXML2PDF.pdf");
  
              System.out.println("Input: XML (" + xmlfile + ")");
              System.out.println("Stylesheet: " + xsltfile);
              System.out.println("Output: PDF (" + pdffile + ")");
              System.out.println();
              System.out.println("Transforming...");
  
              // configure fopFactory as desired
              FopFactory fopFactory = FopFactory.newInstance();
  
              FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
              // configure foUserAgent as desired
  
              // Setup output
              OutputStream out = new java.io.FileOutputStream(pdffile);
              out = new java.io.BufferedOutputStream(out);
  
              try {
                  // Construct fop with desired output format
                  Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF,
                          foUserAgent, out);
  
                  // Setup XSLT
                  TransformerFactory factory = TransformerFactory.newInstance();
                  Transformer transformer = factory
                          .newTransformer(new StreamSource(xsltfile));
  
                  // Set the value of a &lt;param&gt; in the stylesheet
                  transformer.setParameter("versionParam", "2.0");
  
                  // Setup input for XSLT transformation
                  Source src = new StreamSource(xmlfile);
  
                  // Resulting SAX events (the generated FO) must be piped through
                  // to FOP
                  Result res = new SAXResult(fop.getDefaultHandler());
  
                  // Start XSLT transformation and FOP processing
                  transformer.transform(src, res);
              } finally {
                  out.close();
              }
  
              System.out.println("Success!");
          } catch (Exception e) {
              e.printStackTrace();
              System.exit(-1);
          }
  
      }
  </code></pre>