Author: jeremias
Date: Fri Jan 16 06:35:12 2009
New Revision: 735028
URL: http://svn.apache.org/viewvc?rev=735028&view=rev
Log:
Added support for the AFP Extensions.
Added default font setup.
Added a last-resort font selection fallback for cases where an IF file was not
created with the right font set.
Modified:
xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java
xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/src/java/org/apache/fop/render/afp/AFPPainter.java
Modified:
xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java?rev=735028&r1=735027&r2=735028&view=diff
==============================================================================
---
xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java
(original)
+++
xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java
Fri Jan 16 06:35:12 2009
@@ -23,6 +23,7 @@
import java.awt.Dimension;
import java.awt.geom.AffineTransform;
import java.io.IOException;
+import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -31,8 +32,15 @@
import org.apache.fop.afp.AFPResourceManager;
import org.apache.fop.afp.AFPUnitConverter;
import org.apache.fop.afp.DataStream;
+import org.apache.fop.afp.fonts.AFPFontCollection;
import org.apache.fop.afp.fonts.AFPPageFonts;
import org.apache.fop.apps.MimeConstants;
+import org.apache.fop.fonts.FontCollection;
+import org.apache.fop.fonts.FontEventAdapter;
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.fonts.FontManager;
+import org.apache.fop.render.afp.extensions.AFPElementMapping;
+import org.apache.fop.render.afp.extensions.AFPPageSetup;
import
org.apache.fop.render.intermediate.AbstractBinaryWritingIFDocumentHandler;
import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
@@ -60,6 +68,12 @@
/** the AFP datastream */
private DataStream dataStream;
+ /** the map of page segments */
+ private Map/*<String,String>*/pageSegmentMap
+ = new java.util.HashMap/*<String,String>*/();
+
+ private boolean inPageHeader;
+
/**
* Default constructor.
*/
@@ -89,6 +103,19 @@
return new AFPRendererConfigurator(getUserAgent());
}
+ /** {...@inheritdoc} */
+ public void setDefaultFontInfo(FontInfo fontInfo) {
+ FontManager fontManager = getUserAgent().getFactory().getFontManager();
+ FontCollection[] fontCollections = new FontCollection[] {
+ new AFPFontCollection(getUserAgent().getEventBroadcaster(), null)
+ };
+
+ FontInfo fi = (fontInfo != null ? fontInfo : new FontInfo());
+ fi.setEventListener(new
FontEventAdapter(getUserAgent().getEventBroadcaster()));
+ fontManager.setup(fi, fontCollections);
+ setFontInfo(fi);
+ }
+
AFPPaintingState getPaintingState() {
return this.paintingState;
}
@@ -168,6 +195,7 @@
public void startPage(int index, String name, String pageMasterName,
Dimension size)
throws IFException {
paintingState.clear();
+ pageSegmentMap.clear();
AffineTransform baseTransform = getBaseTransform();
paintingState.concatenate(baseTransform);
@@ -183,20 +211,17 @@
dataStream.startPage(pageWidth, pageHeight, pageRotation,
resolution, resolution);
-
- //TODO Handle page extensions
- //renderPageObjectExtensions(pageViewport);
-
}
/** {...@inheritdoc} */
public void startPageHeader() throws IFException {
super.startPageHeader();
-
+ this.inPageHeader = true;
}
/** {...@inheritdoc} */
public void endPageHeader() throws IFException {
+ this.inPageHeader = false;
super.endPageHeader();
}
@@ -225,12 +250,33 @@
/** {...@inheritdoc} */
public void handleExtensionObject(Object extension) throws IFException {
- /*
- try {
- } catch (IOException ioe) {
- throw new IFException("I/O error in handleExtensionObject()", ioe);
+ if (extension instanceof AFPPageSetup) {
+ AFPPageSetup aps = (AFPPageSetup)extension;
+ if (!inPageHeader) {
+ throw new IFException(
+ "AFP page setup extension encountered outside the page
header: " + aps, null);
+ }
+ String element = aps.getElementName();
+ if (AFPElementMapping.INCLUDE_PAGE_OVERLAY.equals(element)) {
+ String overlay = aps.getName();
+ if (overlay != null) {
+ dataStream.createIncludePageOverlay(overlay);
+ }
+ } else if (AFPElementMapping.INCLUDE_PAGE_SEGMENT.equals(element))
{
+ String name = aps.getName();
+ String source = aps.getValue();
+ pageSegmentMap.put(source, name);
+ } else if (AFPElementMapping.TAG_LOGICAL_ELEMENT.equals(element)) {
+ String name = aps.getName();
+ String value = aps.getValue();
+ dataStream.createTagLogicalElement(name, value);
+ } else if (AFPElementMapping.NO_OPERATION.equals(element)) {
+ String content = aps.getContent();
+ if (content != null) {
+ dataStream.createNoOperation(content);
+ }
+ }
}
- */
}
// ---=== AFPCustomizable ===---
@@ -265,4 +311,14 @@
resourceManager.setDefaultResourceGroupFilePath(filePath);
}
+ /**
+ * Returns the page segment name for a given URI if it actually represents
a page segment.
+ * Otherwise, it just returns null.
+ * @param uri the URI that identifies the page segment
+ * @return the page segment name or null if there's no page segment for
the given URI
+ */
+ String getPageSegmentNameFor(String uri) {
+ return (String)pageSegmentMap.get(uri);
+ }
+
}
Modified:
xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/src/java/org/apache/fop/render/afp/AFPPainter.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/src/java/org/apache/fop/render/afp/AFPPainter.java?rev=735028&r1=735027&r2=735028&view=diff
==============================================================================
---
xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/src/java/org/apache/fop/render/afp/AFPPainter.java
(original)
+++
xmlgraphics/fop/branches/Temp_AreaTreeNewDesign/src/java/org/apache/fop/render/afp/AFPPainter.java
Fri Jan 16 06:35:12 2009
@@ -186,7 +186,14 @@
/** {...@inheritdoc} */
public void drawImage(String uri, Rectangle rect) throws IFException {
- drawImageUsingURI(uri, rect);
+ String name = documentHandler.getPageSegmentNameFor(uri);
+ if (name != null) {
+ float[] srcPts = {rect.x, rect.y};
+ int[] coords = unitConv.mpts2units(srcPts);
+ getDataStream().createIncludePageSegment(name, coords[X],
coords[Y]);
+ } else {
+ drawImageUsingURI(uri, rect);
+ }
}
/** {...@inheritdoc} */
@@ -314,6 +321,10 @@
state.getFontFamily(), state.getFontStyle(),
state.getFontWeight());
//TODO Ignored: state.getFontVariant()
String fontKey = getFontInfo().getInternalFontKey(triplet);
+ if (fontKey == null) {
+ fontKey = getFontInfo().getInternalFontKey(
+ new FontTriplet("any", Font.STYLE_NORMAL,
Font.WEIGHT_NORMAL));
+ }
// register font as necessary
Map/*<String,FontMetrics>*/ fontMetricMap =
documentHandler.getFontInfo().getFonts();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]