xmlgraphics-fop-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Rubin <mru...@thunderhead.com>
Subject Re: any HTML to PDF example within apache FOP?
Date Mon, 23 May 2011 07:50:16 GMT
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).



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

Am I missing something here?

Kapil Garg

From: gargkapil@hotmail.com<mailto:gargkapil@hotmail.com>
To: fop-dev@xml.apache.org<mailto:fop-dev@xml.apache.org>
Subject: HTML to PDF :NoSuchMEthod Erros on callingorg.apache.fop.fo.FOTreeBuilder in Driver
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));
            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 {
            } catch (IOException ex) {
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);
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(

        try {

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

            Driver driver = new Driver(fopInputSource, out);

            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();


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

   return tFactory.newTransformer(xslDomSource);

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



Kapil Garg

Michael Rubin


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






+44 20 8238 7400

+44 20 8238 7401



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

[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.

View raw message