Browse Source

Merge from Trunk revisions 740276 - 741103.

Hooked in the new AFP resource level defaults into the IF-size of the image handlers.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AreaTreeNewDesign@741120 13f79535-47bb-0310-9956-ffa450edef68
pull/17/head
Jeremias Maerki 15 years ago
parent
commit
1c842a287f

+ 5
- 3
build.xml View File

<src path="${basedir}/test/java"/> <src path="${basedir}/test/java"/>
<patternset refid="test-sources"/> <patternset refid="test-sources"/>
<classpath> <classpath>
<path refid="libs-build-classpath"/>
<path refid="libs-build-tools-classpath"/>
<fileset dir="${build.dir}"> <fileset dir="${build.dir}">
<include name="fop.jar"/> <include name="fop.jar"/>
</fileset> </fileset>
<test name="org.apache.fop.text.linebreak.LineBreakStatusTest" todir="${junit.reports.dir}"/> <test name="org.apache.fop.text.linebreak.LineBreakStatusTest" todir="${junit.reports.dir}"/>
</junit> </junit>
</target> </target>
<target name="junit" depends="junit-userconfig, junit-basic, junit-transcoder, junit-text-linebreak, junit-layout, junit-fotree, junit-area-tree-xml-format, junit-intermediate-format" description="Runs all of FOP's JUnit tests" if="junit.present">
<target name="junit-reduced" depends="junit-userconfig, junit-basic, junit-transcoder, junit-text-linebreak, junit-fotree"/>
<target name="junit-full" depends="junit-reduced, junit-layout, junit-area-tree-xml-format, junit-intermediate-format"/>
<target name="junit" depends="junit-full" description="Runs all of FOP's JUnit tests" if="junit.present">
<fail><condition><or><isset property="fop.junit.error"/><isset property="fop.junit.failure"/><not><isset property="hyphenation.present"/></not></or></condition> <fail><condition><or><isset property="fop.junit.error"/><isset property="fop.junit.failure"/><not><isset property="hyphenation.present"/></not></or></condition>
NOTE: NOTE:
************************************************************************** **************************************************************************
<!-- =================================================================== --> <!-- =================================================================== -->
<!-- Special target for Gump --> <!-- Special target for Gump -->
<!-- =================================================================== --> <!-- =================================================================== -->
<target name="gump" depends="all, javadocs"/>
<target name="gump" depends="junit-reduced"/>
<!-- =================================================================== --> <!-- =================================================================== -->
<!-- Clean targets --> <!-- Clean targets -->
<!-- =================================================================== --> <!-- =================================================================== -->

+ 38
- 2
src/documentation/content/xdocs/trunk/output.xml View File

