1

スタイル付きのテキストをバッファリングされた画像に描画しようとしています。ビュー階層の一部ではない JTextPane を使用しています。ドキュメントのプロパティを目的の配置に設定しましたが、結果が正しく配置されません。さらに悪いことに、同じテストを再度実行すると、異なるフォント サイズに対して異なる結果が得られたり、場合によっては異なる結果が得られたりすることさえありました。

次の画像は結果を示しています。段落は、上から下、左、中央、右、いっぱいに揃える必要があります。赤枠は JTextPane の境界線です。自分で見て。

私は新しいスタックオーバーフロー ユーザーであるため、画像を投稿できませんでした。画像はhttp://www.sendtoprint.net/preview/textfile.jpgで見ることができます

これは Java 1.7 で行われましたが、1.6 でも発生しました。コード:

public void createBufferedImage ()
    {
    try
        {
        BufferedImage bi = new BufferedImage (1000, 1200, BufferedImage.TYPE_INT_RGB);
        Graphics2D gg = bi.createGraphics ();

        gg.setRenderingHint (RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        gg.setRenderingHint (RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);

        gg.setBackground (Color.white);
        gg.fillRect (0, 0, bi.getWidth (), bi.getHeight ());

        gg.scale (3.0f, 3.0f);
        gg.translate (16, 16);

        String text = "The residents of Colorado and Washington state have voted to legalize "
                + "the recreational use of marijuana, and all hell is about to break "
                + "loose -- at least ideologically. The problem is that pot is still very much "
                + "illegal under federal law, and the Obama administration must decide whether "
                + "to enforce federal law in a state that has rejected the substance of that law."
                + "\n\n";


        DefaultStyledDocument doc = new DefaultStyledDocument ();

        MutableAttributeSet attr = new SimpleAttributeSet ();
        StyleConstants.setFontFamily (attr, "Arial");
        StyleConstants.setFontSize (attr, 9);
        StyleConstants.setForeground (attr, Color.black);

        MutableAttributeSet parAttr = new SimpleAttributeSet ();

        doc.insertString (0, text, attr);

        StyleConstants.setAlignment (parAttr, StyleConstants.ALIGN_LEFT);
        doc.setParagraphAttributes (0, doc.getLength (), parAttr, false);

        doc.insertString (doc.getLength (), text, attr);

        StyleConstants.setAlignment (parAttr, StyleConstants.ALIGN_CENTER);
        doc.setParagraphAttributes (doc.getLength () - text.length (), text.length (), parAttr, false);

        doc.insertString (doc.getLength (), text, attr);

        StyleConstants.setAlignment (parAttr, StyleConstants.ALIGN_RIGHT);
        doc.setParagraphAttributes (doc.getLength () - text.length (), text.length (), parAttr, false);

        doc.insertString (doc.getLength (), text, attr);

        StyleConstants.setAlignment (parAttr, StyleConstants.ALIGN_JUSTIFIED);
        doc.setParagraphAttributes (doc.getLength () - text.length (), text.length (), parAttr, false);

        JTextPane tc = new JTextPane ();
        tc.setBorder (BorderFactory.createLineBorder (Color.red, 1));
        tc.setDocument (doc);
        tc.setBackground (Color.white);
        tc.setLocation (0, 0);
        tc.setSize (new Dimension (300, 370));
        tc.paint (gg);

        System.out.println ("Writing file: " + new Date ().toString ());

        File file = new File ("C:\\Users\\Yishai\\Desktop\\text\\file.jpg");
        ImageIO.write (bi, "jpg", file);
        }
    catch (Exception e)
        {
        System.out.println (e.getMessage ());
        }
    }   

私は何が違うのですか?JTextPane 設定はありますか? テキストキャッシュ?なんでも?

ありがとう。

4

0 に答える 0