Печать файла
Печать текстового файла заключается в размещении его строк в графическом контексте методом drawstring (). При этом необходимо проследить за правильным размещением строк в области печати и разбиением файла на страницы.
В листинге 18.9 приведен упрощенный пример печати текстового файла, имя которого задается в командной строке. Из файла читаются готовые строки, программа не сравнивает их длину с шириной области печати, не выделяет абзацы. Вывод производится в локальной кодировке.
Листинг 18.9. Печать текстового файла.
import java.awt.*; import java.awt.print.*; import java.io.*; public class Print2File{ public static void main(String[] args){ if (args.length < 1){ System.err.println("Usage: Print2File path"); System, exit(0); } PrinterJob pj = PrinterJob.getPrinterJob(); PageFormat pf = pj.pageDialog(pj.defaultPage()); pj.setPrintable(new FilePagePainter(args[0]), pf); if (pj.printDialog()){ try{ pj.print(); }catch(PrinterException e){} ) System, exit(0); } } class FilePagePainter implements Printable{ private BufferedReader br; private String file; private int page = -1; private boolean eof; private String[] line; private int numLines; public FilePagePainter(String file){ this.file = file; try{ br = new BufferedReader(new FileReader(file)); }catch(IOException e){ eof = true; } } public int print(Graphics g, PageFormat pf, int ind) throws PrinterException( g.setColor(Color.black); g.setFont(new Font("Serif", Font.PLAIN, 10)); int h = (int)pf.getlmageableHeight(); int x = (int)pf.getlmageableX() + 10; int у = (int)pf.getlmageableY() + 12; try{ // Если система печати запросила эту страницу первый раз if (ind!= page){ if (eof) return Printable.NO_SUCH_PAGE; page = ind; line = new String[h/12]; // Массив строк на странице numLines =0; // Число строк на странице // Читаем строки из файла и формируем массив строк while (у + 48 < pf.getlmageableY() + h){ line[numLines] = br.readLine(); if (line[numLines] == null){ eof = true; break; } numLines++; У += 12; } } // Размещаем колонтитул у = (int)pf.getImageableY() + 12; g.drawstring("Файл: " + file + ", страница " + (ind + 1), x, у); // Оставляем две пустые строки у += 36; // Размещаем строки текста текущей страницы for (int i = 0; i < numLines; i++){ g.drawString(line[i], x, y); у += 12; } return Printable.PAGE_EXISTS; }catch(lOException e){ return Printable.NO_SUCH_PAGE; } } }