You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-dev@xmlgraphics.apache.org by Kapil garg <ga...@hotmail.com> on 2011/05/21 22:51:24 UTC

any HTML to PDF example within apache FOP?

ok I was able to find the jar 0.204 and run it successfully however it runs out of memory ..,anyone be kind enough to share a working example within apache fop 1.0.0 to convert html to PDF?
Am I missing something here?


Kapil Garg
 




From: gargkapil@hotmail.com
To: fop-dev@xml.apache.org
Subject: HTML to PDF :NoSuchMEthod Erros on callingorg.apache.fop.fo.FOTreeBuilder in Driver class
Date: Sun, 22 May 2011 05:05:31 +1000









Hello GuysBit new on Apache FOP. I am trying to run a demo code to convert HTML into PDF. I am getting following exception on using fop 0.20.5 versionI could not find the driver class in fop 1.0.0 version.IS there  a sample code that converts html into pdf in FOP 1.0.0 version. I need urgently some sort of HTML to PDF conversion library. Am I missing here? Would FOP work for HTML to PDF conversion? Any help would be appreciated.

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.fop.fo.FOTreeBuilder: method <init>()V not found	at org.apache.fop.apps.Driver.<init>(Driver.java:221)	at org.apache.fop.apps.Driver.<init>(Driver.java:226)	at com.smartbin.smartbinpdf.Html2Pdf.fo2PDF(Html2Pdf.java:135)	at com.smartbin.smartbinpdf.Html2Pdf.main(Html2Pdf.java:61)
This is my codepackage com.smartbin.smartbinpdf;import java.io.FileInputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.ByteArrayOutputStream;import java.util.logging.Level;
import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;import javax.xml.transform.dom.DOMSource;
import org.w3c.tidy.Tidy;import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.apache.fop.apps.Driver;import org.apache.fop.messaging.MessageHandler;import org.apache.fop.tools.DocumentInputSource;
import org.apache.avalon.framework.logger.ConsoleLogger;import org.apache.avalon.framework.logger.Logger;
/* *  Class that converts HTML to PDF using *  the DOM interfaces of JTidy, Xalan, and FOP. * *  @author Kapil Garg *  */public class Html2Pdf {

    public static void main(String[] args) {        FileInputStream input = null;	try {            // open file            //if (args.length != 2) {            //   System.out.println("Usage: Html2Pdf htmlFile styleSheet");            //  System.exit(1);            //}            //String htmlFileName = args[0];            String htmlFileName = "C:/fop-1.0/examples/html2pdf/hello.html";            //try {	    input = new FileInputStream(htmlFileName);            Tidy tidy = new Tidy();            //Document xmlDoc = tidy.parseDOM(input, null);            Document xmlDoc = tidy.parseDOM(input, null) ;            String stylesheet ="C:/fop-1.0/examples/html2pdf/xhtml2fo.xsl";            Document foDoc = xml2FO(xmlDoc, stylesheet);            String pdfFileName = htmlFileName.substring(0, htmlFileName.indexOf(".")) + ".pdf";            try {                OutputStream pdf = new FileOutputStream(new File(pdfFileName));                pdf.write(fo2PDF(foDoc));            }            catch (java.io.FileNotFoundException e) {                System.out.println("Error creating PDF: " + pdfFileName);            }            catch (java.io.IOException e) {                System.out.println("Error writing PDF: " + pdfFileName);            }            	}

        	catch (FileNotFoundException ex) {		java.util.logging.Logger.getLogger(Html2Pdf.class.getName()).log(Level.SEVERE, null, ex);	} finally {            try {                input.close();            } catch (IOException ex) {                java.util.logging.Logger.getLogger(Html2Pdf.class.getName()).log(Level.SEVERE, null, ex);            }        }
	    }

    /*     *  Applies stylesheet to input.     *     *  @param xml  The xml input Document     *       *  @param stylesheet Name of the stylesheet     *     *  @return Document  Result of the transform     */    private static Document xml2FO(Document xml, String styleSheet) {
	DOMSource xmlDomSource = new DOMSource(xml);      	DOMResult domResult = new DOMResult();
	Transformer transformer = getTransformer(styleSheet);		if (transformer == null) {	    System.out.println("Error creating transformer for " + styleSheet);	    System.exit(1);	}	try {	    transformer.transform(xmlDomSource, domResult);	}	catch (javax.xml.transform.TransformerException e) {	    return null;	}	return (Document) domResult.getNode();
    }

    /*     *  Apply FOP to XSL-FO input     *     *  @param foDocument  The XSL-FO input     *       *  @return byte[]  PDF result     */    private static byte[] fo2PDF(Document foDocument) {
        DocumentInputSource fopInputSource = new DocumentInputSource(                                                         foDocument);
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();            Logger log = new ConsoleLogger(ConsoleLogger.LEVEL_WARN);
            Driver driver = new Driver(fopInputSource, out);            driver.setLogger(log);            driver.setRenderer(Driver.RENDER_PDF);            driver.run();
            return out.toByteArray();
        } catch (Exception ex) {            return null;        }    }

    /*     *  Create and return a Transformer for the specified stylesheet.     *       *  Based on the DOM2DOM.java example in the Xalan distribution.     */    private static Transformer getTransformer(String styleSheet) {
	try {
	    TransformerFactory tFactory = TransformerFactory.newInstance();
	    DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
	    dFactory.setNamespaceAware(true);      	    DocumentBuilder dBuilder = dFactory.newDocumentBuilder();	    Document xslDoc = dBuilder.parse(styleSheet);	    DOMSource xslDomSource = new DOMSource(xslDoc);
	    return tFactory.newTransformer(xslDomSource);
	}	catch (javax.xml.transform.TransformerException e) {	    e.printStackTrace();	    return null;	}	catch (java.io.IOException e) {	    e.printStackTrace();	    return null;	}	catch (javax.xml.parsers.ParserConfigurationException e) {	    e.printStackTrace();	    return null;	}	catch (org.xml.sax.SAXException e) {		    e.printStackTrace();	    return null;	}
    }
}