<ul> <ul>
<li><a href="http://en.wikipedia.org/wiki/Advanced_Function_Presentation">AFP (Advanced Function Presentation)</a></li> <li><a href="http://en.wikipedia.org/wiki/Advanced_Function_Presentation">AFP (Advanced Function Presentation)</a></li>
<li><a href="http://wiki.apache.org/xmlgraphics-fop/AFPResources">AFP Resources on the FOP WIKI</a></li> <li><a href="http://wiki.apache.org/xmlgraphics-fop/AFPResources">AFP Resources on the FOP WIKI</a></li>
<li><a href="http://wiki.apache.org/xmlgraphics-fop/AFPOutput">Technical notes on AFP output in FOP</a></li>
</ul> </ul>
</section> </section>
<section id="afp-limitations"> <section id="afp-limitations">
</li> </li>
</ul> </ul>
</section> </section>
<section id="afp-compatibility">
<title>Deployment in older environments</title>
<p>
There are still a big number of older (or limited) MO:DCA/IPDS environments in production
out there. AFP has grown in functionality over time and not every environment supports the
latest features. We're trying to make AFP output work in as many environments as possible.
However, to make AFP output work on older environments it is recommended to set to
configuration to 1 bit per pixel (see below on how to do this). In this case, all images
are converted to bi-level images using IOCA function set 10 (FS10). If a higher number of
bits per pixel is configured, FOP has to switch to at least FS11 which may not work
everywhere.
</p>
</section>
<section id="afp-configuration"> <section id="afp-configuration">
<title>Configuration</title> <title>Configuration</title>
<section id="afp-font-config"> <section id="afp-font-config">
]]></source> ]]></source>
<note>Be careful when using this option not to overwrite existing resource files from previous rendering runs.</note> <note>Be careful when using this option not to overwrite existing resource files from previous rendering runs.</note>
</section> </section>
<section id="afp-resource-level-defaults">
<title>Resource Level Defaults</title>
<p>
By default, bitmap image objects (or page segments derived from them) are put in the
print-file-level resource group and GOCA graphics are inlined for compatibility with
the AFP Workbench tool.
</p>
<p>
It is possible to override these defaults, either per image (see the
<link href="#afp-foreign-attributes-resource">afp:resource-level</link>
extension attribute below) or by specifying different defaults in the configuration:
</p>
<source><![CDATA[
<default-resource-levels goca="print-file" bitmap="inline"/>]]></source>
<p>
"goca" refers to GOCA graphics and "bitmap" refers to IOCA images. The possible values
for the attributes are "inline" and "print-file". In the future,
additional possibilities may be added.
</p>
</section>
</section> </section>
<section id="afp-extensions"> <section id="afp-extensions">
<title>Extensions</title> <title>Extensions</title>
]]></source> ]]></source>
<p>The resource-level attribute where the resource object will reside in the AFP output datastream. <p>The resource-level attribute where the resource object will reside in the AFP output datastream.
The possible values for this are "inline", "print-file" and "external". The possible values for this are "inline", "print-file" and "external".
When no resource-level attribute is provided, resources are by default placed at "print-file" level.
When "external" is used a resource-group-file attribute must also be specified.</p>
When "external" is used a resource-group-file attribute must also be specified.
Please refer to the <link href="#afp-resource-level-defaults">Resource Level Defaults</link>
above to see what is used if the resource-level attribute is not specified.
</p>
<p></p> <p></p>
</section> </section>
</section> </section>

+ 60
- 51
src/java/org/apache/fop/afp/AFPGraphics2D.java View File

AFPResourceManager resourceManager, AFPResourceInfo resourceInfo, AFPResourceManager resourceManager, AFPResourceInfo resourceInfo,
FontInfo fontInfo) { FontInfo fontInfo) {
super(textAsShapes); super(textAsShapes);
this.paintingState = paintingState;
this.resourceManager = resourceManager;
this.resourceInfo = resourceInfo;
this.fontInfo = fontInfo;
setPaintingState(paintingState);
setResourceManager(resourceManager);
setResourceInfo(resourceInfo);
setFontInfo(fontInfo);
} }


/** /**
* *
* @param resourceManager the AFP resource manager * @param resourceManager the AFP resource manager
*/ */
public void setResourceManager(AFPResourceManager resourceManager) {
private void setResourceManager(AFPResourceManager resourceManager) {
this.resourceManager = resourceManager; this.resourceManager = resourceManager;
} }


* *
* @param resourceInfo the AFP resource info * @param resourceInfo the AFP resource info
*/ */
public void setResourceInfo(AFPResourceInfo resourceInfo) {
private void setResourceInfo(AFPResourceInfo resourceInfo) {
this.resourceInfo = resourceInfo; this.resourceInfo = resourceInfo;
} }


/**
* Returns the GOCA graphics object
*
* @return the GOCA graphics object
*/
public GraphicsObject getGraphicsObject() {
return this.graphicsObj;
}

/**
* Sets the GOCA graphics object
*
* @param obj the GOCA graphics object
*/
public void setGraphicsObject(GraphicsObject obj) {
this.graphicsObj = obj;
}

/**
* Sets the AFP painting state
*
* @param paintingState the AFP painting state
*/
private void setPaintingState(AFPPaintingState paintingState) {
this.paintingState = paintingState;
}

/**
* Returns the AFP painting state
*
* @return the AFP painting state
*/
public AFPPaintingState getPaintingState() {
return this.paintingState;
}

/**
* Sets the FontInfo
*
* @param fontInfo the FontInfo
*/
private void setFontInfo(FontInfo fontInfo) {
this.fontInfo = fontInfo;
}

/**
* Returns the FontInfo
*
* @return the FontInfo
*/
public FontInfo getFontInfo() {
return this.fontInfo;
}

/** /**
* Sets the GraphicContext * Sets the GraphicContext
* *
this.customTextHandler = handler; this.customTextHandler = handler;
} }


/**
* Returns the GOCA graphics object
*
* @return the GOCA graphics object
*/
public GraphicsObject getGraphicsObject() {
return this.graphicsObj;
}

/**
* Sets the GOCA graphics object
*
* @param obj the GOCA graphics object
*/
public void setGraphicsObject(GraphicsObject obj) {
this.graphicsObj = obj;
}

/**
* Sets the AFP painting state
*
* @param paintingState the AFP painting state
*/
public void setPaintingState(AFPPaintingState paintingState) {
this.paintingState = paintingState;
}

/**
* Returns the AFP painting state
*
* @return the AFP painting state
*/
public AFPPaintingState getPaintingState() {
return this.paintingState;
}

/**
* Returns the FontInfo
*
* @return the FontInfo
*/
public FontInfo getFontInfo() {
return this.fontInfo;
}

/** {@inheritDoc} */ /** {@inheritDoc} */
public void drawRenderableImage(RenderableImage img, AffineTransform xform) { public void drawRenderableImage(RenderableImage img, AffineTransform xform) {
log.debug("drawRenderableImage() NYI: img=" + img + ", xform=" + xform); log.debug("drawRenderableImage() NYI: img=" + img + ", xform=" + xform);

+ 8
- 6
src/java/org/apache/fop/afp/AFPResourceInfo.java View File

* The level at which a resource is to reside in the AFP output * The level at which a resource is to reside in the AFP output
*/ */
public class AFPResourceInfo { public class AFPResourceInfo {
private static final AFPResourceLevel DEFAULT_LEVEL

/** the general default resource level */
public static final AFPResourceLevel DEFAULT_LEVEL
= new AFPResourceLevel(AFPResourceLevel.PRINT_FILE); = new AFPResourceLevel(AFPResourceLevel.PRINT_FILE);


/** the uri of this resource */
/** the URI of this resource */
private String uri = null; private String uri = null;


/** /**
private boolean levelChanged = false; private boolean levelChanged = false;


/** /**
* Sets the data object uri
* Sets the data object URI.
* *
* @param uri the data object uri
* @param uri the data object URI
*/ */
public void setUri(String uri) { public void setUri(String uri) {
this.uri = uri; this.uri = uri;
} }


/** /**
* Returns the uri of this data object
* Returns the URI of this data object.
* *
* @return the uri of this data object
* @return the URI of this data object
*/ */
public String getUri() { public String getUri() {
return uri; return uri;

+ 110
- 0
src/java/org/apache/fop/afp/AFPResourceLevelDefaults.java View File

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/* $Id$ */

package org.apache.fop.afp;

import java.util.Iterator;
import java.util.Map;

import org.apache.fop.afp.modca.ResourceObject;

/**
* This class holds resource levels defaults for the various resource types.
*/
public class AFPResourceLevelDefaults {

private static final Map RESOURCE_TYPE_NAMES = new java.util.HashMap();

static {
//Map to be extended as need arises:
registerResourceTypeName("goca", ResourceObject.TYPE_GRAPHIC);
registerResourceTypeName("bitmap", ResourceObject.TYPE_IMAGE);
}

private static void registerResourceTypeName(String name, byte type) {
RESOURCE_TYPE_NAMES.put(name.toLowerCase(), new Byte(type));
}

private static byte getResourceType(String resourceTypeName) {
Byte result = (Byte)RESOURCE_TYPE_NAMES.get(resourceTypeName.toLowerCase());
if (result == null) {
throw new IllegalArgumentException("Unknown resource type name: " + resourceTypeName);
}
return result.byteValue();
}

private Map defaultResourceLevels = new java.util.HashMap();

/**
* Creates a new instance with default values.
*/
public AFPResourceLevelDefaults() {
// level not explicitly set/changed so default to inline for GOCA graphic objects
// (due to a bug in the IBM AFP Workbench Viewer (2.04.01.07), hard copy works just fine)
setDefaultResourceLevel(ResourceObject.TYPE_GRAPHIC,
new AFPResourceLevel(AFPResourceLevel.INLINE));
}

/**
* Sets the default resource level for a particular resource type.
* @param type the resource type name
* @param level the resource level
*/
public void setDefaultResourceLevel(String type, AFPResourceLevel level) {
setDefaultResourceLevel(getResourceType(type), level);
}

/**
* Sets the default resource level for a particular resource type.
* @param type the resource type ({@link ResourceObject}.TYPE_*)
* @param level the resource level
*/
public void setDefaultResourceLevel(byte type, AFPResourceLevel level) {
this.defaultResourceLevels.put(new Byte(type), level);
}

/**
* Returns the default resource level for a particular resource type.
* @param type the resource type ({@link ResourceObject}.TYPE_*)
* @return the default resource level
*/
public AFPResourceLevel getDefaultResourceLevel(byte type) {
AFPResourceLevel result = (AFPResourceLevel)this.defaultResourceLevels.get(new Byte(type));
if (result == null) {
result = AFPResourceInfo.DEFAULT_LEVEL;
}
return result;
}

/**
* Allows to merge the values from one instance into another. Values from the instance passed
* in as a parameter override values of this instance.
* @param other the other instance to get the defaults from
*/
public void mergeFrom(AFPResourceLevelDefaults other) {
Iterator iter = other.defaultResourceLevels.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
Byte type = (Byte)entry.getKey();
AFPResourceLevel level = (AFPResourceLevel)entry.getValue();
this.defaultResourceLevels.put(type, level);
}
}

}

+ 18
- 0
src/java/org/apache/fop/afp/AFPResourceManager.java View File



private Map pageSegmentMap = new java.util.HashMap(); private Map pageSegmentMap = new java.util.HashMap();


private AFPResourceLevelDefaults resourceLevelDefaults = new AFPResourceLevelDefaults();

/** /**
* Main constructor * Main constructor
*/ */
currentPage.createIncludePageSegment(pageSegmentName, x, y, createHardPageSegments); currentPage.createIncludePageSegment(pageSegmentName, x, y, createHardPageSegments);
} }


/**
* Sets resource level defaults. The existing defaults over merged with the ones passed in
* as parameter.
* @param defaults the new defaults
*/
public void setResourceLevelDefaults(AFPResourceLevelDefaults defaults) {
this.resourceLevelDefaults.mergeFrom(defaults);
}

/**
* Returns the resource level defaults in use with this resource manager.
* @return the resource level defaults
*/
public AFPResourceLevelDefaults getResourceLevelDefaults() {
return this.resourceLevelDefaults;
}
} }

+ 9
- 0
src/java/org/apache/fop/render/afp/AFPCustomizable.java View File



package org.apache.fop.render.afp; package org.apache.fop.render.afp;


import org.apache.fop.afp.AFPResourceLevelDefaults;

/** /**
* Interface used to customize the AFP renderer or document handler. * Interface used to customize the AFP renderer or document handler.
*/ */
*/ */
void setDefaultResourceGroupFilePath(String filePath); void setDefaultResourceGroupFilePath(String filePath);


/**
* Sets the resource level defaults. The object passed in provides information which resource
* level shall be used by default for various kinds of resources.
* @param defaults the resource level defaults
*/
void setResourceLevelDefaults(AFPResourceLevelDefaults defaults);

} }

+ 8
- 5
src/java/org/apache/fop/render/afp/AFPDocumentHandler.java View File

import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.apache.fop.afp.AFPPaintingState; import org.apache.fop.afp.AFPPaintingState;
import org.apache.fop.afp.AFPResourceLevelDefaults;
import org.apache.fop.afp.AFPResourceManager; import org.apache.fop.afp.AFPResourceManager;
import org.apache.fop.afp.AFPUnitConverter; import org.apache.fop.afp.AFPUnitConverter;
import org.apache.fop.afp.DataStream; import org.apache.fop.afp.DataStream;
public class AFPDocumentHandler extends AbstractBinaryWritingIFDocumentHandler public class AFPDocumentHandler extends AbstractBinaryWritingIFDocumentHandler
implements AFPCustomizable { implements AFPCustomizable {


/** logging instance */
private static Log log = LogFactory.getLog(AFPDocumentHandler.class);
//** logging instance */
//private static Log log = LogFactory.getLog(AFPDocumentHandler.class);


/** the resource manager */ /** the resource manager */
private AFPResourceManager resourceManager; private AFPResourceManager resourceManager;
resourceManager.setDefaultResourceGroupFilePath(filePath); resourceManager.setDefaultResourceGroupFilePath(filePath);
} }


/** {@inheritDoc} */
public void setResourceLevelDefaults(AFPResourceLevelDefaults defaults) {
resourceManager.setResourceLevelDefaults(defaults);
}

