diff --git a/jdk/src/share/classes/java/awt/Font.java b/jdk/src/share/classes/java/awt/Font.java
index ba2cf3e3976..8dc5938d411 100644
--- a/jdk/src/share/classes/java/awt/Font.java
+++ b/jdk/src/share/classes/java/awt/Font.java
@@ -1970,7 +1970,6 @@ public class Font implements java.io.Serializable
      * in the JDK - and the only likely caller - is in this same class.
      */
     private float getItalicAngle(FontRenderContext frc) {
-        AffineTransform at = (isTransformed()) ? getTransform() : identityTx;
         Object aa, fm;
         if (frc == null) {
             aa = RenderingHints.VALUE_TEXT_ANTIALIAS_OFF;
@@ -1979,7 +1978,7 @@ public class Font implements java.io.Serializable
             aa = frc.getAntiAliasingHint();
             fm = frc.getFractionalMetricsHint();
         }
-        return getFont2D().getItalicAngle(this, at, aa, fm);
+        return getFont2D().getItalicAngle(this, identityTx, aa, fm);
     }
 
     /**
diff --git a/jdk/src/share/classes/sun/font/Font2D.java b/jdk/src/share/classes/sun/font/Font2D.java
index 0bf23547ad0..bfcbc0329d4 100644
--- a/jdk/src/share/classes/sun/font/Font2D.java
+++ b/jdk/src/share/classes/sun/font/Font2D.java
@@ -241,6 +241,13 @@ public abstract class Font2D {
         if (font.isTransformed()) {
             glyphTx.concatenate(font.getTransform());
         }
+        if (glyphTx.getTranslateX() != 0 || glyphTx.getTranslateY() != 0) {
+            glyphTx.setTransform(glyphTx.getScaleX(),
+                                 glyphTx.getShearY(),
+                                 glyphTx.getShearX(),
+                                 glyphTx.getScaleY(),
+                                 0.0, 0.0);
+        }
         FontStrikeDesc desc = new FontStrikeDesc(devTx, glyphTx,
                                                  font.getStyle(), aa, fm);
         return getStrike(desc, false);
@@ -266,6 +273,13 @@ public abstract class Font2D {
         at.scale(ptSize, ptSize);
         if (font.isTransformed()) {
             at.concatenate(font.getTransform());
+            if (at.getTranslateX() != 0 || at.getTranslateY() != 0) {
+                at.setTransform(at.getScaleX(),
+                                at.getShearY(),
+                                at.getShearX(),
+                                at.getScaleY(),
+                                0.0, 0.0);
+            }
         }
         int aa = FontStrikeDesc.getAAHintIntVal(this, font, frc);
         int fm = FontStrikeDesc.getFMHintIntVal(frc.getFractionalMetricsHint());