Kapil Garg
 


 		 	   		  

Re: any HTML to PDF example within apache FOP?

Posted by Michael Rubin <mr...@thunderhead.com>.
Admittedly I am not familiar with HTML to PDF (and fairly new to FOP) but just wondering if the java heap size is a factor at all with the memory issues? Can you please give more detail about your setup? What environment? Do you have a -Xmx<size> option anywhere? If so then is it possible to increase the heap size (unless I am on the wrong track of course).

Thanks.

-Mike

On 21/05/11 21:51, Kapil garg wrote:
ok I was able to find the jar 0.204 and run it successfully however it runs out of memory ..,
anyone be kind enough to share a working example within apache fop 1.0.0 to convert html to PDF?

Am I missing something here?

Kapil Garg




________________________________
From: gargkapil@hotmail.com<ma...@hotmail.com>
To: fop-dev@xml.apache.org<ma...@xml.apache.org>
Subject: HTML to PDF :NoSuchMEthod Erros on callingorg.apache.fop.fo.FOTreeBuilder in Driver class
Date: Sun, 22 May 2011 05:05:31 +1000


Hello Guys
Bit new on Apache FOP. I am trying to run a demo code to convert HTML into PDF. I am getting following exception on using fop 0.20.5 version
I could not find the driver class in fop 1.0.0 version.
IS there  a sample code that converts html into pdf in FOP 1.0.0 version. I need urgently some sort of HTML to PDF conversion library. Am I missing here? Would FOP work for HTML to PDF conversion? Any help would be appreciated.


Exception in thread "main" java.lang.NoSuchMethodError: org.apache.fop.fo.FOTreeBuilder: method <init>()V not found
at org.apache.fop.apps.Driver.<init>(Driver.java:221)
at org.apache.fop.apps.Driver.<init>(Driver.java:226)
at com.smartbin.smartbinpdf.Html2Pdf.fo2PDF(Html2Pdf.java:135)
at com.smartbin.smartbinpdf.Html2Pdf.main(Html2Pdf.java:61)

This is my code
package com.smartbin.smartbinpdf;
import java.io.FileInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
import java.util.logging.Level;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;

import org.w3c.tidy.Tidy;
import org.w3c.dom.Document;

import org.xml.sax.InputSource;

import org.apache.fop.apps.Driver;
import org.apache.fop.messaging.MessageHandler;
import org.apache.fop.tools.DocumentInputSource;

import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.Logger;

/*
 *  Class that converts HTML to PDF using
 *  the DOM interfaces of JTidy, Xalan, and FOP.
 *
 *  @author Kapil Garg
 *
 */
public class Html2Pdf {


