import javax.swing.*;
import java.awt.*;
import java.awt.font.GlyphVector;
import java.awt.geom.AffineTransform;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;

public class bug8214481_Diff extends JPanel {
    private static final String TEXT = "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG";
    private static final int FRAME_WIDTH = 800;
    private static final int FRAME_HEIGHT = 600;

    public bug8214481_Diff() {
    }

    private void drawText(Graphics2D g2d, int offset) {
        g2d.setColor(Color.BLACK);

        g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);

        g2d.translate(0, offset);

        // regular text
        g2d.drawString(TEXT, 0, 100);

        // scaled one
        Font f = g2d.getFont();
        f = f.deriveFont(12000f);
        g2d.setFont(f);

        g2d.scale(1 / 1000f, 1 / 1000f);
        GlyphVector gv = g2d.getFont().createGlyphVector(g2d.getFontRenderContext(), "test");
        g2d.drawGlyphVector(gv, 0, 10530);
    }

    @Override
    protected void paintComponent(Graphics g) {
        // the "good font"
        ClassLoader classLoader = bug8214481.class.getClassLoader();
        URL resource = classLoader.getResource("cambria.ttc");
        FileInputStream stream = null;
        Font f;
        try {
            stream = new FileInputStream(resource.getFile());
            f = Font.createFont(Font.TRUETYPE_FONT, stream);
            f = f.deriveFont(Font.PLAIN, 48);

        } catch (FontFormatException | IOException e) {
            throw new RuntimeException(e);
        }

        Graphics2D g2d = (Graphics2D) g.create();
        g2d.setFont(f);

        // the good one
        drawText((Graphics2D) g2d.create(), 0);
        g2d.dispose();

        // the bad one
        f = new Font("Arial Plain", Font.PLAIN, 48);
        g2d = (Graphics2D) g.create();
        g2d.setFont(f);

        drawText((Graphics2D) g2d.create(), 200);

        g2d.dispose();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {

            JFrame frame = new JFrame();
            frame.setTitle(System.getProperty("java.version"));
            frame.setPreferredSize(new Dimension(1500,800));
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            bug8214481_Diff diff = new bug8214481_Diff();
            frame.add(diff);

            frame.setVisible(true);
            frame.pack();
        });
    }
}