/** /**
* Returns the page segment name for a given URI if it actually represents a page segment. * Returns the page segment name for a given URI if it actually represents a page segment.
* Otherwise, it just returns null. * Otherwise, it just returns null.

+ 8
- 7
src/java/org/apache/fop/render/afp/AFPImageHandlerGraphics2D.java View File

import org.apache.fop.afp.AFPGraphicsObjectInfo; import org.apache.fop.afp.AFPGraphicsObjectInfo;
import org.apache.fop.afp.AFPPaintingState; import org.apache.fop.afp.AFPPaintingState;
import org.apache.fop.afp.AFPResourceInfo; import org.apache.fop.afp.AFPResourceInfo;
import org.apache.fop.afp.AFPResourceLevel;
import org.apache.fop.afp.AFPResourceManager;
import org.apache.fop.afp.modca.ResourceObject;
import org.apache.fop.render.ImageHandler; import org.apache.fop.render.ImageHandler;
import org.apache.fop.render.ImageHandlerUtil; import org.apache.fop.render.ImageHandlerUtil;
import org.apache.fop.render.RenderingContext; import org.apache.fop.render.RenderingContext;
AFPGraphicsObjectInfo graphicsObjectInfo AFPGraphicsObjectInfo graphicsObjectInfo
= (AFPGraphicsObjectInfo)super.generateDataObjectInfo(rendererImageInfo); = (AFPGraphicsObjectInfo)super.generateDataObjectInfo(rendererImageInfo);


setDefaultToInlineResourceLevel(graphicsObjectInfo);
setDefaultResourceLevel(graphicsObjectInfo, afpInfo.getResourceManager());


// set mime type (unsupported by MOD:CA registry) // set mime type (unsupported by MOD:CA registry)
graphicsObjectInfo.setMimeType(MimeConstants.MIME_AFP_GOCA); graphicsObjectInfo.setMimeType(MimeConstants.MIME_AFP_GOCA);
} }
} }


private void setDefaultToInlineResourceLevel(AFPGraphicsObjectInfo graphicsObjectInfo) {
private void setDefaultResourceLevel(AFPGraphicsObjectInfo graphicsObjectInfo,
AFPResourceManager resourceManager) {
AFPResourceInfo resourceInfo = graphicsObjectInfo.getResourceInfo(); AFPResourceInfo resourceInfo = graphicsObjectInfo.getResourceInfo();
//level not explicitly set/changed so default to inline for GOCA graphic objects
// (due to a bug in the IBM AFP Workbench Viewer (2.04.01.07), hard copy works just fine)
if (!resourceInfo.levelChanged()) { if (!resourceInfo.levelChanged()) {
resourceInfo.setLevel(new AFPResourceLevel(AFPResourceLevel.INLINE));
resourceInfo.setLevel(resourceManager.getResourceLevelDefaults()
.getDefaultResourceLevel(ResourceObject.TYPE_GRAPHIC));
} }
} }


graphicsObjectInfo.setObjectAreaInfo( graphicsObjectInfo.setObjectAreaInfo(
createObjectAreaInfo(afpContext.getPaintingState(), pos)); createObjectAreaInfo(afpContext.getPaintingState(), pos));


setDefaultToInlineResourceLevel(graphicsObjectInfo);
setDefaultResourceLevel(graphicsObjectInfo, afpContext.getResourceManager());


// Image content // Image content
ImageGraphics2D imageG2D = (ImageGraphics2D)image; ImageGraphics2D imageG2D = (ImageGraphics2D)image;

+ 16
- 0
src/java/org/apache/fop/render/afp/AFPImageHandlerRenderedImage.java View File

import org.apache.fop.afp.AFPImageObjectInfo; import org.apache.fop.afp.AFPImageObjectInfo;
import org.apache.fop.afp.AFPObjectAreaInfo; import org.apache.fop.afp.AFPObjectAreaInfo;
import org.apache.fop.afp.AFPPaintingState; import org.apache.fop.afp.AFPPaintingState;
import org.apache.fop.afp.AFPResourceInfo;
import org.apache.fop.afp.AFPResourceManager;
import org.apache.fop.afp.modca.ResourceObject;
import org.apache.fop.render.ImageHandler; import org.apache.fop.render.ImageHandler;
import org.apache.fop.render.RenderingContext; import org.apache.fop.render.RenderingContext;
import org.apache.fop.util.bitmap.BitmapImageUtil; import org.apache.fop.util.bitmap.BitmapImageUtil;
AFPRendererContext rendererContext AFPRendererContext rendererContext
= (AFPRendererContext)rendererImageInfo.getRendererContext(); = (AFPRendererContext)rendererImageInfo.getRendererContext();
AFPInfo afpInfo = rendererContext.getInfo(); AFPInfo afpInfo = rendererContext.getInfo();

setDefaultResourceLevel(imageObjectInfo, afpInfo.getResourceManager());

AFPPaintingState paintingState = afpInfo.getPaintingState(); AFPPaintingState paintingState = afpInfo.getPaintingState();
ImageRendered imageRendered = (ImageRendered) rendererImageInfo.img; ImageRendered imageRendered = (ImageRendered) rendererImageInfo.img;
Dimension targetSize = new Dimension(afpInfo.getWidth(), afpInfo.getHeight()); Dimension targetSize = new Dimension(afpInfo.getWidth(), afpInfo.getHeight());
return imageObjectInfo; return imageObjectInfo;
} }


private void setDefaultResourceLevel(AFPImageObjectInfo imageObjectInfo,
AFPResourceManager resourceManager) {
AFPResourceInfo resourceInfo = imageObjectInfo.getResourceInfo();
if (!resourceInfo.levelChanged()) {
resourceInfo.setLevel(resourceManager.getResourceLevelDefaults()
.getDefaultResourceLevel(ResourceObject.TYPE_IMAGE));
}
}

/** {@inheritDoc} */ /** {@inheritDoc} */
protected AFPDataObjectInfo createDataObjectInfo() { protected AFPDataObjectInfo createDataObjectInfo() {
return new AFPImageObjectInfo(); return new AFPImageObjectInfo();
setResourceInformation(imageObjectInfo, setResourceInformation(imageObjectInfo,
image.getInfo().getOriginalURI(), image.getInfo().getOriginalURI(),
afpContext.getForeignAttributes()); afpContext.getForeignAttributes());
setDefaultResourceLevel(imageObjectInfo, afpContext.getResourceManager());


// Positioning // Positioning
imageObjectInfo.setObjectAreaInfo(createObjectAreaInfo(afpContext.getPaintingState(), pos)); imageObjectInfo.setObjectAreaInfo(createObjectAreaInfo(afpContext.getPaintingState(), pos));

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

import org.apache.fop.afp.AFPEventProducer; import org.apache.fop.afp.AFPEventProducer;
import org.apache.fop.afp.AFPPaintingState; import org.apache.fop.afp.AFPPaintingState;
import org.apache.fop.afp.AFPRectanglePainter; import org.apache.fop.afp.AFPRectanglePainter;
import org.apache.fop.afp.AFPResourceLevelDefaults;
import org.apache.fop.afp.AFPResourceManager; import org.apache.fop.afp.AFPResourceManager;
import org.apache.fop.afp.AFPTextDataInfo; import org.apache.fop.afp.AFPTextDataInfo;
import org.apache.fop.afp.AFPUnitConverter; import org.apache.fop.afp.AFPUnitConverter;
resourceManager.setDefaultResourceGroupFilePath(filePath); resourceManager.setDefaultResourceGroupFilePath(filePath);
} }