    public static void main(String[] args) {
        FileInputStream input = null;
try {
            // open file
            //if (args.length != 2) {
            //   System.out.println("Usage: Html2Pdf htmlFile styleSheet");
            //  System.exit(1);
            //}
            //String htmlFileName = args[0];
            String htmlFileName = "C:/fop-1.0/examples/html2pdf/hello.html";
            //try {
   input = new FileInputStream(htmlFileName);
            Tidy tidy = new Tidy();
            //Document xmlDoc = tidy.parseDOM(input, null);
            Document xmlDoc = tidy.parseDOM(input, null) ;
            String stylesheet ="C:/fop-1.0/examples/html2pdf/xhtml2fo.xsl";
            Document foDoc = xml2FO(xmlDoc, stylesheet);
            String pdfFileName = htmlFileName.substring(0, htmlFileName.indexOf(".")) + ".pdf";
            try {
                OutputStream pdf = new FileOutputStream(new File(pdfFileName));
                pdf.write(fo2PDF(foDoc));
            }
            catch (java.io.FileNotFoundException e) {
                System.out.println("Error creating PDF: " + pdfFileName);
            }
            catch (java.io.IOException e) {
                System.out.println("Error writing PDF: " + pdfFileName);
            }

}


        catch (FileNotFoundException ex) {
java.util.logging.Logger.getLogger(Html2Pdf.class.getName()).log(Level.SEVERE, null, ex);
} finally {
            try {
                input.close();
            } catch (IOException ex) {
                java.util.logging.Logger.getLogger(Html2Pdf.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }


    /*
     *  Applies stylesheet to input.
     *
     *  @param xml  The xml input Document
     *
     *  @param stylesheet Name of the stylesheet
     *
     *  @return Document  Result of the transform
     */
    private static Document xml2FO(Document xml, String styleSheet) {

DOMSource xmlDomSource = new DOMSource(xml);
      DOMResult domResult = new DOMResult();

Transformer transformer = getTransformer(styleSheet);
if (transformer == null) {
   System.out.println("Error creating transformer for " + styleSheet);
   System.exit(1);
}
try {
   transformer.transform(xmlDomSource, domResult);
}
catch (javax.xml.transform.TransformerException e) {
   return null;
}
return (Document) domResult.getNode();

    }


    /*
     *  Apply FOP to XSL-FO input
     *
     *  @param foDocument  The XSL-FO input
     *
     *  @return byte[]  PDF result
     */
    private static byte[] fo2PDF(Document foDocument) {

        DocumentInputSource fopInputSource = new DocumentInputSource(
                                                         foDocument);

        try {

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            Logger log = new ConsoleLogger(ConsoleLogger.LEVEL_WARN);

            Driver driver = new Driver(fopInputSource, out);
            driver.setLogger(log);
            driver.setRenderer(Driver.RENDER_PDF);
            driver.run();

            return out.toByteArray();

        } catch (Exception ex) {
            return null;
        }
    }


    /*
     *  Create and return a Transformer for the specified stylesheet.
     *
     *  Based on the DOM2DOM.java example in the Xalan distribution.
     */
    private static Transformer getTransformer(String styleSheet) {

try {

   TransformerFactory tFactory = TransformerFactory.newInstance();

   DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();

   dFactory.setNamespaceAware(true);

   DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
   Document xslDoc = dBuilder.parse(styleSheet);
   DOMSource xslDomSource = new DOMSource(xslDoc);

   return tFactory.newTransformer(xslDomSource);

}
catch (javax.xml.transform.TransformerException e) {
   e.printStackTrace();
   return null;
}
catch (java.io.IOException e) {
   e.printStackTrace();
   return null;
}
catch (javax.xml.parsers.ParserConfigurationException e) {
   e.printStackTrace();
   return null;
}
catch (org.xml.sax.SAXException e) {
   e.printStackTrace();
   return null;
}

    }

}



Kapil Garg






Michael Rubin


Developer


[http://thunderhead.com/email_signature/images/Thunderhead-logo.png]    [http://thunderhead.com/email_signature/images/make-every-communication-count.png]      [http://thunderhead.com/email_signature/images/triangles.png]

 T

 F

 M

 E

 W


+44 20 8238 7400

+44 20 8238 7401



mrubin@Thunderhead.com<ma...@Thunderhead.com>

www.thunderhead.com<http://www.thunderhead.com>



Thunderhead featured in The Sunday Times Profit Track 100 league table of companies with fastest-growing profits. Click here<http://www.fasttrack.co.uk/fasttrack/press/pt11-lon.pdf> to read more.


[http://thunderhead.com/email_signature/images/linkedin.png]<http://www.linkedin.com/companies/25033/Thunderhead> [http://thunderhead.com/email_signature/images/twitter.png] <http://twitter.com/Thunderheadon> [http://thunderhead.com/email_signature/images/rss.png] <http://www.thunderhead.com/rss/rss.php> [http://thunderhead.com/email_signature/images/youtube.png] <http://www.youtube.com/user/ThunderheadOn> [http://thunderhead.com/email_signature/images/theblog.png] <http://thunderheadinnovate.wordpress.com/>  [http://thunderhead.com/email_signature/images/werehiring.png] <http://thunderhead.com/about/careers.php>

The contents of this e-mail are intended for the named addressee only. It contains information that may be confidential. Unless you are the named addressee or an authorized designee, you may not copy or use it, or disclose it to anyone else. If you received it in error please notify us immediately and then destroy it.