Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/56: Рейтинг темы: голосов - 56, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 05.03.2013
Сообщений: 49

Печать на принтер средствами JAVA

05.03.2013, 14:41. Показов 12029. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Помогите разобраться с такой проблемой:
Необходимо сделать печать на принтер средствами Java 1.2 API
Проблема возникает с самого начала

PrinterJob pJ1 = PrinterJob.getPrinterJob();
PageFormat pF1 = pJ1.defaultPage();


Но вот теперь если проверить высоту и ширину листа в пикселях то оказывается, что pF1.getImageableHeight() и pF1.getImageableWidth() дают совершенно одинаковое значение, как будто лист квадратный.
То же самое с getWidth() и getHeight(), причём значения эти не зависят от принтера.
Что делаю не так - не пойму никак !
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2013, 14:41
Ответы с готовыми решениями:

Как отправить на принтер текст средствами java script?
ситуация такая, есть форма, после нажатия кнопки печать, результаты формы обрабатываются средствами php так как происходит чтение из базы...

как отправить на принтер текст средствами java script?
ситуация такая, есть форма, после нажатия кнопки печать, результаты формы обрабатываются средствами php так как происходит чтение из базы...

Печать на принтер
Как узнать на какой принтер пошла печать

3
10 / 36 / 7
Регистрация: 04.03.2013
Сообщений: 184
05.03.2013, 19:37
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package print;
 
/**
 *
 * @author Стас
 */
 
import java.awt.*;
 
import java.awt.print.*;
 
import java.io.* ;
 
public class Main{
 
public static void main(String[] args){
//args=new String("test.doc");
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("test.doc"), pf);
 
if (pj.printDialog()){
 
try{
 
pj.print();
 
}catch(PrinterException e){}
 
 
System.exit(0);
 
}
 
}
 
 
static 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; }
 
}
 
 
        @Override
public int print(Graphics g, PageFormat pf, int ind)throws PrinterException{
 
g.setColor(Color.black);
 
g.setFont(new Font("Times new roman", Font.PLAIN, 10));
 
int h = (int)pf.getImageableHeight();
 
int x = (int)pf.getImageableX() + 10;
 
int у = (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 (у + 48 < pf.getImageableY() + 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, у) ;
 
у += 12;
 
}
 
return Printable.PAGE_EXISTS;
 
}catch(IOException e){
 
return Printable.NO_SUCH_PAGE;
 
}
 
}
}
}
0
2 / 2 / 0
Регистрация: 05.03.2013
Сообщений: 49
06.03.2013, 08:24  [ТС]
Спасибо, попробую с этим разобраться.

Добавлено через 12 часов 35 минут
Дааа, придётся посыпать голову пеплом
Всё работает как надо!
Ошибка в том, что результаты getWidth() getImageableWidth() и getHeight() getImageableX() я записывал в переменные pixWidth и pixHeight соответственно.
Смотрел на результаты так: JOptionPane.showMessageDialog(null, pixWidth + " -- " + pixHeight)
И всё бы хорошо, да только вместо (null, pixWidth + " -- " + pixHeight) было (null, pixWidth + " -- " + pixWidth)
Так и получался мой "квадратик"
Как я мог не заметить - непонимаю.

Так что извиняюсь перед обществом за свой тупой вопрос
0
10 / 36 / 7
Регистрация: 04.03.2013
Сообщений: 184
06.03.2013, 15:53
А я то думал, где собака зарыта... =) Со всеми бывает =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.03.2013, 15:53
Помогаю со студенческими работами здесь

Принтер, печать
Здравствуйте ув. форумчане! Думаю что с веткой форума не ошибся. Нужно написать программу которая будет мониторить ошибки поступающие от...

Печать через принтер
Возникла такая проблема - огромный рисунок нужно разбить на страницы и распечатать - рисунок в TImage - использую TPrinter - все...

Печать апплета на принтер
Подскажите пожалуйста возможно ли срествами Java (допустим по нажатии на кнопку в апплете) вывести на принтер содержимое данного фрейма в...

С 1С не идет печать на принтер
Всем привет!!! У меня такая проблема::( В конторе есть сеть из 8 компов. В соседнем кабинете стоит сервер(Server2003),где установлена...

Печать из консоли на принтер
Здравствуйте столкнулся с такой проблемой как печать с консольного окна результата программы. Хотел сделать следующее сам код...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru