private void eatMemory(int callIndex, File foFile, int replicatorRepeats) throws Exception { Source src = new StreamSource(foFile); Transformer transformer = replicatorTemplates.newTransformer(); transformer.setParameter("repeats", new Integer(replicatorRepeats)); OutputStream out = new NullOutputStream(); // write to /dev/nul try { FOUserAgent userAgent = fopFactory.newFOUserAgent(); userAgent.setBaseURL(foFile.getParentFile().toURL().toExternalForm()); Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, userAgent, out); Result res = new SAXResult(fop.getDefaultHandler()); transformer.transform(src, res); stats.notifyPagesProduced(fop.getResults().getPageCount()); if (callIndex == 0) { System.out.println( foFile.getName() + " generates " + fop.getResults().getPageCount() + " pages."); } stats.checkStats(); } finally { IOUtils.closeQuietly(out); } }
/** * For first pass of two pass process, invoke org.apache.fop.apps.FormattingResults which can tell * us the number of pages in each page sequence, and in the document as a whole. * * @param fopFactory * @param outputFormat * @param foDocumentSrc * @param placeholderLookup * @return * @throws Docx4JException */ protected FormattingResults calcResults( FopFactory fopFactory, String outputFormat, Source foDocumentSrc, PlaceholderReplacementHandler.PlaceholderLookup placeholderLookup) throws Docx4JException { Fop fop = null; Result result = null; try { fop = fopFactory.newFop(outputFormat, new NullOutputStream()); result = new SAXResult( new PlaceholderReplacementHandler(fop.getDefaultHandler(), placeholderLookup)); } catch (FOPException e) { throw new Docx4JException( "Exception setting up result for fo transformation: " + e.getMessage(), e); } XmlSerializerUtil.serialize(foDocumentSrc, result, false, false); return fop.getResults(); }
public void generateGeneric() { String tMIME = null; if (genMode.equals("PDF")) { tMIME = MimeConstants.MIME_PDF; } else { tMIME = MimeConstants.MIME_RTF; } try { System.out.println("FOP Transformation\n"); System.out.println("Preparing..."); String fileName = new File(xsltfile).getName(); // File xsltfile = new File("lib/xsl2/xslt/base/fo/" + fileName); File xsltfile = new File("lib/xsl/fo/" + fileName); // configure fopFactory.4. as desired // FopFactoryConfig ffc = new FopFactoryConfig(); // FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI()) ; // .newInstance(); FopFactory fopFactory = FopFactory.newInstance(); FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); foUserAgent.setTitle("TEST"); // configure foUserAgent as desired // Setup output OutputStream out = new java.io.FileOutputStream(outputfile); out = new java.io.BufferedOutputStream(out); try { TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(new StreamSource(xsltfile)); // test run to get total pagecount Fop fop = fopFactory.newFop(tMIME, foUserAgent, out); Source src = new StreamSource(xmlfile); Result res = new SAXResult(fop.getDefaultHandler()); transformer.transform(src, res); // Get total page count String pageCount = "UNAVAILABLE"; if (fop.getResults() != null) { pageCount = Integer.toString(fop.getResults().getPageCount()); } else { } System.out.println("totalcc " + pageCount); // real run // Construct fop with desired output format fop = fopFactory.newFop(tMIME, foUserAgent, out); // set draft parameter String draftImageFn = new File("lib/xsl/images/draft.png").toURI().toString(); // .getAbsolutePath(); transformer.setParameter("draft.watermark.image", draftImageFn); System.out.println(transformer.getParameter("draft.watermark.image")); if (isDraftMode) { transformer.setParameter("draft.mode", "yes"); } else { transformer.setParameter("draft.mode", "no"); } transformer.setParameter("draft.mode", pageCount); // set pagecount parameter transformer.setParameter("ebnf.statement.terminator", pageCount); // Resulting SAX events (the generated FO) must be piped // through // to FOP res = new SAXResult(fop.getDefaultHandler()); // Start XSLT transformation and FOP processing transformer.transform(src, res); } finally { out.close(); status = 0; } System.out.println("Success!"); System.out.println("DocBook " + genMode + " generation COMPLETED"); } catch (Exception e) { e.printStackTrace(System.err); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); status = 2; return; } }