Browse Source

Toggleable support for AFP native image flavours.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AFPGOCAResources@691674 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-1_0
Adrian Cumiskey 15 years ago
parent
commit
8234ed46e9

src/java/org/apache/fop/render/afp/AFPDataObjectInfoFactory.java → src/java/org/apache/fop/render/afp/AFPDataObjectInfoProvider.java View File

@@ -28,10 +28,10 @@ import org.apache.xmlgraphics.image.loader.impl.ImageRawStream;
import org.apache.xmlgraphics.image.loader.impl.ImageRendered;

/**
* AFP image configurator
* AFP data object info factory provider
*/
public class AFPDataObjectInfoFactory {
private final Map dataObjectInfoFactoryMap = new java.util.HashMap();
public class AFPDataObjectInfoProvider {
private final Map factoryMap = new java.util.HashMap();
private final AFPState state;

/**
@@ -39,7 +39,7 @@ public class AFPDataObjectInfoFactory {
*
* @param state the AFP state
*/
public AFPDataObjectInfoFactory(AFPState state) {
public AFPDataObjectInfoProvider(AFPState state) {
this.state = state;
init();
}
@@ -48,11 +48,11 @@ public class AFPDataObjectInfoFactory {
* Initialises the configurators
*/
private void init() {
dataObjectInfoFactoryMap.put(
factoryMap.put(
ImageRendered.class, new AFPImageRenderedFactory(state));
dataObjectInfoFactoryMap.put(
factoryMap.put(
ImageRawCCITTFax.class, new AFPRawCCITTFaxFactory(state));
dataObjectInfoFactoryMap.put(
factoryMap.put(
ImageRawStream.class, new AFPImageRawStreamFactory(state));
};

@@ -62,17 +62,16 @@ public class AFPDataObjectInfoFactory {
* @param img the image
* @return the image configurator for the image
*/
public AFPAbstractImageFactory getFactory(Image img) {
public AFPDataObjectInfoFactory getFactory(Image img) {
Class clazz = img.getClass();
AFPAbstractImageFactory configurator
= (AFPAbstractImageFactory)dataObjectInfoFactoryMap.get(clazz);
AFPDataObjectInfoFactory configurator = (AFPDataObjectInfoFactory)factoryMap.get(clazz);
// not directly matched so try to map ancestor
if (configurator == null) {
Iterator it = dataObjectInfoFactoryMap.keySet().iterator();
Iterator it = factoryMap.keySet().iterator();
while (it.hasNext()) {
Class imageClass = (Class)it.next();
if (imageClass.isInstance(img)) {
return (AFPAbstractImageFactory)dataObjectInfoFactoryMap.get(imageClass);
return (AFPDataObjectInfoFactory)factoryMap.get(imageClass);
}
}
}

+ 1
- 1
src/java/org/apache/fop/render/afp/AFPImageRawStreamFactory.java View File

@@ -27,7 +27,7 @@ import org.apache.xmlgraphics.image.loader.impl.ImageRawStream;
/**
* A raw stream image configurator
*/
public class AFPImageRawStreamFactory extends AFPAbstractImageFactory {
public class AFPImageRawStreamFactory extends AFPDataObjectInfoFactory {

/**
* Main constructor

+ 1
- 1
src/java/org/apache/fop/render/afp/AFPImageRenderedFactory.java View File

@@ -30,7 +30,7 @@ import org.apache.xmlgraphics.ps.ImageEncodingHelper;
/**
* A buffered image configurator
*/
public class AFPImageRenderedFactory extends AFPAbstractImageFactory {
public class AFPImageRenderedFactory extends AFPDataObjectInfoFactory {

/**
* Main constructor

+ 1
- 1
src/java/org/apache/fop/render/afp/AFPRawCCITTFaxFactory.java View File

@@ -26,7 +26,7 @@ import org.apache.xmlgraphics.image.loader.impl.ImageRawCCITTFax;
/**
* An CITT fax image configurator
*/
public class AFPRawCCITTFaxFactory extends AFPAbstractImageFactory {
public class AFPRawCCITTFaxFactory extends AFPDataObjectInfoFactory {

/**
* Main constructor

+ 22
- 6
src/java/org/apache/fop/render/afp/AFPRenderer.java View File

@@ -155,7 +155,7 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
private DataStream dataStream;

/** data object information factory */
private final AFPDataObjectInfoFactory dataObjectInfoFactory;
private final AFPDataObjectInfoProvider dataObjectInfoProvider;


/**
@@ -165,7 +165,7 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
super();
this.resourceManager = new AFPResourceManager();
this.state = new AFPState();
this.dataObjectInfoFactory = new AFPDataObjectInfoFactory(state);
this.dataObjectInfoProvider = new AFPDataObjectInfoProvider(state);
this.unitConv = state.getUnitConverter();
}

@@ -376,11 +376,16 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
return context;
}

private static final ImageFlavor[] FLAVORS = new ImageFlavor[] {
private static final ImageFlavor[] NATIVE_FLAVORS = new ImageFlavor[] {
/*ImageFlavor.RAW_PNG, */ // PNG not natively supported in AFP
ImageFlavor.RAW_JPEG, ImageFlavor.RAW_CCITTFAX, ImageFlavor.RAW_EPS,
ImageFlavor.GRAPHICS2D, ImageFlavor.BUFFERED_IMAGE, ImageFlavor.RENDERED_IMAGE,
ImageFlavor.XML_DOM };

private static final ImageFlavor[] FLAVORS = new ImageFlavor[] {
ImageFlavor.GRAPHICS2D, ImageFlavor.BUFFERED_IMAGE, ImageFlavor.RENDERED_IMAGE,
ImageFlavor.XML_DOM };

/** {@inheritDoc} */
public void drawImage(String uri, Rectangle2D pos, Map foreignAttributes) {
uri = URISpecification.getURL(uri);
@@ -404,11 +409,13 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {

// Only now fully load/prepare the image
Map hints = ImageUtil.getDefaultHints(sessionContext);

ImageFlavor[] flavors = state.isNativeImages() ? NATIVE_FLAVORS : FLAVORS;
org.apache.xmlgraphics.image.loader.Image img = manager.getImage(
info, FLAVORS, hints, sessionContext);
info, flavors, hints, sessionContext);

Point origin = new Point(currentIPPosition, currentBPPosition);
AFPAbstractImageFactory factory = dataObjectInfoFactory.getFactory(img);
AFPDataObjectInfoFactory factory = dataObjectInfoProvider.getFactory(img);
if (factory != null) {
AFPImageInfo afpImageInfo
= new AFPImageInfo(uri, pos, origin, info, img, foreignAttributes);
@@ -563,7 +570,6 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {

// Try and get the encoding to use for the font
String encoding = null;

try {
encoding = font.getCharacterSet(fontSize).getEncoding();
} catch (Throwable ex) {
@@ -752,6 +758,16 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
state.setColorImages(colorImages);
}

/**
* Sets whether images are supported natively or not
*
* @param nativeImages
* native image support
*/
public void setNativeImages(boolean nativeImages) {
state.setNativeImages(nativeImages);
}

/**
* Returns the AFPDataStream
*

+ 1
- 0
src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java View File

@@ -239,6 +239,7 @@ public class AFPRendererConfigurator extends PrintRendererConfigurator {
} else {
afpRenderer.setColorImages(true);
}
afpRenderer.setNativeImages(imagesCfg.getAttributeAsBoolean("native", false));

// renderer resolution
Configuration rendererResolutionCfg = cfg.getChild("renderer-resolution", false);

+ 29
- 7
src/java/org/apache/fop/render/afp/AFPState.java View File

@@ -34,27 +34,31 @@ public class AFPState extends org.apache.fop.render.AbstractState implements Clo

private static Log log = LogFactory.getLog("org.apache.fop.render.afp.AFPState");

/** The portrait rotation */
/** the portrait rotation */
private int portraitRotation = 0;

/** The landscape rotation */
/** the landscape rotation */
private int landscapeRotation = 270;

/** Flag to the set the output object type for images */
/** color image support */
private boolean colorImages = true;

/** Default value for image depth */
/** images are supported in this AFP environment */
private boolean nativeImages;

/** default value for image depth */
private int bitsPerPixel = 8;

/** The output resolution */
/** the output resolution */
private int resolution = 240; // 240 dpi

/** The current page */
/** the current page */
private AFPPageState pageState = new AFPPageState();

/** A unit converter */
/** a unit converter */
private final transient AFPUnitConverter unitConv = new AFPUnitConverter(this);


/**
* Sets the rotation to be used for portrait pages, valid values are 0
* (default), 90, 180, 270.
@@ -158,6 +162,24 @@ public class AFPState extends org.apache.fop.render.AbstractState implements Clo
return this.colorImages;
}

/**
* Sets whether images are natively supported or not in the AFP environment
*
* @param nativeImages true if images are natively supported in this AFP environment
*/
public void setNativeImages(boolean nativeImages) {
this.nativeImages = nativeImages;
}

/**
* Returns true if images are supported natively in this AFP environment
*
* @return true if images are supported natively in this AFP environment
*/
protected boolean isNativeImages() {
return this.nativeImages;
}

/**
* Sets the output/device resolution
*

Loading…
Cancel
Save