/** {@inheritDoc} */
public void setResourceLevelDefaults(AFPResourceLevelDefaults defaults) {
resourceManager.setResourceLevelDefaults(defaults);
}

/** {@inheritDoc} */ /** {@inheritDoc} */
protected void establishTransformationMatrix(AffineTransform at) { protected void establishTransformationMatrix(AffineTransform at) {
saveGraphicsState(); saveGraphicsState();

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

import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.configuration.ConfigurationException;


import org.apache.fop.afp.AFPResourceLevel;
import org.apache.fop.afp.AFPResourceLevelDefaults;
import org.apache.fop.afp.fonts.AFPFontCollection; import org.apache.fop.afp.fonts.AFPFontCollection;
import org.apache.fop.afp.fonts.AFPFontInfo; import org.apache.fop.afp.fonts.AFPFontInfo;
import org.apache.fop.afp.fonts.CharacterSet; import org.apache.fop.afp.fonts.CharacterSet;
+ resourceGroupDest + "'"); + resourceGroupDest + "'");
} }
} }

Configuration defaultResourceLevelCfg = cfg.getChild("default-resource-levels", false);
if (defaultResourceLevelCfg != null) {
AFPResourceLevelDefaults defaults = new AFPResourceLevelDefaults();
String[] types = defaultResourceLevelCfg.getAttributeNames();
for (int i = 0, c = types.length; i < c; i++) {
String type = types[i];
try {
String level = defaultResourceLevelCfg.getAttribute(type);
defaults.setDefaultResourceLevel(type, AFPResourceLevel.valueOf(level));
} catch (IllegalArgumentException iae) {
LogUtil.handleException(log, iae,
userAgent.getFactory().validateUserConfigStrictly());
} catch (ConfigurationException e) {
LogUtil.handleException(log, e,
userAgent.getFactory().validateUserConfigStrictly());
}
}
customizable.setResourceLevelDefaults(defaults);
}
} }


