Итак давайте напишим простенькую программку, которая напечатает текст и графику на принтере, для экономии чернил в качестве принтера я буду использовать виртуальный принтер, который печатает в формат 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: