if (log.isDebugEnabled()) {
log.debug("drawString() str=" + str + ", x=" + x + ", y=" + y);
}
if (g instanceof AFPGraphics2D) {
AFPGraphics2D g2d = (AFPGraphics2D)g;
GraphicsObject graphicsObj = g2d.getGraphicsObject();
Color color = g2d.getColor();
// set the color
AFPPaintingState paintingState = g2d.getPaintingState();
if (paintingState.setColor(color)) {
graphicsObj.setColor(color);
}
// set the character set
int fontReference = 0;
int fontSize;
String internalFontName;
AFPPageFonts pageFonts = paintingState.getPageFonts();
if (overrideFont != null) {
internalFontName = overrideFont.getFontName();
fontSize = overrideFont.getFontSize();
if (log.isDebugEnabled()) {
log.debug(" with overriding font: " + internalFontName + ", " + fontSize);
}
} else {
java.awt.Font awtFont = g2d.getFont();
Font fopFont = fontInfo.getFontInstanceForAWTFont(awtFont);
if (log.isDebugEnabled()) {
log.debug(" with font: " + fopFont);
}
internalFontName = fopFont.getFontName();
fontSize = fopFont.getFontSize();
}
fontSize = (int)Math.round(
g2d.convertToAbsoluteLength(fontSize));
fontReference = registerPageFont(pageFonts, internalFontName, fontSize);
// TODO: re-think above registerPageFont code...
AFPFont afpFont = (AFPFont) fontInfo.getFonts().get(internalFontName);
final CharacterSet charSet = afpFont.getCharacterSet(fontSize);
// Work-around for InfoPrint's AFP which loses character set state
// over Graphics Data
// boundaries.
graphicsObj.setCharacterSet(fontReference);
// add the character string
graphicsObj.addString(str, Math.round(x), Math.round(y), charSet);
} else {
//Inside Batik's SVG filter operations, you won't get an AFPGraphics2D
g.drawString(str, x, y);
}
}