/** {@inheritDoc} */ /** {@inheritDoc} */

+ 7
- 4
src/java/org/apache/fop/render/afp/AFPRendererContext.java View File



import org.apache.fop.afp.AFPPaintingState; import org.apache.fop.afp.AFPPaintingState;
import org.apache.fop.afp.AFPResourceInfo; import org.apache.fop.afp.AFPResourceInfo;
import org.apache.fop.afp.AFPResourceLevel;
import org.apache.fop.afp.AFPResourceManager; import org.apache.fop.afp.AFPResourceManager;
import org.apache.fop.afp.modca.ResourceObject;
import org.apache.fop.render.AbstractRenderer; import org.apache.fop.render.AbstractRenderer;
import org.apache.fop.render.ImageHandlerUtil; import org.apache.fop.render.ImageHandlerUtil;
import org.apache.fop.render.RendererContext; import org.apache.fop.render.RendererContext;
= new AFPForeignAttributeReader(); = new AFPForeignAttributeReader();
AFPResourceInfo resourceInfo AFPResourceInfo resourceInfo
= foreignAttributeReader.getResourceInfo(foreignAttributes); = foreignAttributeReader.getResourceInfo(foreignAttributes);
// default to inline level if painted as GOCA
if (!resourceInfo.levelChanged() && !paintAsBitmap) {
resourceInfo.setLevel(new AFPResourceLevel(AFPResourceLevel.INLINE));
// set default resource level if an explicit one hasn't been set
if (!resourceInfo.levelChanged()) {
byte resourceType = paintAsBitmap
? ResourceObject.TYPE_IMAGE : ResourceObject.TYPE_GRAPHIC;
resourceInfo.setLevel(info.getResourceManager().getResourceLevelDefaults()
.getDefaultResourceLevel(resourceType));
} }
info.setResourceInfo(resourceInfo); info.setResourceInfo(resourceInfo);
} }

+ 16
- 4
src/java/org/apache/fop/render/afp/AbstractAFPImageHandlerRawStream.java View File

