diff options
-rw-r--r-- | docs/design/build.xml | 99 | ||||
-rw-r--r-- | docs/examples/build.xml | 244 | ||||
-rw-r--r-- | docs/xml-docs/build.xml | 96 | ||||
-rw-r--r-- | lib/buildtools.jar | bin | 42006 -> 42055 bytes | |||
-rw-r--r-- | src/org/apache/fop/pdf/PDFDocument.java | 2 | ||||
-rw-r--r-- | src/org/apache/fop/tools/anttasks/Fop.java | 183 |
6 files changed, 360 insertions, 264 deletions
diff --git a/docs/design/build.xml b/docs/design/build.xml index ad17b53b9..e6e2ecdcd 100644 --- a/docs/design/build.xml +++ b/docs/design/build.xml @@ -1,73 +1,58 @@ <?xml version="1.0"?> - <!-- ======================================================================= --> <!-- JBoss documentation build file --> <!-- ======================================================================= --> - <project name="FOPDocs" default="docs" basedir="./"> - <target name="init"> + <target name="init"> <property name="Name" value="FOPDocs"/> <property name="name" value="fopdocs"/> <property name="version" value="0.1"/> - <property name="lib.dir" value="${basedir}/lib"/> - - <taskdef name="xslt" classname="org.apache.fop.tools.anttasks.Xslt"/> - <taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop"/> - </target> - - <!-- =================================================================== --> - <!-- Generate a help screen --> - <!-- =================================================================== --> - <target name="help" depends="init"> - - <echo message="${name}-${version} build file, available targets:" /> - <echo message="------------------------------------------------------------" /> - <echo message="main : Compile and prepare deployment directory. " /> - <echo message="pdf : Compile and prepare pdf user docs. "/> - <echo message="clean : Clean deployment and distribution. " /> - <echo message="------------------------------------------------------------" /> - <echo message=" USAGE: build <target> " /> - - </target> - - <!-- =================================================================== --> - <!-- Prepares the build directory --> - <!-- =================================================================== --> - <target name="prepare" depends="init"> - </target> - - <!-- =================================================================== --> - <!-- Generates the pdf documentation --> - <!-- =================================================================== --> - <target name="pdf" depends="prepare"> - <echo message="Building pdf documentation. Please wait ..."/> - <delete file="fop.fo"/> - <xslt infile="fop.xml" xsltfile="docbook/fo/docbook.xsl" - dependent="fop.xml" - outfile="fop.fo" smart="yes"/> -<!-- + <taskdef name="xslt" classname="org.apache.fop.tools.anttasks.Xslt"/> + <taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop"/> + </target> + <!-- =================================================================== --> + <!-- Generate a help screen --> + <!-- =================================================================== --> + <target name="help" depends="init"> + <echo message="${name}-${version} build file, available targets:"/> + <echo message="------------------------------------------------------------"/> + <echo message="main : Compile and prepare deployment directory. "/> + <echo message="pdf : Compile and prepare pdf user docs. "/> + <echo message="clean : Clean deployment and distribution. "/> + <echo message="------------------------------------------------------------"/> + <echo message=" USAGE: build <target> "/> + </target> + <!-- =================================================================== --> + <!-- Prepares the build directory --> + <!-- =================================================================== --> + <target name="prepare" depends="init"/> + <!-- =================================================================== --> + <!-- Generates the pdf documentation --> + <!-- =================================================================== --> + <target name="pdf" depends="prepare"> + <echo message="Building pdf documentation. Please wait ..."/> + <delete file="fop.fo"/> + <xslt infile="fop.xml" xsltfile="docbook/fo/docbook.xsl" dependent="fop.xml" outfile="fop.fo" smart="yes"/> + <!-- <style basedir="./" destdir="./" style="docbook/fo/docbook.xsl" extension=".fo" includes="fop.xml"/> --> - <fop fofile="fop.fo" pdffile="fop.pdf"/> -<!-- <delete file="fop.fo"/>--> - </target> - - <!-- =================================================================== --> - <!-- Generates pdf and html documentation --> - <!-- =================================================================== --> - <target name="docs" depends="pdf"/> - - <!-- =================================================================== --> - <!-- Cleans up generated stuff --> - <!-- =================================================================== --> - <target name="clean" depends="init"> - <delete file="fop.fo"/> - <delete file="fop.pdf"/> - </target> + <fop fofile="fop.fo" outfile="fop.pdf"/> + <!-- <delete file="fop.fo"/>--> + </target> + <!-- =================================================================== --> + <!-- Generates pdf and html documentation --> + <!-- =================================================================== --> + <target name="docs" depends="pdf"/> + <!-- =================================================================== --> + <!-- Cleans up generated stuff --> + <!-- =================================================================== --> + <target name="clean" depends="init"> + <delete file="fop.fo"/> + <delete file="fop.pdf"/> + </target> </project> - diff --git a/docs/examples/build.xml b/docs/examples/build.xml index 0d60e65a5..e59f953ce 100644 --- a/docs/examples/build.xml +++ b/docs/examples/build.xml @@ -1,126 +1,126 @@ <?xml version="1.0"?> - <!-- =========================================================================== --> - -<project default="creating new test pdf files" basedir="."> - - <!-- =================================================================== --> - <!-- Initialization target --> - <!-- =================================================================== --> - <target name="init"> - <tstamp/> - <mkdir dir="tests"/> - <property name="referenceDir" value="reference"/> - <property name="testDir" value="tests"/> - <property name="foDir" value="fo"/> - <taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop"/> - <taskdef name="compare" classname="org.apache.fop.tools.anttasks.Compare"/> - - - </target> - - <!-- =================================================================== --> - <!-- Help on usage --> - <!-- =================================================================== --> - <target name="usage"> - <echo message=""/> - <echo message=""/> - <echo message="USAGE of runtests"/> - <echo message="-------------------------------------------------------------"/> - <echo message=""/> - <echo message=" available targets are:"/> - <echo message=""/> - <echo message=" compare --> generates new pdf test files and compares them to reference files (default)"/> - <echo message=" reference --> generates new reference pdf files"/> - <echo message=" See the comments inside the build.xml file for more details."/> - <echo message="-------------------------------------------------------------"/> - <echo message=""/> - <echo message=""/> - </target> - - <!-- =================================================================== --> - <!-- Produces new test pdf files --> - <!-- =================================================================== --> - <target name="creating new test pdf files" depends="init"> - <fop fofile="${foDir}/normal.fo" pdffile="${testDir}/normal.pdf"/> - <fop fofile="${foDir}/table.fo" pdffile="${testDir}/table.pdf"/> - <fop fofile="${foDir}/list.fo" pdffile="${testDir}/list.pdf"/> - <fop fofile="${foDir}/link.fo" pdffile="${testDir}/link.pdf"/> - <fop fofile="${foDir}/newlinktest.fo" pdffile="${testDir}/newlinktest.pdf"/> - <fop fofile="${foDir}/border.fo" pdffile="${testDir}/border.pdf"/> - <fop fofile="${foDir}/extensive.fo" pdffile="${testDir}/extensive.pdf"/> - <fop fofile="${foDir}/images.fo" pdffile="${testDir}/images.pdf"/> - <fop fofile="${foDir}/readme.fo" pdffile="${testDir}/readme.pdf"/> - <fop fofile="${foDir}/fonts.fo" pdffile="${testDir}/fonts.pdf"/> - <fop fofile="${foDir}/leader.fo" pdffile="${testDir}/leader.pdf"/> - <fop fofile="${foDir}/textdeko.fo" pdffile="${testDir}/textdeko.pdf"/> - <fop fofile="${foDir}/inhprop.fo" pdffile="${testDir}/inhprop.pdf"/> - <fop fofile="${foDir}/normalex.fo" pdffile="${testDir}/normalex.pdf"/> - <fop fofile="${foDir}/simple.fo" pdffile="${testDir}/simple.pdf"/> - <!-- <fop fofile="${foDir}/hyphen.fo" pdffile="${testDir}/hyphen.pdf"/> --> - <fop fofile="${foDir}/character.fo" pdffile="${testDir}/character.pdf"/> - <fop fofile="${foDir}/pdfoutline.fo" pdffile="${testDir}/pdfoutline.pdf"/> - <fop fofile="${foDir}/corresprop.fo" pdffile="${testDir}/corresprop.pdf"/> - <fop fofile="${foDir}/bordershorthand.fo" pdffile="${testDir}/bordershorthand.pdf"/> - </target> - - - <target name="image" depends="init"> - <fop fofile="${foDir}/images.fo" pdffile="${testDir}/images.pdf"/> - </target> - - <!-- =================================================================== --> - <!-- Compares new test pdf files to reference pdf files --> - <!-- =================================================================== --> - <target name="compare" depends ="creating new test pdf files"> - <compare referenceDirectory = "${referenceDir}" - testDirectory = "${testDir}" - filenames = "normal.pdf,table.pdf,list.pdf,link.pdf,border.pdf,images.pdf,extensive.pdf,readme.pdf,fonts.pdf,list2.pdf"/> - </target> - - <!-- =================================================================== --> - <!-- Produces new reference pdf files --> - <!-- =================================================================== --> - <target name="reference"> - <fop fofile="${foDir}/normal.fo" pdffile="${referenceDir}/normal.pdf"/> - <fop fofile="${foDir}/table.fo" pdffile="${referenceDir}/table.pdf"/> - <fop fofile="${foDir}/list.fo" pdffile="${referenceDir}/list.pdf"/> - <fop fofile="${foDir}/link.fo" pdffile="${referenceDir}/link.pdf"/> - <fop fofile="${foDir}/newlinktest.fo" pdffile="${referenceDir}/newlinktest.pdf"/> - <fop fofile="${foDir}/border.fo" pdffile="${referenceDir}/border.pdf"/> - <fop fofile="${foDir}/extensive.fo" pdffile="${referenceDir}/extensive.pdf"/> - <fop fofile="${foDir}/images.fo" pdffile="${referenceDir}/images.pdf"/> - <fop fofile="${foDir}/readme.fo" pdffile="${referenceDir}/readme.pdf"/> - <fop fofile="${foDir}/fonts.fo" pdffile="${referenceDir}/fonts.pdf"/> - <fop fofile="${foDir}/leader.fo" pdffile="${referenceDir}/leader.pdf"/> - <fop fofile="${foDir}/textdeko.fo" pdffile="${referenceDir}/textdeko.pdf"/> - <fop fofile="${foDir}/inhprop.fo" pdffile="${referenceDir}/inhprop.pdf"/> - <fop fofile="${foDir}/normalex.fo" pdffile="${referenceDir}/normalex.pdf"/> - <fop fofile="${foDir}/simple.fo" pdffile="${referenceDir}/simple.pdf"/> - <!-- <fop fofile="${foDir}/hyphen.fo" pdffile="${referenceDir}/hyphen.pdf"/> --> - <fop fofile="${foDir}/character.fo" pdffile="${referenceDir}/character.pdf"/> - - </target> - - - - - <!-- =================================================================== --> - <!-- Starts the test --> - <!-- =================================================================== --> - <target name="runtest" depends="compare"> - <echo message="Running Fop tests"/> - </target> - - <!-- =================================================================== --> - <!-- Clean targets --> - <!-- =================================================================== --> - <target name="clean" depends="init"> - <delete dir="${testDir}"/> - - </target> - - +<project default="newPDF" basedir="."> + <!-- =================================================================== --> + <!-- Initialization target --> + <!-- =================================================================== --> + <target name="init"> + <tstamp/> + <mkdir dir="tests"/> + <property name="referenceDir" value="reference"/> + <property name="testDir" value="tests"/> + <property name="foDir" value="fo"/> + <taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop"/> + <taskdef name="compare" classname="org.apache.fop.tools.anttasks.Compare"/> + </target> + <!-- =================================================================== --> + <!-- Help on usage --> + <!-- =================================================================== --> + <target name="usage"> + <echo message=""/> + <echo message=""/> + <echo message="USAGE of runtests"/> + <echo message="-------------------------------------------------------------"/> + <echo message=""/> + <echo message=" available targets are:"/> + <echo message=""/> + <echo message=" newPDF --> generates new PDF test files (default)"/> + <echo message=" newPS --> generates new PostScript test files"/> + <echo message=" newAT --> generates new AreaTree (XML) test files"/> + <echo message=" comparePDF --> generates new PDF test files and compares them to reference files"/> + <echo message=" referencePDF --> generates new reference PDF files"/> + <echo message=" See the comments inside the build.xml file for more details."/> + <echo message="-------------------------------------------------------------"/> + <echo message=""/> + <echo message=""/> + </target> + <!-- =================================================================== --> + <!-- Produces new test pdf files --> + <!-- =================================================================== --> + <target name="newPDF" depends="init"> + <fop fofile="${foDir}/normal.fo" outfile="${testDir}/normal.pdf"/> + <fop fofile="${foDir}/table.fo" outfile="${testDir}/table.pdf"/> + <fop fofile="${foDir}/list.fo" outfile="${testDir}/list.pdf"/> + <fop fofile="${foDir}/link.fo" outfile="${testDir}/link.pdf"/> + <fop fofile="${foDir}/newlinktest.fo" outfile="${testDir}/newlinktest.pdf"/> + <fop fofile="${foDir}/border.fo" outfile="${testDir}/border.pdf"/> + <fop fofile="${foDir}/extensive.fo" outfile="${testDir}/extensive.pdf"/> + <fop fofile="${foDir}/images.fo" outfile="${testDir}/images.pdf"/> + <fop fofile="${foDir}/readme.fo" outfile="${testDir}/readme.pdf"/> + <fop fofile="${foDir}/fonts.fo" outfile="${testDir}/fonts.pdf"/> + <fop fofile="${foDir}/leader.fo" outfile="${testDir}/leader.pdf"/> + <fop fofile="${foDir}/textdeko.fo" outfile="${testDir}/textdeko.pdf"/> + <fop fofile="${foDir}/inhprop.fo" outfile="${testDir}/inhprop.pdf"/> + <fop fofile="${foDir}/normalex.fo" outfile="${testDir}/normalex.pdf"/> + <fop fofile="${foDir}/simple.fo" outfile="${testDir}/simple.pdf"/> + <!-- <fop fofile="${foDir}/hyphen.fo" outfile="${testDir}/hyphen.pdf"/> --> + <fop fofile="${foDir}/character.fo" outfile="${testDir}/character.pdf"/> + <fop fofile="${foDir}/pdfoutline.fo" outfile="${testDir}/pdfoutline.pdf"/> + <fop fofile="${foDir}/corresprop.fo" outfile="${testDir}/corresprop.pdf"/> + <fop fofile="${foDir}/bordershorthand.fo" outfile="${testDir}/bordershorthand.pdf"/> + </target> + <target name="image" depends="init"> + <fop fofile="${foDir}/images.fo" outfile="${testDir}/images.pdf"/> + </target> + <!-- =================================================================== --> + <!-- Produces new test ps files --> + <!-- =================================================================== --> + <target name="newPS" depends="init"> + <fop format="application/postscript" outdir="${testDir}"> + <fileset dir="${foDir}"> + <include name="**/*.fo"/> + </fileset> + </fop> + </target> + <!-- =================================================================== --> + <!-- Produces new test areatree files --> + <!-- =================================================================== --> + <target name="newAT" depends="init"> + <fop format="text/xml" outdir="${testDir}"> + <fileset dir="${foDir}"> + <include name="**/*.fo"/> + </fileset> + </fop> + </target> + <!-- =================================================================== --> + <!-- Compares new test pdf files to reference pdf files --> + <!-- =================================================================== --> + <target name="comparePDF" depends="newPDF"> + <compare referenceDirectory="${referenceDir}" testDirectory="${testDir}" filenames="normal.pdf,table.pdf,list.pdf,link.pdf,border.pdf,images.pdf,extensive.pdf,readme.pdf,fonts.pdf,list2.pdf"/> + </target> + <!-- =================================================================== --> + <!-- Produces new reference pdf files --> + <!-- =================================================================== --> + <target name="referencePDF"> + <fop fofile="${foDir}/normal.fo" outfile="${referenceDir}/normal.pdf"/> + <fop fofile="${foDir}/table.fo" outfile="${referenceDir}/table.pdf"/> + <fop fofile="${foDir}/list.fo" outfile="${referenceDir}/list.pdf"/> + <fop fofile="${foDir}/link.fo" outfile="${referenceDir}/link.pdf"/> + <fop fofile="${foDir}/newlinktest.fo" outfile="${referenceDir}/newlinktest.pdf"/> + <fop fofile="${foDir}/border.fo" outfile="${referenceDir}/border.pdf"/> + <fop fofile="${foDir}/extensive.fo" outfile="${referenceDir}/extensive.pdf"/> + <fop fofile="${foDir}/images.fo" outfile="${referenceDir}/images.pdf"/> + <fop fofile="${foDir}/readme.fo" outfile="${referenceDir}/readme.pdf"/> + <fop fofile="${foDir}/fonts.fo" outfile="${referenceDir}/fonts.pdf"/> + <fop fofile="${foDir}/leader.fo" outfile="${referenceDir}/leader.pdf"/> + <fop fofile="${foDir}/textdeko.fo" outfile="${referenceDir}/textdeko.pdf"/> + <fop fofile="${foDir}/inhprop.fo" outfile="${referenceDir}/inhprop.pdf"/> + <fop fofile="${foDir}/normalex.fo" outfile="${referenceDir}/normalex.pdf"/> + <fop fofile="${foDir}/simple.fo" outfile="${referenceDir}/simple.pdf"/> + <!-- <fop fofile="${foDir}/hyphen.fo" outfile="${referenceDir}/hyphen.pdf"/> --> + <fop fofile="${foDir}/character.fo" outfile="${referenceDir}/character.pdf"/> + </target> + <!-- =================================================================== --> + <!-- Starts the test --> + <!-- =================================================================== --> + <target name="runtest" depends="comparePDF"> + <echo message="Running Fop tests"/> + </target> + <!-- =================================================================== --> + <!-- Clean targets --> + <!-- =================================================================== --> + <target name="clean" depends="init"> + <delete dir="${testDir}"/> + </target> </project> - <!-- End of file --> diff --git a/docs/xml-docs/build.xml b/docs/xml-docs/build.xml index b66a9310f..a5baec012 100644 --- a/docs/xml-docs/build.xml +++ b/docs/xml-docs/build.xml @@ -1,5 +1,4 @@ <?xml version="1.0"?> - <!-- =========================================================================== @@ -12,62 +11,45 @@ These are the meaningful targets for this build file: - clean -> deletes all files produced by this script --> - - <project default="pdf" basedir="."> - - <!-- =================================================================== --> - <!-- Initialization target --> - <!-- =================================================================== --> - <target name="init"> - <tstamp/> - - <property name="src.dir" value="./fop"/> - <property name="allfiles.xml" value="fop-doc.xml"/> - <property name="outfile.fo" value="fop.fo"/> - <property name="outfile.pdf" value="fop.pdf"/> - - <taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop"/> - <taskdef name="xslt" classname="org.apache.fop.tools.anttasks.Xslt"/> - - </target> - - <!-- =================================================================== --> - <!-- copies all xml files into one. the infile is a dummy, because the --> - <!-- source files are defined in the stylesheet --> - <!-- =================================================================== --> - <target name="prepare-files" depends="init"> - <xslt infile="fop.xml" xsltfile="xml2xml.xsl" - outfile="${allfiles.xml}" smart="yes"/> - </target> - - <!-- =================================================================== --> - <!-- Generates the fo file --> - <!-- =================================================================== --> - <target name="fo" depends="prepare-files"> - <xslt infile="${allfiles.xml}" xsltfile="xml2pdf.xsl" - outfile="${outfile.fo}" smart="yes"/> - </target> - - - <!-- =================================================================== --> - <!-- Generates the pdf file --> - <!-- =================================================================== --> - <target name="pdf" depends="fo"> - <fop fofile="${outfile.fo}" pdffile="${outfile.pdf}"/> - </target> - - - - <!-- =================================================================== --> - <!-- Clean targets --> - <!-- =================================================================== --> - <target name="clean"> - <delete file="${allfiles.xml}"/> - <delete file="${outfile.fo}"/> - <delete file="${outfile.pdf}"/> - </target> - + <!-- =================================================================== --> + <!-- Initialization target --> + <!-- =================================================================== --> + <target name="init"> + <tstamp/> + <property name="src.dir" value="./fop"/> + <property name="allfiles.xml" value="fop-doc.xml"/> + <property name="outfile.fo" value="fop.fo"/> + <property name="outfile.pdf" value="fop.pdf"/> + <taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop"/> + <taskdef name="xslt" classname="org.apache.fop.tools.anttasks.Xslt"/> + </target> + <!-- =================================================================== --> + <!-- copies all xml files into one. the infile is a dummy, because the --> + <!-- source files are defined in the stylesheet --> + <!-- =================================================================== --> + <target name="prepare-files" depends="init"> + <xslt infile="fop.xml" xsltfile="xml2xml.xsl" outfile="${allfiles.xml}" smart="yes"/> + </target> + <!-- =================================================================== --> + <!-- Generates the fo file --> + <!-- =================================================================== --> + <target name="fo" depends="prepare-files"> + <xslt infile="${allfiles.xml}" xsltfile="xml2pdf.xsl" outfile="${outfile.fo}" smart="yes"/> + </target> + <!-- =================================================================== --> + <!-- Generates the pdf file --> + <!-- =================================================================== --> + <target name="pdf" depends="fo"> + <fop fofile="${outfile.fo}" outfile="${outfile.pdf}"/> + </target> + <!-- =================================================================== --> + <!-- Clean targets --> + <!-- =================================================================== --> + <target name="clean"> + <delete file="${allfiles.xml}"/> + <delete file="${outfile.fo}"/> + <delete file="${outfile.pdf}"/> + </target> </project> - <!-- End of file --> diff --git a/lib/buildtools.jar b/lib/buildtools.jar Binary files differindex fe4ae4d10..888d90782 100644 --- a/lib/buildtools.jar +++ b/lib/buildtools.jar diff --git a/src/org/apache/fop/pdf/PDFDocument.java b/src/org/apache/fop/pdf/PDFDocument.java index 6a1027000..cdf039b9f 100644 --- a/src/org/apache/fop/pdf/PDFDocument.java +++ b/src/org/apache/fop/pdf/PDFDocument.java @@ -1150,7 +1150,7 @@ public class PDFDocument { String goToRef = getGoToReference(destination); PDFOutline obj = new PDFOutline(++this.objectcount, label, goToRef); - System.out.println("created new outline object"); + //log.debug("created new outline object"); if (parent != null) { parent.addOutline(obj); diff --git a/src/org/apache/fop/tools/anttasks/Fop.java b/src/org/apache/fop/tools/anttasks/Fop.java index 94ea54c98..924f3406e 100644 --- a/src/org/apache/fop/tools/anttasks/Fop.java +++ b/src/org/apache/fop/tools/anttasks/Fop.java @@ -9,6 +9,7 @@ package org.apache.fop.tools.anttasks; // Ant import org.apache.tools.ant.*; +import org.apache.tools.ant.types.FileSet; import org.apache.log.*; import org.apache.log.format.*; @@ -34,20 +35,23 @@ import org.apache.fop.apps.Driver; import org.apache.fop.apps.FOPException; import org.apache.fop.configuration.Configuration; - /** * Wrapper for Fop which allows it to be accessed from within an Ant task. * Accepts the inputs: * <ul> * <li>fofile -> formatting objects file to be transformed</li> - * <li>pdffile -> output filename</li> + * <li>format -> MIME type of the format to generate ex. "application/pdf"</li> + * <li>outfile -> output filename</li> * <li>baseDir -> directory to work from</li> * <li>messagelevel -> (info | verbose | debug) level to output non-error messages</li> * </ul> */ public class Fop extends Task { File foFile; - File pdfFile; + Vector filesets = new Vector(); + File outFile; + File outDir; + String format; //MIME type File baseDir; int messageType = Project.MSG_VERBOSE; @@ -63,30 +67,58 @@ public class Fop extends Task { * Gets the input file */ public File getFofile() { - if (foFile == null) { - log("fofile attribute is not set", Project.MSG_ERR); - throw new BuildException("fofile attribute is not set"); - } return foFile; } /** + * Adds a set of fo files (nested fileset attribute). + */ + public void addFileset(FileSet set) { + filesets.addElement(set); + } + + /** * Sets the output file * @param File to output to */ - public void setPdffile(File pdfFile) { - this.pdfFile = pdfFile; + public void setOutfile(File outFile) { + this.outFile = outFile; } /** - * Sets the output file + * Gets the output file */ - public File getPdffile() { - if (pdfFile == null) { - log("pdffile attribute is not set", Project.MSG_ERR); - throw new BuildException("pdffile attribute is not set"); - } - return pdfFile; + public File getOutfile() { + return this.outFile; + } + + /** + * Sets the output directory + * @param Directory to output to + */ + public void setOutdir(File outDir) { + this.outDir = outDir; + } + + /** + * Gets the output directory + */ + public File getOutdir() { + return this.outDir; + } + + /** + * Sets output format (MIME type) + */ + public void setFormat(String format) { + this.format = format; + } + + /** + * Gets the output format (MIME type) + */ + public String getFormat() { + return this.format; } /** @@ -173,6 +205,58 @@ class FOPTaskStarter extends Starter { log.setPriority(Priority.INFO); } + private int determineRenderer(String format) { + if ((format == null) || + format.equalsIgnoreCase("application/pdf") || + format.equalsIgnoreCase("pdf")) { + return Driver.RENDER_PDF; + } else if (format.equalsIgnoreCase("application/postscript") || + format.equalsIgnoreCase("ps")) { + return Driver.RENDER_PS; + } else if (format.equalsIgnoreCase("application/vnd.mif") || + format.equalsIgnoreCase("mif")) { + return Driver.RENDER_MIF; + } else if (format.equalsIgnoreCase("application/vnd.gp-PCL") || + format.equalsIgnoreCase("pcl")) { + return Driver.RENDER_PCL; + } else if (format.equalsIgnoreCase("text/plain") || + format.equalsIgnoreCase("txt")) { + return Driver.RENDER_TXT; + } else if (format.equalsIgnoreCase("text/xml") || + format.equalsIgnoreCase("at") || + format.equalsIgnoreCase("xml")) { + return Driver.RENDER_XML; + } else { + String err = "Couldn't determine renderer to use: "+format; + log.error(err); + throw new BuildException(err); + } + } + + private String determineExtension(int renderer) { + switch (renderer) { + case Driver.RENDER_PDF: return ".pdf"; + case Driver.RENDER_PS: return ".ps"; + case Driver.RENDER_MIF: return ".mif"; + case Driver.RENDER_PCL: return ".pcl"; + case Driver.RENDER_TXT: return ".txt"; + case Driver.RENDER_XML: return ".xml"; + default: + String err = "Unknown renderer: "+renderer; + log.error(err); + throw new BuildException(err); + } + } + + private File replaceExtension(File file, String expectedExt, String newExt) { + String name = file.getName(); + if (name.toLowerCase().endsWith(expectedExt)) { + name = name.substring(0, name.length()-expectedExt.length()); + } + name = name.concat(newExt); + return new File(file.getParentFile(), name); + } + public void run() throws FOPException { try { // Configuration.put("baseDir", task.getBasedir().toURL().toExternalForm()); @@ -182,31 +266,76 @@ class FOPTaskStarter extends Starter { task.log("Error setting base directory", Project.MSG_DEBUG); } - InputHandler inputHandler = new FOInputHandler(task.getFofile()); + task.log("Using base directory: " + + Configuration.getValue("baseDir"), Project.MSG_DEBUG); + + int rint = determineRenderer(task.getFormat()); + String newExtension = determineExtension(rint); + + int actioncount = 0; + + // deal with single source file + if (task.getFofile() != null) { + if (task.getFofile().exists()) { + File outf = task.getOutfile(); + if (outf == null) { + throw new BuildException("outfile is required when fofile is used"); + } + if (task.getOutdir() != null) { + outf = new File(task.getOutdir(), outf.getName()); + } + render(task.getFofile(), outf, rint); + actioncount++; + } + } + + // deal with the filesets + for (int i=0; i<task.filesets.size(); i++) { + FileSet fs = (FileSet)task.filesets.elementAt(i); + DirectoryScanner ds = fs.getDirectoryScanner(task.getProject()); + String[] files = ds.getIncludedFiles(); + + for (int j=0; j<files.length; j++) { + File f = new File(fs.getDir(task.getProject()), files[j]); + File outf = replaceExtension(f, ".fo", newExtension); + if (task.getOutdir() != null) { + outf = new File(task.getOutdir(), outf.getName()); + } + render(f, outf, rint); + actioncount++; + } + } + + if (actioncount == 0) { + task.log("No files processed. No files were selected by the filesets and no fofile was set." + , Project.MSG_WARN); + } + } + + private void render(File foFile, File outFile, int renderer) throws FOPException { + InputHandler inputHandler = new FOInputHandler(foFile); XMLReader parser = inputHandler.getParser(); setParserFeatures(parser); - FileOutputStream pdfOut = null; + FileOutputStream out = null; try { - pdfOut = new FileOutputStream(task.getPdffile()); + out = new FileOutputStream(outFile); } catch (Exception ex) { - log.error("Failed to open " + task.getPdffile()); + log.error("Failed to open " + outFile); throw new BuildException(ex); } - task.log("Using base directory: " - + Configuration.getValue("baseDir"), Project.MSG_DEBUG); - task.log(task.getFofile().getName() + " -> " - + task.getPdffile().getName(), Project.MSG_INFO); + task.log(foFile + " -> " + outFile, Project.MSG_INFO); try { - Driver driver = new Driver(inputHandler.getInputSource(), pdfOut); + Driver driver = new Driver(inputHandler.getInputSource(), out); driver.setLogger(log); - driver.setRenderer(Driver.RENDER_PDF); + driver.setRenderer(renderer); driver.setXMLReader(parser); driver.run(); + out.close(); } catch (Exception ex) { - log.error("Couldn't render pdf: " + ex.getMessage()); + log.error("Couldn't render file: " + ex.getMessage()); throw new BuildException(ex); } } |