在纸上绘制背景区域

Draw background region on paper

我正在编写一个 Java 在 A4 纸上绘制字符串的应用程序。 这是我的简单代码:

        Graphics2D g2d = (Graphics2D)g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());

        g.setFont(new Font("Arial", Font.PLAIN, fontSize)); 
        g.setColor(Color.BLACK);


        /* Header */
        g.drawString("Information", 40, 30);
        g.drawString("More information", 40, 60);

我希望 header 区域具有背景颜色,我不想为文本设置背景(大多数问题都与此有关)我想要一个包含 header 的更大背景字符串。如果你能想象一个矩形,里面放着两个字符串。

最后我遇到的另一个问题是我找不到A4横向的尺寸。例如,我希望这种背景颜色覆盖 A4 纸的整个宽度和更小的高度,小到足以覆盖 2 个字符串。

要绘制大背景,请尝试使用 Graphics2D.fill(new Rectangle2D.Double()) 填充矩形并在其上绘制文本,要获得 A4 格式,请使用 PrinterJob.pageDialog() 选择要用于打印的格式,这里是一些代码开始:

public class Main
{

    public Main()
    {
        PrinterJob job = PrinterJob.getPrinterJob();
        PageFormat format = job.pageDialog(job.defaultPage());
        job.setPrintable(new Text(), format);

        if (job.printDialog())
        {
            try
            {
                job.print();
            }
            catch (PrinterException e)
            {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args)
    {
        new Main();
    }
}

class Text implements Printable
{
    int textPosY;

    @Override
    public int print(Graphics g, PageFormat format, int index) throws PrinterException
    {
        if (index > 0)
            return Printable.NO_SUCH_PAGE;

        Graphics2D g2d = (Graphics2D) g;
        g2d.setFont(new Font("Arial", Font.PLAIN, 30));
        g2d.translate(format.getImageableX(), format.getImageableY());

        g2d.setPaint(Color.GREEN);
        g2d.fill(new Rectangle2D.Double(0, 10, format.getWidth(), g2d.getFontMetrics().getHeight() * 2));

        /* Header */
        g2d.setColor(Color.BLACK);
        textPosY = 10 + g2d.getFontMetrics().getAscent();
        g2d.drawString("Information", 30, textPosY);
        textPosY += g2d.getFontMetrics().getDescent() + g2d.getFontMetrics().getLeading() + g2d.getFontMetrics().getAscent();
        g2d.drawString("More information", 40, textPosY);

        return Printable.PAGE_EXISTS;
    }
}

结果: