aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Fop.java
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Fop.java')
-rw-r--r--lib/Fop.java122
1 files changed, 122 insertions, 0 deletions
diff --git a/lib/Fop.java b/lib/Fop.java
new file mode 100644
index 000000000..aa342945c
--- /dev/null
+++ b/lib/Fop.java
@@ -0,0 +1,122 @@
+// Ant
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+import org.apache.fop.apps.*;
+
+// SAX
+import org.xml.sax.Parser;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+// Java
+import java.io.FileReader;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.net.URL;
+
+/* the code is adapted from Fops CommandLine class */
+public class Fop {
+ String fofile, pdffile;
+
+ public void setFofile(String fofile) {
+ this.fofile = fofile;
+ }
+
+ public void setPdffile(String pdffile) {
+ this.pdffile = pdffile;
+ }
+
+
+ /**
+ * creates a SAX parser, using the value of org.xml.sax.parser
+ * defaulting to org.apache.xerces.parsers.SAXParser
+ *
+ * @return the created SAX parser
+ */
+ static Parser createParser() {
+ String parserClassName = System.getProperty("org.xml.sax.parser");
+ if (parserClassName == null) {
+ parserClassName = "org.apache.xerces.parsers.SAXParser";
+ }
+ System.err.println("using SAX parser " + parserClassName);
+
+ try {
+ return (Parser) Class.forName(parserClassName).newInstance();
+ } catch (ClassNotFoundException e) {
+ System.err.println("Could not find " + parserClassName);
+ } catch (InstantiationException e) {
+ System.err.println("Could not instantiate " + parserClassName);
+ } catch (IllegalAccessException e) {
+ System.err.println("Could not access " + parserClassName);
+ } catch (ClassCastException e) {
+ System.err.println(parserClassName + " is not a SAX driver");
+ }
+ return null;
+ }
+
+ /**
+ * create an InputSource from a file name
+ *
+ * @param filename the name of the file
+ * @return the InputSource created
+ */
+ protected static InputSource fileInputSource(String filename) {
+
+ /* this code adapted from James Clark's in XT */
+ File file = new File(filename);
+ String path = file.getAbsolutePath();
+ String fSep = System.getProperty("file.separator");
+ if (fSep != null && fSep.length() == 1)
+ path = path.replace(fSep.charAt(0), '/');
+ if (path.length() > 0 && path.charAt(0) != '/')
+ path = '/' + path;
+ try {
+ return new InputSource(new URL("file", null,
+ path).toString());
+ }
+ catch (java.net.MalformedURLException e) {
+ throw new Error("unexpected MalformedURLException");
+ }
+ }
+
+ public void execute () throws BuildException {
+ boolean errors = false;
+ String version = Version.getVersion();
+ System.out.println("=======================\nTask " + version +
+ "\nconverting file " + fofile + " to " + pdffile);
+
+ if (!(new File(fofile).exists())) {
+ errors = true;
+ System.err.println("Task Fop - ERROR: Formatting objects file " + fofile + " missing.");
+ }
+
+ Parser parser = createParser();
+
+ if (parser == null) {
+ System.err.println("Task Fop - ERROR: Unable to create SAX parser");
+ errors = true;
+ }
+
+ if (!errors) {
+ try {
+ Driver driver = new Driver();
+ driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);
+ driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
+ driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
+ driver.setWriter(new PrintWriter(new FileWriter(pdffile)));
+ driver.buildFOTree(parser, fileInputSource(fofile));
+ driver.format();
+ driver.render();
+ } catch (Exception e) {
+ System.err.println("Task Fop - FATAL ERROR: " + e.getMessage());
+ System.exit(1);
+ }
+ }
+ System.out.println("=======================\n");
+ }
+}
+