import org.apache.fop.afp.AFPDataObjectInfo; import org.apache.fop.afp.AFPDataObjectInfo;
import org.apache.fop.afp.AFPObjectAreaInfo; import org.apache.fop.afp.AFPObjectAreaInfo;
import org.apache.fop.afp.AFPPaintingState; import org.apache.fop.afp.AFPPaintingState;
import org.apache.fop.afp.AFPResourceInfo;
import org.apache.fop.afp.AFPResourceManager;
import org.apache.fop.afp.modca.ResourceObject;
import org.apache.fop.render.ImageHandler; import org.apache.fop.render.ImageHandler;
import org.apache.fop.render.RenderingContext; import org.apache.fop.render.RenderingContext;


AFPRendererImageInfo rendererImageInfo) throws IOException { AFPRendererImageInfo rendererImageInfo) throws IOException {
AFPDataObjectInfo dataObjectInfo = super.generateDataObjectInfo(rendererImageInfo); AFPDataObjectInfo dataObjectInfo = super.generateDataObjectInfo(rendererImageInfo);
ImageRawStream rawStream = (ImageRawStream) rendererImageInfo.getImage(); ImageRawStream rawStream = (ImageRawStream) rendererImageInfo.getImage();
AFPRendererContext rendererContext
= (AFPRendererContext)rendererImageInfo.getRendererContext();
AFPInfo afpInfo = rendererContext.getInfo();



updateDataObjectInfo(dataObjectInfo, rawStream);
updateDataObjectInfo(dataObjectInfo, rawStream, afpInfo.getResourceManager());


setAdditionalParameters(dataObjectInfo, rawStream); setAdditionalParameters(dataObjectInfo, rawStream);
return dataObjectInfo; return dataObjectInfo;
} }


private void updateDataObjectInfo(AFPDataObjectInfo dataObjectInfo, private void updateDataObjectInfo(AFPDataObjectInfo dataObjectInfo,
ImageRawStream rawStream) throws IOException {
ImageRawStream rawStream, AFPResourceManager resourceManager) throws IOException {
dataObjectInfo.setMimeType(rawStream.getFlavor().getMimeType()); dataObjectInfo.setMimeType(rawStream.getFlavor().getMimeType());

AFPResourceInfo resourceInfo = dataObjectInfo.getResourceInfo();
if (!resourceInfo.levelChanged()) {
resourceInfo.setLevel(resourceManager.getResourceLevelDefaults()
.getDefaultResourceLevel(ResourceObject.TYPE_IMAGE));
}

InputStream inputStream = rawStream.createInputStream(); InputStream inputStream = rawStream.createInputStream();
try { try {
dataObjectInfo.setData(IOUtils.toByteArray(inputStream)); dataObjectInfo.setData(IOUtils.toByteArray(inputStream));


// Image content // Image content
ImageRawStream imageStream = (ImageRawStream)image; ImageRawStream imageStream = (ImageRawStream)image;
updateDataObjectInfo(dataObjectInfo, imageStream);
updateDataObjectInfo(dataObjectInfo, imageStream, afpContext.getResourceManager());
setAdditionalParameters(dataObjectInfo, imageStream); setAdditionalParameters(dataObjectInfo, imageStream);


// Create image // Create image

+ 4
- 0
status.xml View File

documents. Example: the fix of marks layering will be such a case when it's done. documents. Example: the fix of marks layering will be such a case when it's done.
--> -->
<release version="FOP Trunk" date="TBD"> <release version="FOP Trunk" date="TBD">
<action context="Renderers" dev="JM" type="add">
AFP Output: Added a configuration option to override the resource level defaults in the
code.
</action>
<action context="Code" dev="VH" type="fix" fixes-bug="46638"> <action context="Code" dev="VH" type="fix" fixes-bug="46638">
MinOptMaxUtil.toMinOptMax was converting LengthRangeProperty objects into illegal MinOptMax MinOptMaxUtil.toMinOptMax was converting LengthRangeProperty objects into illegal MinOptMax
objects (in some cases opt could be inferior to min). objects (in some cases opt could be inferior to min).

Loading…
Cancel
Save