2015-02-15 4 views
0

Я пишу приложение Java, которое рисует строки на бумаге формата А4. Вот мой простой код:Нарисовать область фона на бумаге

 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); 

Я хочу, чтобы область заголовка, чтобы иметь цвет фона, я не хочу, чтобы фон текста (большинство вопросов было на что) я хочу больший фон, который будет содержать строки заголовка. Если вы можете представить себе прямоугольник, в котором находятся две строки.

И, наконец, еще одна проблема, с которой я столкнулся, заключается в том, что я не могу найти размеры A4-ландшафта. например, я хочу, чтобы этот фоновый цвет охватывал всю ширину бумаги формата А4 и высоту, меньшую, достаточно маленькую, чтобы покрыть 2 строки.

ответ

1

Чтобы сделать большой фон попытаться заполнить прямоугольник, используя Graphics2D.fill(new Rectangle2D.Double()) и сделать свой текст на нем, и получить формат А4 использовать 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; 
    } 
} 

результат:

enter image description here

+0

Спасибо. Есть ли другой вариант сделать то же самое, но теперь граница будет прозрачной и с только границей вокруг этого прямоугольника? – John

+0

@John граница PDF-файла прозрачна, просто я добавил с краской черную рамку, чтобы показать вам формат файла A4, чтобы только граница вокруг вашего текста заменила 'g2d.fill (новый Rectangle2D.Double (...)) 'by' g2d.draw (новый Rectangle2D.Double (...)); ' –

Смежные вопросы