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.