Итак давайте напишим простенькую программку, которая напечатает текст и графику на принтере, для экономии чернил в качестве принтера я буду использовать виртуальный принтер, который печатает в формат PDF.
1. Создадим файл DemoPrinting.java
2. Введём следующий код:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.print.*;
public class DemoPrinting extends JFrame implements Printable, ActionListener {
// Массив данных которые мы будем печатать
private String[][] arrData = {
{"Январь", "10руб"},
{"Февраль", "15руб"},
{"Март", "2руб"}
};
// Конструктор, тут инициализация формы
public DemoPrinting() {
// Устанавливаем надпись в заголовке окна Демо печати
setTitle("Демо печати");
// Устанавлеваем размер окна
setSize(640, 480);
// Без всяких лейаутов
setLayout(null);
// Новая кнопка с надписью "Напечатать"
JButton btnPrint = new JButton("Напечатать");
// Покуда у нас null layout, то перемещаем кнопку, а так-же изменяем размер кнопки
btnPrint.setBounds(10, 10, 120, 35);
// Добавляем обработчик
btnPrint.addActionListener(this);
// Добавляем кнопку в наше окно JFrame
add(btnPrint);
// Устанавливаем обработчик при нажатие на кнопку закрыть окно, т.е. X
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Отображаем форму
setVisible(true);
}
// Печать
public int print(Graphics g, PageFormat pgfmt, int page) {
try {
if (page > 0)
return NO_SUCH_PAGE;
int intPosY = 0;
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pgfmt.getImageableX(), pgfmt.getImageableY());
g.drawString("Тут заголовок!", 100, 100);
for(String[] el : arrData) {
g.drawString(el[0], 100, intPosY + 120);
g.drawString(el[1], 200, intPosY + 120);
intPosY += 10;
}
}
catch(Exception ex) { return NO_SUCH_PAGE; }
return PAGE_EXISTS;
}
// Тут запускается...
public static void main(String args[]) {
// Создаём форму
new DemoPrinting();
}
// Обработчик событий при нажатие на кнопку "Печать"
public void actionPerformed(ActionEvent e) {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable((Printable)this);
if(job.printDialog()) {
try {
job.print();
}
catch (PrinterException ex) { }
}
}
}
3. Откомпилируем javac -encoding utf8 DemoPrinting.java
4. Если всё откомпилировалось, запустим нашу программу java DemoPrinting, вы увидите такой экран, конечно я размеры уменьшил:
После печати выглядет так, у меня виртуальный принтер, который печатает в PDF: