在纸上绘制背景区域
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;
}
}
结果:
我正在编写一个 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;
}
}
结果: