From 6bfc5fa86ea789899a75a8706cd1270aeecd95fe Mon Sep 17 00:00:00 2001 From: Adrian Cumiskey Date: Wed, 5 Nov 2008 10:28:26 +0000 Subject: [PATCH] GOCA Text painting positional fix. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AFPGOCAResources@711550 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/fop/afp/AFPTextHandler.java | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/java/org/apache/fop/afp/AFPTextHandler.java b/src/java/org/apache/fop/afp/AFPTextHandler.java index 3f5ff7b33..be6aba51c 100644 --- a/src/java/org/apache/fop/afp/AFPTextHandler.java +++ b/src/java/org/apache/fop/afp/AFPTextHandler.java @@ -20,6 +20,7 @@ package org.apache.fop.afp; import java.awt.Color; +import java.awt.geom.AffineTransform; import java.io.IOException; import org.apache.commons.logging.Log; @@ -40,6 +41,9 @@ public class AFPTextHandler implements TextHandler { /** logging instance */ private static Log log = LogFactory.getLog(AFPTextHandler.class); + private static final int X = 0; + private static final int Y = 1; + private AFPGraphics2D g2d = null; /** Overriding FontState */ @@ -47,7 +51,7 @@ public class AFPTextHandler implements TextHandler { /** * Main constructor. - * @param g2d the PSGraphics2D instance this instances is used by + * @param g2d the AFPGraphics2D instance */ public AFPTextHandler(AFPGraphics2D g2d) { this.g2d = g2d; @@ -55,6 +59,7 @@ public class AFPTextHandler implements TextHandler { /** * Return the font information associated with this object + * * @return the FontInfo object */ public FontInfo getFontInfo() { @@ -64,23 +69,24 @@ public class AFPTextHandler implements TextHandler { /** * Add a text string to the current data object of the AFP datastream. * The text is painted using text operations. + * * {@inheritDoc} */ public void drawString(String str, float x, float y) throws IOException { log.debug("drawString() str=" + str + ", x=" + x + ", y=" + y); GraphicsObject graphicsObj = g2d.getGraphicsObject(); - Color col = g2d.getColor(); + Color color = g2d.getColor(); - AFPPaintingState state = g2d.getPaintingState(); - if (state.setColor(col)) { - graphicsObj.setColor(col); + AFPPaintingState paintingState = g2d.getPaintingState(); + if (paintingState.setColor(color)) { + graphicsObj.setColor(color); } if (overrideFont != null) { FontInfo fontInfo = getFontInfo(); - AFPPageFonts pageFonts = state.getPageFonts(); + AFPPageFonts pageFonts = paintingState.getPageFonts(); String internalFontName = overrideFont.getFontName(); int fontSize = overrideFont.getFontSize(); - if (state.setFontName(internalFontName) || state.setFontSize(fontSize)) { + if (paintingState.setFontName(internalFontName) || paintingState.setFontSize(fontSize)) { AFPFont font = (AFPFont)fontInfo.getFonts().get(internalFontName); AFPFontAttributes afpFontAttributes = pageFonts.registerFont( internalFontName, @@ -91,11 +97,19 @@ public class AFPTextHandler implements TextHandler { graphicsObj.setCharacterSet(fontReference); } } - graphicsObj.addString(str, Math.round(x), Math.round(y)); + + // calculate x, y plotting coordinates from graphics context + AffineTransform at = g2d.getTransform(); + float[] srcPts = new float[] { x, y }; + float[] dstPts = new float[srcPts.length]; + at.transform(srcPts, 0, dstPts, 0, 1); + + graphicsObj.addString(str, Math.round(dstPts[X]), Math.round(dstPts[Y])); } /** * Sets the overriding font. + * * @param overrideFont Overriding Font to set */ public void setOverrideFont(Font overrideFont) { -- 2.39.5