1.15Печать файла
Печать текстового файла заключается в размещении его строк в графическом контексте методом drawString (). При этом необходимо проследить за правильным размещением строк в области печати и разбиением файла на страницы.
Пример печати текстового файла, имя которого задается в командной строке. Из файла читаются готовые строки, программа не сравнивает их длину с шириной области печати, не выделяет абзацы. Вывод производится в локальной кодировке.
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.getImageableHeight();
int x = (int)pf.getImageableX() + 10;
int y = (int)pf.getImageableY() + 12;
try{
// Если система печати запросила эту страницу первый раз
if (ind != page){
if (eof) return Printable.NO_SUCH_PAGE;
page = ind;
line = new String[h/12]; // Массив строк на странице
numLines =0; // Число строк на странице
// Читаем строки из файла и формируем массив строк
while (y + 48 < pf.getImageableY() + h)
{
line[numLines] = br.readLine();
if (line[numLines] == null){eof = true; break; }
numLines++;
y += 12;
}
}
// Размещаем колонтитул
y = (int)pf.getImageableY() + 12;
g.drawString("Файл: " + file + ", страница " + (ind + 1), x, y);
// Оставляем две пустые строки
y += 36;
// Размещаем строки текста текущей страницы
for (int i = 0; i < numLines; i++){
g.drawString(line[i], x, y) ;
y += 12;
}
return Printable.PAGE_EXISTS;
}catch(IOException e){
return Printable.NO_SUCH_PAGE;
}
}
}
- 1Потоки ввода/вывода
- 1.1Потоки в Java
- 1.2Иерархия классов
- 1.3Потоковые классы
- 1.4Консольный ввод/вывод
- 1.5Файловый ввод/вывод
- 1.6Получение свойств файла
- 1.7Буферизованный ввод/вывод
- 1.8Поток простых типов Java
- 1.9Кодировка utf-8
- 1.10Прямой доступ к файлу
- 1.11Каналы обмена информацией
- 1.12Сериализация объектов
- 1.13Печать в Java
- 1.14Печать средствами Java 2d
- 1.15Печать файла
- 1.16Печать страниц с разными параметрами