powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / состояние принтера
25 сообщений из 46, страница 1 из 2
состояние принтера
    #39697550
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!
собственно сабж как получить состояние принтера, т.е. доступность и т.д.?

получаю таким образом список всех принтеров, а дальше пока туман...
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public List<String> getPrinters() {

        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
        PrintService printServices[] = PrintServiceLookup.lookupPrintServices(
                flavor, pras);

        List<String> printerList = new ArrayList<String>();
        for (PrintService printerService : printServices) {
            printerList.add(printerService.getName());
        }

        return printerList;
    }
...
Рейтинг: 0 / 0
состояние принтера
    #39697578
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар
Код: java
1.
printerService

там?
...
Рейтинг: 0 / 0
состояние принтера
    #39697580
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

можно и там, в общем идея такая: удаленному серверу подключен принтер, и все это работает через рест, все уже сделал только остается получить информацию о принтере т.к. клиенту надо отвечать типа распечатан или не распечатан т.к. принтер отключен и т.д.
...
Рейтинг: 0 / 0
состояние принтера
    #39697595
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как то на это дело отвечает класс PrinterStateReasons но пока не совсем понимаю...
...
Рейтинг: 0 / 0
состояние принтера
    #39697601
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
состояние принтера
    #39697727
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,

не совсем понял, что даст ПринтСервис?
...
Рейтинг: 0 / 0
состояние принтера
    #39697735
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарт.к. клиенту надо отвечать типа распечатан или не распечатан

В общем-то, это должен быть признак Job'а в очереди печати. IMHO

собственно принтер-то при чем? Кому какая разница: включен он, выключен. И к печати конкретного документа/job'а это отношение имеет сильно опосредованное. Сейчас выключен, через минуту его включат и он документ напечатает.

IMHO
...
Рейтинг: 0 / 0
состояние принтера
    #39697739
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JavaDocvoid print(Doc doc,
PrintRequestAttributeSet attributes)
throws PrintException

Prints a document with the specified job attributes. This method should only be called once for a given print job. Calling it again will not result in a new job being spooled to the printer. The service implementation will define policy for service interruption and recovery. When the print method returns, printing may not yet have completed as printing may happen asynchronously, perhaps in a different thread. Application clients which want to monitor the success or failure should register a PrintJobListener.
.....


https://docs.oracle.com/javase/7/docs/api/javax/print/event/PrintJobListener.html

JavaDocImplementations of this listener interface should be attached to a DocPrintJob to monitor the status of the printer job. These callback methods may be invoked on the thread processing the print job, or a service created notification thread. In either case the client should not perform lengthy processing in these callbacks.
....
...
Рейтинг: 0 / 0
состояние принтера
    #39697794
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

отлично. но,
Код: 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.
DocPrintJob job = service.createPrintJob();
try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            out.write(27); // ESC
            out.write(116); // t
            out.write(17); // 866 codepage
            out.write(text.getBytes("CP866"));

            byte[] bytes;

            bytes = out.toByteArray();
            Doc doc = new SimpleDoc(bytes, flavor, null);


            job.addPrintJobListener(new PrintJobAdapter() {

                public void printJobCompleted(PrintJobEvent e) {
                    System.out.println("Print job complete");
                    System.exit(0);
                }

                public void printDataTransferCompleted(PrintJobEvent e) {
                    System.out.println(e.getPrintJob().getAttributes());
                    System.out.println("Document transfered to printer");
                }

                public void printJobRequiresAttention(PrintJobEvent e) {
                    System.out.println("Print job requires attention");
                    System.out.println("Check printer: out of paper?");
                }

                public void printJobFailed(PrintJobEvent e) {
                    System.out.println("Print job failed");
                    System.exit(1);
                }
            });

            try {
                job.print(doc, null);
            } catch (PrintException e) {
                System.out.println(e);
                System.exit(1);
            }
} catch (Exception e) {
            e.printStackTrace();
}




типа так?
...
Рейтинг: 0 / 0
состояние принтера
    #39697804
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар...
типа так?
Не знаю.
Тебе виднее должно быть, что требуется
...
Рейтинг: 0 / 0
состояние принтера
    #39697808
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

получаю всегда Document transfered to printer
...
Рейтинг: 0 / 0
состояние принтера
    #39697817
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарLeonid Kudryavtsev,

получаю всегда Document transfered to printer может оно с виндой работает?
В винде в статусной видно что закончил печать?
...
Рейтинг: 0 / 0
состояние принтера
    #39697829
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

да винда, на статусе в очереди стоит т.к. принтер отключен... и как только включаю то сразу печатается и все...

и получаю ровно ту сообщение который писал
...
Рейтинг: 0 / 0
состояние принтера
    #39697836
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарPetro123,

да винда, на статусе в очереди стоит т.к. принтер отключен... и как только включаю то сразу печатается и все...

и получаю ровно ту сообщение который писалну.
А дополнительный код зачем? Ты придумал?
...
Рейтинг: 0 / 0
состояние принтера
    #39697845
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарполучаю всегда Document transfered to printer
кидай в спойлер полный код тесткейса (с функцией main и прочеее)

постараюсь запустить на своем компе
...
Рейтинг: 0 / 0
состояние принтера
    #39697858
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
? с интернета ищу уже второй день походу...

маин

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Main {
    public static void main(String[] args) throws IOException {

        PrinterService printerService = new PrinterService();


        System.out.println(printerService.getPrinters());

        printerService.printString("XP-80C", "йцуЙЦУйцу\n\n\n\n\n\n\n");

        // cut that paper!
        byte[] cutP = new byte[]{0x1d, 'V', 1};
        printerService.printBytes("XP-80C", cutP);
    }




PrinterService
Код: 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.
public List<String> getPrinters() {

        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
        PrintService printServices[] = PrintServiceLookup.lookupPrintServices(
                flavor, pras);

        List<String> printerList = new ArrayList<String>();
        for (PrintService printerService : printServices) {
            printerList.add(printerService.getName());
        }

        return printerList;
    }

    @Override
    public int print(Graphics g, PageFormat pf, int page)
            throws PrinterException {
        if (page > 0) { /* We have only one page, and 'page' is zero-based */
            return NO_SUCH_PAGE;
        }

        /*
         * User (0,0) is typically outside the imageable area, so we must
         * translate by the X and Y values in the PageFormat to avoid clipping
         */
        Graphics2D g2d = (Graphics2D) g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());
        /* Now we perform our rendering */

        g.setFont(new Font("Roman", 0, 8));
        g.drawString("Hello world !", 0, 10);

        return PAGE_EXISTS;
    }

    public void printString(String printerName, String text) throws IOException {

        // find the printService of name printerName
        DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
        PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

        PrintService printService[] = PrintServiceLookup.lookupPrintServices(
                flavor, pras);

        PrintService service = findPrintService(printerName, printService);

        DocPrintJob job = service.createPrintJob();
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            out.write(27); // ESC
            out.write(116); // t
            out.write(17); // 866 codepage
            out.write(text.getBytes("CP866"));
            byte[] bytes;

            bytes = out.toByteArray();
            Doc doc = new SimpleDoc(bytes, flavor, null);


//            job.print(doc, null);
///////////////////////////////////////
            job.addPrintJobListener(new PrintJobAdapter() {

                public void printJobCompleted(PrintJobEvent e) {
                    System.out.println("Print job complete");
                    System.exit(0);
                }

                public void printDataTransferCompleted(PrintJobEvent e) {
                    System.out.println(e.getPrintJob().getAttributes());
                    System.out.println("Document transfered to printer");
                }

                public void printJobRequiresAttention(PrintJobEvent e) {
                    System.out.println("Print job requires attention");
                    System.out.println("Check printer: out of paper?");
                }

                public void printJobFailed(PrintJobEvent e) {
                    System.out.println("Print job failed");
                    System.exit(1);
                }
            });

            try {
                job.print(doc, null);
            } catch (PrintException e) {
                System.out.println(e);
                System.exit(1);
            }
            ///////////////////////////////////////

        } catch (Exception e) {
//             TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void printBytes(String printerName, byte[] bytes) {

        DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
        PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

        PrintService printService[] = PrintServiceLookup.lookupPrintServices(
                flavor, pras);
        PrintService service = findPrintService(printerName, printService);

        DocPrintJob job = service.createPrintJob();

        try {

            Doc doc = new SimpleDoc(bytes, flavor, null);

            job.print(doc, null);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private PrintService findPrintService(String printerName,
                                          PrintService[] services) {
        for (PrintService service : services) {
            if (service.getName().equalsIgnoreCase(printerName)) {
                return service;
            }
        }
        return null;
    }
}




гомнокода может много но все равно код вполне рабочий )
кстати принтер у меня термо...
...
Рейтинг: 0 / 0
состояние принтера
    #39697862
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
В общем-то, это должен быть признак Job'а в очереди печати. IMHO

собственно принтер-то при чем? Кому какая разница: включен он, выключен. И к печати конкретного документа/job'а это отношение имеет сильно опосредованное. Сейчас выключен, через минуту его включат и он документ напечатает.

IMHO

о оказывается я пропустил... возможно и вы правы, но все таки интересно было бы узнать подключен ли принтак или нет... а так да как только подключится принтер то сразу же начинается печать...
...
Рейтинг: 0 / 0
состояние принтера
    #39697865
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Я чисто не понял юз кейс, зачем тебе это надо если винда и так показывает?
...
Рейтинг: 0 / 0
состояние принтера
    #39697875
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тайм-аут ожидания для принтеров - около двух минут.
Получать события с принтера, теоретически можно (включаем "Печатать прямо на принтер"), но, обычно, смысла в этом нет.
...
Рейтинг: 0 / 0
состояние принтера
    #39697876
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

дело в том что принтер к примеру находится в другом месте а клиентское ПО в другом...
т.е. с офиса надо передать инфо на печать, а принтак находится вообще в другом месте города )
...
Рейтинг: 0 / 0
состояние принтера
    #39697878
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и при печати если вызвать окно операционки, то тоже есть инфа: Готов.
Т.е. автору нужно было ошибку обрабатывать а не мудрствовать поисками событий.
Имхо.
...
Рейтинг: 0 / 0
состояние принтера
    #39697879
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарPetro123,

дело в том что принтер к примеру находится в другом месте а клиентское ПО в другом...
т.е. с офиса надо передать инфо на печать, а принтак находится вообще в другом месте города )вопрос тот же.
Какая ошибка если принтер на Марсе?
...
Рейтинг: 0 / 0
состояние принтера
    #39697888
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел в документации, вот только не совсем въехал как пользоваться )

Код: plaintext
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.
DLE EOT n (*)    
[Name]  Real-time status transmission 
[Format]              ASCII         DLE       EOT       n 
                            Hex           10         04       n 
                       Decimal           16          4       n 
[Range]  1 ≤ n ≤ 4 
[Description]  Transmits the selected printer status specified by n in real-time, according to the 
following parameters: 
n = 1: Transmit printer status 
n = 2: Transmit off-line status 
n = 3: Transmit error status 
n = 4: Transmit paper roll sensor status 
[Details]  • The status is transmitted whenever the data sequence of <10>H<04>H< n> 
(1 ≤ n ≤ 4) is received. 
Example: 
In ESC ∗ m nL nH d1...dk, d1=<10>H, d2=<04>H, d3=<01>H 
• This command should not be used within the data sequence of another 
command that consists of 2 or more bytes. 
Example: 
If you attempt to transmit ESC 3 n to the printer, but DTR (DSR for the host 
computer) goes to MARK before n is transmitted and then DLE EOT 3 
interrupts before n is received, the code <10>H for DLE EOT 3 is processed 
as the code for ESC 3 <10>H. 
• Even though the printer is not selected using ESC = (select peripheral device), 
this command is effective. 
• The printer transmits the current status. Each status is represented by onebyte 
data. 
• The printer transmits the status without confirming whether the host computer 
can receive data. 
• The printer executes this command upon receiving it. 
• This command is executed even when the printer is off-line, the receive buffer 
is full, or there is an error status with a serial interface model. 
• With a parallel interface model, this command can not be executed when the 
printer is busy. This command is executed even when the printer is off-line or 
there is an error status when DIP switch 2-1 is on with a parallel interface 
model. 
• When Auto Status Back (ASB) is enabled using the GS a command, the status 
transmitted by the DLE EOT command and the ASB status must be 
differentiated.
...
Рейтинг: 0 / 0
состояние принтера
    #39697891
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Какая ошибка если принтер на Марсе?

в смысле? про какой ошибки говорите?
...
Рейтинг: 0 / 0
состояние принтера
    #39697893
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарнашел в документации, вот только не совсем въехал как пользоватьсяКак-как ...
Как при доисторическом материализме - открыли порт, выставили режимы, шлём команды, читаем статусные биты и ответы устройства.
...
Рейтинг: 0 / 0
25 сообщений из 46, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / состояние принтера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]