chrisg 2002/11/18 06:37:47
Modified: . Tag: fop-0_20_2-maintain CHANGES build.bat build.sh
build.xml
docs/examples Tag: fop-0_20_2-maintain runtests.bat
runtests.sh
docs/examples/fo Tag: fop-0_20_2-maintain images.fo
src/org/apache/fop/image Tag: fop-0_20_2-maintain
FopImageFactory.java
src/org/apache/fop/messaging Tag: fop-0_20_2-maintain
MessageHandler.java
src/org/apache/fop/pdf Tag: fop-0_20_2-maintain
PDFXObject.java
src/org/apache/fop/tools/anttasks Tag: fop-0_20_2-maintain
Fop.java
test Tag: fop-0_20_2-maintain createpdf.sh
Added: docs/graphics Tag: fop-0_20_2-maintain xml_fax.tif
src/org/apache/fop/image Tag: fop-0_20_2-maintain
TiffImage.java
src/org/apache/fop/pdf Tag: fop-0_20_2-maintain
CCFFilter.java
Log:
Added support for CCITT Group 4 encoded TIFF files
Made JAI support dynamic (no recompile needed anymore)
Submitted by: Manuel Mall <[EMAIL PROTECTED]> (see bug #13866)
Revision Changes Path
No revision
No revision
1.10.2.27 +3 -0 xml-fop/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/xml-fop/CHANGES,v
retrieving revision 1.10.2.26
retrieving revision 1.10.2.27
diff -u -r1.10.2.26 -r1.10.2.27
--- CHANGES 11 Nov 2002 18:30:15 -0000 1.10.2.26
+++ CHANGES 18 Nov 2002 14:37:44 -0000 1.10.2.27
@@ -1,6 +1,9 @@
==============================================================================
Done since 0.20.4 release
+- Added support for CCITT Group 4 encoded TIFF files
+ Made JAI support dynamic (no recompile needed anymore)
+ Submitted by: Manuel Mall <[EMAIL PROTECTED]> (see bug #13866)
- Fixed problem with jpegs with icc profile and acrobat reader 5 (Bug #11301)
Submitted by: Stephan Neuhaus <[EMAIL PROTECTED]>
- Fix bug in LinkSet.mergeLinks() (ArrayOutOfBoundsException when number of
1.14.2.9 +2 -0 xml-fop/build.bat
Index: build.bat
===================================================================
RCS file: /home/cvs/xml-fop/build.bat,v
retrieving revision 1.14.2.8
retrieving revision 1.14.2.9
diff -u -r1.14.2.8 -r1.14.2.9
--- build.bat 11 Nov 2002 10:24:39 -0000 1.14.2.8
+++ build.bat 18 Nov 2002 14:37:45 -0000 1.14.2.9
@@ -15,6 +15,8 @@
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\avalon-framework-cvs-20020806.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\bsf.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\jimi-1.0.jar
+set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\jai_core.jar
+set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\jai_codec.jar
set ANT_HOME=%LIBDIR%
1.15.2.12 +2 -0 xml-fop/build.sh
Index: build.sh
===================================================================
RCS file: /home/cvs/xml-fop/build.sh,v
retrieving revision 1.15.2.11
retrieving revision 1.15.2.12
diff -u -r1.15.2.11 -r1.15.2.12
--- build.sh 11 Nov 2002 10:24:38 -0000 1.15.2.11
+++ build.sh 18 Nov 2002 14:37:45 -0000 1.15.2.12
@@ -37,6 +37,8 @@
LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/avalon-framework-cvs-20020806.jar
LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/bsf.jar
LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/jimi-1.0.jar
+LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/jai_core.jar
+LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/jai_codec.jar
# antRun must be executable (can't do this in build.xml because Ant uses antRun
# to do the chmod)
1.44.2.27 +5 -3 xml-fop/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/xml-fop/build.xml,v
retrieving revision 1.44.2.26
retrieving revision 1.44.2.27
diff -u -r1.44.2.26 -r1.44.2.27
--- build.xml 11 Nov 2002 10:24:07 -0000 1.44.2.26
+++ build.xml 18 Nov 2002 14:37:45 -0000 1.44.2.27
@@ -212,7 +212,7 @@
<property name="viewer.resources.src.dir"
value="./src/org/apache/fop/viewer/resources"/>
<property name="viewer.images.src.dir"
value="./src/org/apache/fop/viewer/Images"/>
-
+
<property name="build.dir" value="./build"/>
<property name="build.src" value="./build/src"/>
<property name="build.codegen" value="./build/src/codegen"/>
@@ -223,7 +223,7 @@
<property name="viewer.resources.dest.dir"
value="${build.dest}/org/apache/fop/viewer/resources"/>
<property name="viewer.images.dest.dir"
value="${build.dest}/org/apache/fop/viewer/Images"/>
- <!-- <property name="dist.dir" value="./dist"/> -->
+ <!-- <property name="dist.dir" value="./dist"/> -->
<property name="dist.bin.dir" value="./dist-bin"/>
<property name="dist.src.dir" value="./dist-src"/>
<property name="dist.bin.result.dir"
value="${dist.bin.dir}/${name}-${version}"/>
@@ -236,6 +236,7 @@
<property name="ignore_this" value="ignore_this.java"/>
<property name="jimi" value="JimiImage.java"/>
<property name="jai" value="JAIImage.java"/>
+ <property name="tiff" value="TiffImage.java"/>
<!--property name="xslt" value="org.apache.xalan.xslt.Process"/-->
<property name="src.properties.xsl" value="${src.codegen}/properties.xsl"/>
@@ -356,6 +357,7 @@
<echo message="JAI library is present. Fop installs JAI support."/>
<copy todir="${build.src}">
<fileset dir="${src.dir}" includes="**/${jai}"/>
+ <fileset dir="${src.dir}" includes="**/${tiff}"/>
</copy>
</target>
@@ -374,7 +376,7 @@
<!-- copy src files -->
<copy todir="${build.src}" filtering="yes">
<fileset dir="${src.dir}"
-
excludes="**/${jimi},**/${jai},**/${xsltransform},**/${trax},**/apps/TraxInputHandler.java"/>
+
excludes="**/${jimi},**/${jai},**/${tiff},**/${xsltransform},**/${trax},**/apps/TraxInputHandler.java"/>
<filterset>
<filter token="XSLFO-STD" value="${xslfo.std}"/>
<filter token="XSLFO-STDID" value="${xslfo.std.id}"/>
No revision
No revision
1.11.2.8 +2 -0 xml-fop/docs/examples/runtests.bat
Index: runtests.bat
===================================================================
RCS file: /home/cvs/xml-fop/docs/examples/runtests.bat,v
retrieving revision 1.11.2.7
retrieving revision 1.11.2.8
diff -u -r1.11.2.7 -r1.11.2.8
--- runtests.bat 11 Nov 2002 10:19:27 -0000 1.11.2.7
+++ runtests.bat 18 Nov 2002 14:37:45 -0000 1.11.2.8
@@ -16,6 +16,8 @@
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\avalon-framework-cvs-20020806.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\bsf.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\jimi-1.0.jar
+set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\jai_core.jar
+set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\jai_codec.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\..\build\fop.jar
set ANT_HOME=%LIBDIR%
1.8.2.8 +2 -0 xml-fop/docs/examples/runtests.sh
Index: runtests.sh
===================================================================
RCS file: /home/cvs/xml-fop/docs/examples/runtests.sh,v
retrieving revision 1.8.2.7
retrieving revision 1.8.2.8
diff -u -r1.8.2.7 -r1.8.2.8
--- runtests.sh 11 Nov 2002 10:19:27 -0000 1.8.2.7
+++ runtests.sh 18 Nov 2002 14:37:45 -0000 1.8.2.8
@@ -35,6 +35,8 @@
LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/avalon-framework-cvs-20020806.jar
LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/bsf.jar
LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/jimi-1.0.jar
+LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/jai_core.jar
+LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/jai_codec.jar
LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/../build/fop.jar
ANT_HOME=$LIBDIR
No revision
No revision
1.11.2.2 +26 -20 xml-fop/docs/examples/fo/images.fo
Index: images.fo
===================================================================
RCS file: /home/cvs/xml-fop/docs/examples/fo/images.fo,v
retrieving revision 1.11.2.1
retrieving revision 1.11.2.2
diff -u -r1.11.2.1 -r1.11.2.2
--- images.fo 6 Dec 2001 21:28:18 -0000 1.11.2.1
+++ images.fo 18 Nov 2002 14:37:45 -0000 1.11.2.2
@@ -4,28 +4,28 @@
<fo:layout-master-set>
<fo:simple-page-master master-name="right"
- margin-top="75pt" margin-bottom="25pt" margin-left="100pt" margin-right="50pt">
- <fo:region-body margin-bottom="50pt"/>
- <fo:region-after extent="25pt"/>
+ margin-top="75pt" margin-bottom="25pt" margin-left="100pt"
margin-right="50pt">
+ <fo:region-body margin-bottom="50pt"/>
+ <fo:region-after extent="25pt"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="left"
- margin-top="75pt" margin-bottom="25pt" margin-left="50pt" margin-right="100pt">
- <fo:region-body margin-bottom="50pt"/>
- <fo:region-after extent="25pt"/>
+ margin-top="75pt" margin-bottom="25pt" margin-left="50pt"
margin-right="100pt">
+ <fo:region-body margin-bottom="50pt"/>
+ <fo:region-after extent="25pt"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="psmOddEven" >
- <fo:repeatable-page-master-alternatives>
- <fo:conditional-page-master-reference master-reference="right"
- page-position="first" />
- <fo:conditional-page-master-reference master-reference="left"
- odd-or-even="even" />
- <fo:conditional-page-master-reference master-reference="right"
- odd-or-even="odd" />
- <!-- recommended fallback procedure -->
- <fo:conditional-page-master-reference master-reference="rest" />
- </fo:repeatable-page-master-alternatives>
+ <fo:repeatable-page-master-alternatives>
+ <fo:conditional-page-master-reference master-reference="right"
+ page-position="first" />
+ <fo:conditional-page-master-reference master-reference="left"
+ odd-or-even="even" />
+ <fo:conditional-page-master-reference master-reference="right"
+ odd-or-even="odd" />
+ <!-- recommended fallback procedure -->
+ <fo:conditional-page-master-reference master-reference="rest" />
+ </fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
@@ -33,9 +33,9 @@
<fo:page-sequence id="N2528" master-reference="psmOddEven">
<fo:static-content flow-name="xsl-region-after">
- <fo:block text-align-last="center" font-size="10pt">
- <fo:page-number/>
- </fo:block>
+ <fo:block text-align-last="center" font-size="10pt">
+ <fo:page-number/>
+ </fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
@@ -64,6 +64,12 @@
<fo:external-graphic src="file:../../graphics/linux.bmp"/>
</fo:block>
</fo:block>
+<fo:block id="N2555">
+ <fo:block font-size="16pt" font-weight="bold" space-before.minimum="1em"
space-before.optimum="1.5em" space-before.maximum="2em">A TIFF image in FOP (Only
works with JAI!)</fo:block>
+ <fo:block>
+ <fo:external-graphic src="file:../../graphics/xml_fax.tif"/>
+ </fo:block>
+</fo:block>
<fo:block id="N2559">
<fo:block font-size="16pt" font-weight="bold" space-before.minimum="1em"
space-before.optimum="1.5em" space-before.maximum="2em"/>
This section is only required to show that the layout still works.
@@ -80,4 +86,4 @@
<fo:block font-size="18pt" font-weight="bold">A. Appendix</fo:block></fo:flow>
</fo:page-sequence>
</fo:root>
-
+
No revision
No revision
1.1.2.1 +7 -0 xml-fop/docs/graphics/Attic/xml_fax.tif
<<Binary file>>
No revision
No revision
1.25.2.6 +34 -12 xml-fop/src/org/apache/fop/image/Attic/FopImageFactory.java
Index: FopImageFactory.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/Attic/FopImageFactory.java,v
retrieving revision 1.25.2.5
retrieving revision 1.25.2.6
diff -u -r1.25.2.5 -r1.25.2.6
--- FopImageFactory.java 8 Nov 2002 10:11:06 -0000 1.25.2.5
+++ FopImageFactory.java 18 Nov 2002 14:37:45 -0000 1.25.2.6
@@ -30,6 +30,13 @@
private static Map m_urlMap = new java.util.HashMap();
/**
+ * The class name of the generic image handler.
+ * Will be either jimi or jai depending on what
+ * is available.
+ */
+ private static String m_genericImageClassName = null;
+
+ /**
* create an FopImage objects.
* @param href image URL as a String
* @return a new FopImage object
@@ -126,24 +133,18 @@
String imgClassName = null;
if ("image/gif".equals(imgMimeType)) {
imgClassName = "org.apache.fop.image.GifImage";
- // imgClassName = "org.apache.fop.image.JAIImage";
} else if ("image/jpeg".equals(imgMimeType)) {
imgClassName = "org.apache.fop.image.JpegImage";
- // imgClassName = "org.apache.fop.image.JAIImage";
} else if ("image/bmp".equals(imgMimeType)) {
imgClassName = "org.apache.fop.image.BmpImage";
- // imgClassName = "org.apache.fop.image.JAIImage";
} else if ("image/png".equals(imgMimeType)) {
- imgClassName = "org.apache.fop.image.JimiImage";
- // imgClassName = "org.apache.fop.image.JAIImage";
+ imgClassName = getGenericImageClassName();
} else if ("image/tga".equals(imgMimeType)) {
- imgClassName = "org.apache.fop.image.JimiImage";
- // imgClassName = "org.apache.fop.image.JAIImage";
+ imgClassName = getGenericImageClassName();
} else if ("image/eps".equals(imgMimeType)) {
imgClassName = "org.apache.fop.image.EPSImage";
} else if ("image/tiff".equals(imgMimeType)) {
- imgClassName = "org.apache.fop.image.JimiImage";
- // imgClassName = "org.apache.fop.image.JAIImage";
+ imgClassName = getGenericImageClassName();
} else if ("image/svg+xml".equals(imgMimeType)) {
imgClassName = "org.apache.fop.image.SVGImage";
}
@@ -152,8 +153,8 @@
+ absoluteURL.toString() + ") : "
+ imgMimeType);
- // load the right image class
- // return new <FopImage implementing class>
+ // load the right image class
+ // return new <FopImage implementing class>
Object imageInstance = null;
Class imageClass = null;
try {
@@ -194,6 +195,27 @@
m_urlMap.put(href, imageInstance);
return (FopImage)imageInstance;
}
+
+
+ /**
+ * Determines the class name of the generic image handler
+ * This should really come from a config file but we leave this
+ * to some future time.
+ */
+ private static String getGenericImageClassName() {
+
+ if (m_genericImageClassName == null) {
+ try {
+ Class.forName("org.apache.fop.image.JAIImage");
+ m_genericImageClassName = "org.apache.fop.image.JAIImage";
+ } catch (Exception ex) {
+ /* on any exception assume Jai is not present and use Jimi instead
*/
+ m_genericImageClassName = "org.apache.fop.image.JimiImage";
+ }
+ }
+ return m_genericImageClassName;
+ }
+
/**
* Clear the image cache.
No revision
No revision
1.1.2.1 +170 -0 xml-fop/src/org/apache/fop/image/Attic/TiffImage.java
No revision
No revision
1.6.2.4 +302 -301 xml-fop/src/org/apache/fop/messaging/Attic/MessageHandler.java
Index: MessageHandler.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/messaging/Attic/MessageHandler.java,v
retrieving revision 1.6.2.3
retrieving revision 1.6.2.4
diff -u -r1.6.2.3 -r1.6.2.4
--- MessageHandler.java 2 Aug 2002 20:28:53 -0000 1.6.2.3
+++ MessageHandler.java 18 Nov 2002 14:37:46 -0000 1.6.2.4
@@ -1,301 +1,302 @@
-/*
- * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
- * For details on use and redistribution please refer to the
- * LICENSE file included with these sources."
- */
-
-
-package org.apache.fop.messaging;
-
-import org.apache.avalon.framework.logger.ConsoleLogger;
-import org.apache.avalon.framework.logger.Logger;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * The class MessageHandler contains the static methods log and error which
- * should be used for any end user information instead of System.out.print() or
- * System.err.print(). The class defines several output methods:
- * writing to the screen (default), logging to a file, creating message events and
repressing all
- * output. If you don't want to change the default behaviour, you should be
- * happy with MessageHandler.log(message) and MessageHandler.error(message)<br>
- * The class MessageHandler also supports the setting of an id. If set every
message
- * has as a prefix an identifying string. That way Fop probably can also be used in
- * environments, where more than one Fop instance are running in same JVM.<br>
- * If Fop is embedded in a gui application or for any reasons the existing
- * messaging system doesn't meet the programmer's requirements, one can add
- * a MessageEvent listener to MessageHandler and handle the incoming messages
- * in an appropriate way. See the class DefaultMessageListener, which is a trivial
- * implementation of the MessageListener.
- * Here is an example how to configure MessageHandler for the
DefaultMessageListener (anybody
- * can provide his own listener by extending MessageListener<br>
- * <code>
- * MessageHandler.setOutputMethod(MessageHandler.EVENT);
- * MessageHandler.addListener(new DefaultMessageListener());
- * </code><br>
- * This examples shows, how to redirect the messages to a log file called fop.log.
- * All messages are appended to this file.
- * <code>
- * MessageHandler.setOutputMethod(MessageHandler.FILE);
- * MessageHandler.setLogfileName("\\fop.log",true);
- * </code>
- */
-
-public class MessageHandler {
- public static final int SCREEN = 0;
- public static final int FILE = 1;
- public static final int EVENT = 2;
- public static final int NONE = 3; // this should always be the last method
-
- private static Logger logger = null;
- private static String logfileName = "fop.log";
- private static PrintWriter writer;
- private static int outputMethod = SCREEN;
- private static boolean fileOpened = false;
- private static boolean appendToFile = true;
- private static String message = "";
- private static String prefix = "";
- private static Vector listeners = new Vector();
- private static boolean IDisSet = false;
- private static boolean quiet = false;
-
- /**
- * helper class to access the message
- * @return a string containing the message
- */
-
- private static String getMessage() {
- return message;
- }
-
- /**
- * helper class which sets the message
- * and adds a prefix which can contain
- * the id of the thread which uses this messagehandler
- */
- private static void setMessage(String m) {
- if (IDisSet) {
- message = getID() + ":" + m;
- } else {
- message = m;
- }
- }
-
- /**
- * informs the user of the message
- * @param message the message for the user
- */
- public static void log(String message) {
- if (quiet)
- return;
-
- if (logger == null) {
- logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
- logger.warn("Screen logger not set.");
- }
-
- setMessage(message);
- switch (outputMethod) {
- case SCREEN:
- logger.debug(getMessage());
- break;
- case FILE:
- if (fileOpened) {
- writer.print(getMessage());
- writer.flush();
- } else {
- openFile();
- writer.print(getMessage());
- writer.flush();
- }
- break;
- case EVENT:
- setMessage(message);
- Enumeration enum = listeners.elements();
- while (enum.hasMoreElements()) {
- ((MessageListener)enum.nextElement()).processMessage(new
MessageEvent(getMessage()));
- }
- break;
- case NONE:
- // do nothing
- break;
- default:
- logger.debug(message);
- }
- }
-
- /**
- * convenience method which adds a return to the message
- * @param message the message for the user
- */
- public static void logln(String message) {
- log(message);
- }
-
- /**
- * error warning for the user
- * @param errorMessage contains the warning string
- */
-
- public static void error(String errorMessage) {
- if (logger == null) {
- logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
- logger.warn("Screen logger not set.");
- }
-
- setMessage(errorMessage);
- switch (outputMethod) {
- case SCREEN:
- logger.error(getMessage());
- break;
- case FILE:
- if (fileOpened) {
- writer.print(getMessage());
- writer.flush();
- } else {
- openFile();
- writer.print(getMessage());
- writer.flush();
- }
- break;
- case EVENT:
- setMessage(message);
- Enumeration enum = listeners.elements();
- while (enum.hasMoreElements()) {
- MessageEvent messEv = new MessageEvent(getMessage());
- messEv.setMessageType(MessageEvent.ERROR);
- ((MessageListener)enum.nextElement()).processMessage(messEv);
- }
- break;
- case NONE:
- // do nothing
- break;
- default:
- logger.error(errorMessage);
- }
- }
-
- /**
- * convenience method which adds a return to the error message
- * @param errorMessage the message for the user
- */
- public static void errorln(String errorMessage) {
- error(errorMessage);
- }
-
- /**
- * adds a MessageListener which listens for MessageEvents
- * @param MessageListener the listener to add
- */
- public static void addListener(MessageListener listener) {
- listeners.add(listener);
- }
-
- /**
- * removes a MessageListener
- * @param MessageListener the listener to remove
- */
- public static void removeListener(MessageListener listener) {
- listeners.removeElement(listener);
- }
-
- /**
- * Sets the Logger used for the screen output method.
- * @param newLogger a logger for screen output. This may not be null.
- */
- public static void setScreenLogger(Logger newLogger) {
- if (newLogger == null)
- throw new NullPointerException();
- logger = newLogger;
- }
-
- /**
- * sets the output method
- * @param method the output method to use, allowed values are<br>
- * MessageHandler.SCREEN, MessageHandler.FILE, MessageHandler.EVENT
- * MessageHandler.NONE
- */
- public static void setOutputMethod(int method) {
- if (method > NONE) {
- MessageHandler.error("Error: Unknown output method");
- } else {
- outputMethod = method;
- }
- }
-
- /**
- * informs what output method is set
- * @return the output method
- */
- public static int getOutputMethod() {
- return outputMethod;
- }
-
- /**
- * sets the logfile name
- * @param filename name of the logfile
- * @param append if true, the logfile is appended
- */
- public static void setLogfileName(String filename, boolean append) {
- logfileName = filename;
- appendToFile = append;
- }
-
- /**
- * returns the logfile name
- * @return String containing the logfile name
- */
- public static String getLogfileName() {
- return logfileName;
- }
-
- /**
- * helper file which opens the file for output method FILE
- */
- private static void openFile() {
- try {
- writer =
- new PrintWriter(new FileWriter(logfileName, appendToFile),
- true);
- writer.println("\n==============================================");
- fileOpened = true;
- } catch (IOException ioe) {
- System.err.println("Error: " + ioe);
- }
- }
-
- /**
- * if set to true an id string is prefixed to every message
- * uses the thread info as an id for the message producer. Should be used if
- * more than one instance of Fop is running in the same JVM
- * this id becomes a prefix to every message
- */
- private static String getID() {
- return Thread.currentThread().toString();
- }
-
- /**
- * if set to true an id string is prefixed to every message
- * uses the thread info as an id for the message producer. Should be used if
- * more than one instance of Fop is running in the same JVM
- * this id becomes a prefix to every message
- *
- * @param id boolean (default is false)
- */
-
- public static void setID(boolean id) {
- IDisSet = id;
- }
-
- /**
- * if set to true all normal messages are suppressed.
- * error messages are displayed allthesame
- *
- * @param quietMode boolean (default is false)
- */
- public static void setQuiet(boolean quietMode) {
- quiet = quietMode;
- }
-
-}
+/*
+ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
+ * For details on use and redistribution please refer to the
+ * LICENSE file included with these sources."
+ */
+
+
+package org.apache.fop.messaging;
+
+import org.apache.avalon.framework.logger.ConsoleLogger;
+import org.apache.avalon.framework.logger.Logger;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * The class MessageHandler contains the static methods log and error which
+ * should be used for any end user information instead of System.out.print() or
+ * System.err.print(). The class defines several output methods:
+ * writing to the screen (default), logging to a file, creating message events and
repressing all
+ * output. If you don't want to change the default behaviour, you should be
+ * happy with MessageHandler.log(message) and MessageHandler.error(message)<br>
+ * The class MessageHandler also supports the setting of an id. If set every message
+ * has as a prefix an identifying string. That way Fop probably can also be used in
+ * environments, where more than one Fop instance are running in same JVM.<br>
+ * If Fop is embedded in a gui application or for any reasons the existing
+ * messaging system doesn't meet the programmer's requirements, one can add
+ * a MessageEvent listener to MessageHandler and handle the incoming messages
+ * in an appropriate way. See the class DefaultMessageListener, which is a trivial
+ * implementation of the MessageListener.
+ * Here is an example how to configure MessageHandler for the
DefaultMessageListener (anybody
+ * can provide his own listener by extending MessageListener<br>
+ * <code>
+ * MessageHandler.setOutputMethod(MessageHandler.EVENT);
+ * MessageHandler.addListener(new DefaultMessageListener());
+ * </code><br>
+ * This examples shows, how to redirect the messages to a log file called fop.log.
+ * All messages are appended to this file.
+ * <code>
+ * MessageHandler.setOutputMethod(MessageHandler.FILE);
+ * MessageHandler.setLogfileName("\\fop.log",true);
+ * </code>
+ */
+
+public class MessageHandler {
+ public static final int SCREEN = 0;
+ public static final int FILE = 1;
+ public static final int EVENT = 2;
+ public static final int NONE = 3; // this should always be the last method
+
+ private static Logger logger = null;
+ private static String logfileName = "fop.log";
+ private static PrintWriter writer;
+ private static int outputMethod = SCREEN;
+ private static boolean fileOpened = false;
+ private static boolean appendToFile = true;
+ private static String message = "";
+ private static String prefix = "";
+ private static Vector listeners = new Vector();
+ private static boolean IDisSet = false;
+ private static boolean quiet = false;
+
+ /**
+ * helper class to access the message
+ * @return a string containing the message
+ */
+
+ private static String getMessage() {
+ return message;
+ }
+
+ /**
+ * helper class which sets the message
+ * and adds a prefix which can contain
+ * the id of the thread which uses this messagehandler
+ */
+ private static void setMessage(String m) {
+ if (IDisSet) {
+ message = getID() + ":" + m;
+ } else {
+ message = m;
+ }
+ }
+
+ /**
+ * informs the user of the message
+ * @param message the message for the user
+ */
+ public static void log(String message) {
+ if (quiet) {
+ return;
+ }
+
+ if (logger == null) {
+ logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
+ logger.warn("Screen logger not set.");
+ }
+
+ setMessage(message);
+ switch (outputMethod) {
+ case SCREEN:
+ logger.info(getMessage());
+ break;
+ case FILE:
+ if (fileOpened) {
+ writer.print(getMessage());
+ writer.flush();
+ } else {
+ openFile();
+ writer.print(getMessage());
+ writer.flush();
+ }
+ break;
+ case EVENT:
+ setMessage(message);
+ Enumeration enum = listeners.elements();
+ while (enum.hasMoreElements()) {
+ ((MessageListener)enum.nextElement()).processMessage(new
MessageEvent(getMessage()));
+ }
+ break;
+ case NONE:
+ // do nothing
+ break;
+ default:
+ logger.info(message);
+ }
+ }
+
+ /**
+ * convenience method which adds a return to the message
+ * @param message the message for the user
+ */
+ public static void logln(String message) {
+ log(message);
+ }
+
+ /**
+ * error warning for the user
+ * @param errorMessage contains the warning string
+ */
+
+ public static void error(String errorMessage) {
+ if (logger == null) {
+ logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
+ logger.warn("Screen logger not set.");
+ }
+
+ setMessage(errorMessage);
+ switch (outputMethod) {
+ case SCREEN:
+ logger.error(getMessage());
+ break;
+ case FILE:
+ if (fileOpened) {
+ writer.print(getMessage());
+ writer.flush();
+ } else {
+ openFile();
+ writer.print(getMessage());
+ writer.flush();
+ }
+ break;
+ case EVENT:
+ setMessage(message);
+ Enumeration enum = listeners.elements();
+ while (enum.hasMoreElements()) {
+ MessageEvent messEv = new MessageEvent(getMessage());
+ messEv.setMessageType(MessageEvent.ERROR);
+ ((MessageListener)enum.nextElement()).processMessage(messEv);
+ }
+ break;
+ case NONE:
+ // do nothing
+ break;
+ default:
+ logger.error(errorMessage);
+ }
+ }
+
+ /**
+ * convenience method which adds a return to the error message
+ * @param errorMessage the message for the user
+ */
+ public static void errorln(String errorMessage) {
+ error(errorMessage);
+ }
+
+ /**
+ * adds a MessageListener which listens for MessageEvents
+ * @param MessageListener the listener to add
+ */
+ public static void addListener(MessageListener listener) {
+ listeners.add(listener);
+ }
+
+ /**
+ * removes a MessageListener
+ * @param MessageListener the listener to remove
+ */
+ public static void removeListener(MessageListener listener) {
+ listeners.removeElement(listener);
+ }
+
+ /**
+ * Sets the Logger used for the screen output method.
+ * @param newLogger a logger for screen output. This may not be null.
+ */
+ public static void setScreenLogger(Logger newLogger) {
+ if (newLogger == null)
+ throw new NullPointerException();
+ logger = newLogger;
+ }
+
+ /**
+ * sets the output method
+ * @param method the output method to use, allowed values are<br>
+ * MessageHandler.SCREEN, MessageHandler.FILE, MessageHandler.EVENT
+ * MessageHandler.NONE
+ */
+ public static void setOutputMethod(int method) {
+ if (method > NONE) {
+ MessageHandler.error("Error: Unknown output method");
+ } else {
+ outputMethod = method;
+ }
+ }
+
+ /**
+ * informs what output method is set
+ * @return the output method
+ */
+ public static int getOutputMethod() {
+ return outputMethod;
+ }
+
+ /**
+ * sets the logfile name
+ * @param filename name of the logfile
+ * @param append if true, the logfile is appended
+ */
+ public static void setLogfileName(String filename, boolean append) {
+ logfileName = filename;
+ appendToFile = append;
+ }
+
+ /**
+ * returns the logfile name
+ * @return String containing the logfile name
+ */
+ public static String getLogfileName() {
+ return logfileName;
+ }
+
+ /**
+ * helper file which opens the file for output method FILE
+ */
+ private static void openFile() {
+ try {
+ writer =
+ new PrintWriter(new FileWriter(logfileName, appendToFile),
+ true);
+ writer.println("\n==============================================");
+ fileOpened = true;
+ } catch (IOException ioe) {
+ System.err.println("Error: " + ioe);
+ }
+ }
+
+ /**
+ * if set to true an id string is prefixed to every message
+ * uses the thread info as an id for the message producer. Should be used if
+ * more than one instance of Fop is running in the same JVM
+ * this id becomes a prefix to every message
+ */
+ private static String getID() {
+ return Thread.currentThread().toString();
+ }
+
+ /**
+ * if set to true an id string is prefixed to every message
+ * uses the thread info as an id for the message producer. Should be used if
+ * more than one instance of Fop is running in the same JVM
+ * this id becomes a prefix to every message
+ *
+ * @param id boolean (default is false)
+ */
+
+ public static void setID(boolean id) {
+ IDisSet = id;
+ }
+
+ /**
+ * if set to true all normal messages are suppressed.
+ * error messages are displayed allthesame
+ *
+ * @param quietMode boolean (default is false)
+ */
+ public static void setQuiet(boolean quietMode) {
+ quiet = quietMode;
+ }
+
+}
No revision
No revision
1.14.2.4 +10 -3 xml-fop/src/org/apache/fop/pdf/PDFXObject.java
Index: PDFXObject.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFXObject.java,v
retrieving revision 1.14.2.3
retrieving revision 1.14.2.4
diff -u -r1.14.2.3 -r1.14.2.4
--- PDFXObject.java 8 Nov 2002 10:25:27 -0000 1.14.2.3
+++ PDFXObject.java 18 Nov 2002 14:37:46 -0000 1.14.2.4
@@ -187,12 +187,19 @@
* Added by Eric Dalquist
* If the DCT filter hasn't been added to the object we add it here
*/
+ /*
+ * Added by Manuel Mall
+ * Only add the default filters if we don't have an image filter to
+ * avoid double encoding of images
+ */
+
if (fopimage.getPDFFilter() != null) {
imgStream.addFilter(fopimage.getPDFFilter());
+ } else {
+ imgStream.addDefaultFilters();
}
- imgStream.addDefaultFilters();
-
+
String dictEntries = imgStream.applyFilters();
String p = this.number + " " + this.generation + " obj\n";
No revision
No revision
1.1.2.1 +42 -0 xml-fop/src/org/apache/fop/pdf/Attic/CCFFilter.java
No revision
No revision
1.14.2.6 +377 -366 xml-fop/src/org/apache/fop/tools/anttasks/Fop.java
Index: Fop.java
===================================================================
RCS file: /home/cvs/xml-fop/src/org/apache/fop/tools/anttasks/Fop.java,v
retrieving revision 1.14.2.5
retrieving revision 1.14.2.6
diff -u -r1.14.2.5 -r1.14.2.6
--- Fop.java 2 Aug 2002 20:28:58 -0000 1.14.2.5
+++ Fop.java 18 Nov 2002 14:37:46 -0000 1.14.2.6
@@ -1,366 +1,377 @@
-/*
- * $Id$
- * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
- * For details on use and redistribution please refer to the
- * LICENSE file included with these sources.
- */
-
-package org.apache.fop.tools.anttasks;
-
-// Ant
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.types.FileSet;
-
-// SAX
-import org.xml.sax.XMLReader;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-// Java
-import java.io.*;
-import java.util.*;
-
-// FOP
-import org.apache.fop.messaging.*;
-import org.apache.fop.apps.Options;
-import org.apache.fop.apps.Starter;
-import org.apache.fop.apps.InputHandler;
-import org.apache.fop.apps.FOInputHandler;
-import org.apache.fop.apps.Driver;
-import org.apache.fop.apps.FOPException;
-import org.apache.fop.configuration.Configuration;
-
-// Avalon
-import org.apache.avalon.framework.logger.ConsoleLogger;
-import org.apache.avalon.framework.logger.Logger;
-
-/**
- * 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>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>userconfig -> file with user configuration (same as the "-c" command line
option)</li>
- * <li>messagelevel -> (info | verbose | debug) level to output non-error
messages</li>
- * </ul>
- */
-public class Fop extends Task {
- File foFile;
- ArrayList filesets = new ArrayList();
- File outFile;
- File outDir;
- String format; //MIME type
- File baseDir;
- File userConfig;
- int messageType = Project.MSG_VERBOSE;
-
- /**
- * Sets the input file
- * @param File to input from
- */
- public void setUserconfig (File userConfig) {
- this.userConfig = userConfig;
- }
-
- /**
- * Sets the input file
- * @param File to input from
- */
- public void setFofile(File foFile) {
- this.foFile = foFile;
- }
-
- /**
- * Gets the input file
- */
- public File getFofile() {
- return foFile;
- }
-
- /**
- * Adds a set of fo files (nested fileset attribute).
- */
- public void addFileset(FileSet set) {
- filesets.add(set);
- }
-
- /**
- * Sets the output file
- * @param File to output to
- */
- public void setOutfile(File outFile) {
- this.outFile = outFile;
- }
-
- /**
- * Gets the output file
- */
- 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;
- }
-
- /**
- * Sets the message level to be used while processing.
- * @param String (info | verbose | debug)
- */
- public void setMessagelevel(String messageLevel) {
- if (messageLevel.equalsIgnoreCase("info")) {
- messageType = Project.MSG_INFO;
- } else if (messageLevel.equalsIgnoreCase("verbose")) {
- messageType = Project.MSG_VERBOSE;
- } else if (messageLevel.equalsIgnoreCase("debug")) {
- messageType = Project.MSG_DEBUG;
- } else {
- log("messagelevel set to unknown value \"" + messageLevel +
- "\"", Project.MSG_ERR);
- throw new BuildException("unknown messagelevel");
- }
- }
-
- /**
- * Returns the message type corresponding to Property.MSG_(INFO | VERBOSE |
DEBUG)
- * representing the current message level.
- */
- public int getMessageType() {
- return messageType;
- }
-
- /**
- * Sets the base directory; currently ignored
- * @param File to use as a working directory
- */
- public void setBasedir(File baseDir) {
- this.baseDir = baseDir;
- }
-
- /**
- * Gets the base directory
- */
- public File getBasedir() {
- return (baseDir != null) ? baseDir : project.resolveFile(".");
- }
-
- /**
- * Starts execution of this task
- */
- public void execute() throws BuildException {
- try {
- Starter starter = new FOPTaskStarter(this);
- starter.run();
- } catch (FOPException ex) {
- throw new BuildException(ex);
- }
-
- }
-
-}
-
-class FOPTaskStarter extends Starter {
- Fop task;
- Logger log;
-
- FOPTaskStarter(Fop task) throws FOPException {
- this.task = task;
-
- log = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
- MessageHandler.setScreenLogger(log);
- }
-
- 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 {
- if (task.userConfig != null) {
- new Options (task.userConfig);
- }
-
- try {
- if (task.getFofile() != null) {
- Configuration.put("baseDir",
- task.getFofile().getParentFile().toURL().
- toExternalForm());
- }
- } catch (Exception e) {
- log.error("Error setting base directory",e);
- }
-
- 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.get(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());
- }
- try {
- Configuration.put("baseDir",
- fs.getDir(task.getProject()).toURL().
- toExternalForm());
-
- } catch (Exception e) {
- task.log("Error setting base directory",
- Project.MSG_DEBUG);
- }
-
- 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();
-
- FileOutputStream out = null;
- try {
- out = new FileOutputStream(outFile);
- } catch (Exception ex) {
- log.error("Failed to open " + outFile);
- throw new BuildException(ex);
- }
-
- task.log(foFile + " -> " + outFile, Project.MSG_INFO);
-
- try {
- Driver driver = new Driver(inputHandler.getInputSource(), out);
- driver.setLogger(log);
- driver.setRenderer(renderer);
- if (renderer == Driver.RENDER_XML) {
- HashMap rendererOptions = new HashMap();
- rendererOptions.put("fineDetail", new Boolean(true));
- driver.getRenderer().setOptions(rendererOptions);
- }
- driver.setXMLReader(parser);
- driver.run();
- out.close();
- } catch (Exception ex) {
- log.error("Couldn't render file: " + ex.getMessage());
- throw new BuildException(ex);
- }
- }
-
-}
-
+/*
+ * $Id$
+ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
+ * For details on use and redistribution please refer to the
+ * LICENSE file included with these sources.
+ */
+
+package org.apache.fop.tools.anttasks;
+
+// Ant
+import org.apache.tools.ant.*;
+import org.apache.tools.ant.types.FileSet;
+
+// SAX
+import org.xml.sax.XMLReader;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+// Java
+import java.io.*;
+import java.util.*;
+
+// FOP
+import org.apache.fop.messaging.*;
+import org.apache.fop.apps.Options;
+import org.apache.fop.apps.Starter;
+import org.apache.fop.apps.InputHandler;
+import org.apache.fop.apps.FOInputHandler;
+import org.apache.fop.apps.Driver;
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.configuration.Configuration;
+
+// Avalon
+import org.apache.avalon.framework.logger.ConsoleLogger;
+import org.apache.avalon.framework.logger.Logger;
+
+/**
+ * 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>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>userconfig -> file with user configuration (same as the "-c" command line
option)</li>
+ * <li>messagelevel -> (info | verbose | debug) level to output non-error
messages</li>
+ * </ul>
+ */
+public class Fop extends Task {
+ File foFile;
+ ArrayList filesets = new ArrayList();
+ File outFile;
+ File outDir;
+ String format; //MIME type
+ File baseDir;
+ File userConfig;
+ int messageType = Project.MSG_VERBOSE;
+
+ /**
+ * Sets the input file
+ * @param File to input from
+ */
+ public void setUserconfig (File userConfig) {
+ this.userConfig = userConfig;
+ }
+
+ /**
+ * Sets the input file
+ * @param File to input from
+ */
+ public void setFofile(File foFile) {
+ this.foFile = foFile;
+ }
+
+ /**
+ * Gets the input file
+ */
+ public File getFofile() {
+ return foFile;
+ }
+
+ /**
+ * Adds a set of fo files (nested fileset attribute).
+ */
+ public void addFileset(FileSet set) {
+ filesets.add(set);
+ }
+
+ /**
+ * Sets the output file
+ * @param File to output to
+ */
+ public void setOutfile(File outFile) {
+ this.outFile = outFile;
+ }
+
+ /**
+ * Gets the output file
+ */
+ 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;
+ }
+
+ /**
+ * Sets the message level to be used while processing.
+ * @param String (info | verbose | debug)
+ */
+ public void setMessagelevel(String messageLevel) {
+ if (messageLevel.equalsIgnoreCase("info")) {
+ messageType = Project.MSG_INFO;
+ } else if (messageLevel.equalsIgnoreCase("verbose")) {
+ messageType = Project.MSG_VERBOSE;
+ } else if (messageLevel.equalsIgnoreCase("debug")) {
+ messageType = Project.MSG_DEBUG;
+ } else {
+ log("messagelevel set to unknown value \"" + messageLevel +
+ "\"", Project.MSG_ERR);
+ throw new BuildException("unknown messagelevel");
+ }
+ }
+
+ /**
+ * Returns the message type corresponding to Property.MSG_(INFO | VERBOSE |
DEBUG)
+ * representing the current message level.
+ */
+ public int getMessageType() {
+ return messageType;
+ }
+
+ /**
+ * Sets the base directory; currently ignored
+ * @param File to use as a working directory
+ */
+ public void setBasedir(File baseDir) {
+ this.baseDir = baseDir;
+ }
+
+ /**
+ * Gets the base directory
+ */
+ public File getBasedir() {
+ return (baseDir != null) ? baseDir : project.resolveFile(".");
+ }
+
+ /**
+ * Starts execution of this task
+ */
+ public void execute() throws BuildException {
+ try {
+ Starter starter = new FOPTaskStarter(this);
+ starter.run();
+ } catch (FOPException ex) {
+ throw new BuildException(ex);
+ }
+
+ }
+
+}
+
+class FOPTaskStarter extends Starter {
+ Fop task;
+ Logger log;
+
+ FOPTaskStarter(Fop task) throws FOPException {
+ this.task = task;
+
+ log = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
+ MessageHandler.setScreenLogger(log);
+ }
+
+ 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 {
+ if (task.userConfig != null) {
+ new Options (task.userConfig);
+ }
+
+ try {
+ if (task.getFofile() != null) {
+ if (task.getBasedir() != null) {
+ Configuration.put("baseDir",
+ task.getBasedir().toURL().
+ toExternalForm());
+ } else {
+ Configuration.put("baseDir",
+ task.getFofile().getParentFile().toURL().
+ toExternalForm());
+ }
+ }
+ task.log("Using base directory: " +
+ Configuration.getValue("baseDir"), Project.MSG_DEBUG);
+ } catch (Exception e) {
+ log.error("Error setting base directory",e);
+ }
+
+ 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.get(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());
+ }
+ try {
+ if (task.getBasedir() != null) {
+ Configuration.put("baseDir",
+ task.getBasedir().toURL().
+ toExternalForm());
+ } else {
+ Configuration.put("baseDir",
+ fs.getDir(task.getProject()).toURL().
+ toExternalForm());
+ }
+ task.log("Using base directory: " +
+ Configuration.getValue("baseDir"), Project.MSG_DEBUG);
+ } catch (Exception e) {
+ log.error("Error setting base directory", e);
+ }
+
+ 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();
+
+ FileOutputStream out = null;
+ try {
+ out = new FileOutputStream(outFile);
+ } catch (Exception ex) {
+ log.error("Failed to open " + outFile);
+ throw new BuildException(ex);
+ }
+
+ task.log(foFile + " -> " + outFile, Project.MSG_INFO);
+
+ try {
+ Driver driver = new Driver(inputHandler.getInputSource(), out);
+ driver.setLogger(log);
+ driver.setRenderer(renderer);
+ if (renderer == Driver.RENDER_XML) {
+ HashMap rendererOptions = new HashMap();
+ rendererOptions.put("fineDetail", new Boolean(true));
+ driver.getRenderer().setOptions(rendererOptions);
+ }
+ driver.setXMLReader(parser);
+ driver.run();
+ out.close();
+ } catch (Exception ex) {
+ log.error("Couldn't render file: " + ex.getMessage());
+ throw new BuildException(ex);
+ }
+ }
+
+}
+
No revision
No revision
1.4.2.3 +6 -2 xml-fop/test/createpdf.sh
Index: createpdf.sh
===================================================================
RCS file: /home/cvs/xml-fop/test/createpdf.sh,v
retrieving revision 1.4.2.2
retrieving revision 1.4.2.3
diff -u -r1.4.2.2 -r1.4.2.3
--- createpdf.sh 2 Jun 2002 00:13:26 -0000 1.4.2.2
+++ createpdf.sh 18 Nov 2002 14:37:47 -0000 1.4.2.3
@@ -1,8 +1,12 @@
# this can be used to create pdf output of the testsuite files
-$JAVA_HOME/bin/java -cp
../build/fop.jar:../lib/batik.jar:../lib/xalan-2.3.1.jar:../lib/xercesImpl-2.0.1.jar:../lib/xml-apis.jar:../lib/avalon-framework-4.0.jar:../lib/logkit-1.0.jar:../lib/jimi-1.0.jar
org.apache.fop.tools.TestConverter -pdf -b ./ basictests.xml
+LIBDIR=../lib
+LOCALCLASSPATH=$LIBDIR/batik.jar:$LIBDIR/xercesImpl-2.0.1.jar:$LIBDIR/xalan-2.3.1.jar:$LIBDIR/xml-apis.jar:$LIBDIR/bsf.jar
+LOCALCLASSPATH=$LOCALCLASSPATH:$LIBDIR/jimi-1.0.jar:$LIBDIR/jai_core.jar:$LIBDIR/jai_codec.jar:$LIBDIR/avalon-framework-cvs-20020806.jar:$LIBDIR/logkit-1.0.jar
-$JAVA_HOME/bin/java -cp
../build/fop.jar:../lib/batik.jar:../lib/xalan-2.3.1.jar:../lib/xercesImpl-2.0.1.jar:../lib/xml-apis.jar:../lib/avalon-framework-4.0.jar:../lib/logkit-1.0.jar:../lib/jimi-1.0.jar
org.apache.fop.tools.TestConverter -pdf -b ./ bugtests.xml
+$JAVA_HOME/bin/java -cp ../build/fop.jar:$LOCALCLASSPATH
org.apache.fop.tools.TestConverter -pdf -b ./ basictests.xml
+
+$JAVA_HOME/bin/java -cp ../build/fop.jar:$LOCALCLASSPATH
org.apache.fop.tools.TestConverter -pdf -b ./ bugtests.xml
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]