Java print API отправляет команды на принтер

У меня есть несколько принтеров, которые хорошо установлены на моем компьютере (Windows 7) и хорошо отображаются на панели управления.

Я хотел бы отправить некоторые специальные команды, такие как: команда вырезания или команды печати штрих-кода (команды ESC/POS).

Можно ли это сделать с помощью Java Print API? или Java Print API выполняет только услуги печати?

Заранее спасибо.


person Mssm    schedule 20.08.2018    source источник
comment
Java Print API опирается на базовые драйверы системы. Если lookupPrintServices возвращает непустой массив для любого из PLAIN_TEXT DocFlavors (например, DocFlavor.STRING.TEXT_PLAIN), вы можете встроить эти управляющие последовательности в обычный текст.   -  person VGR    schedule 21.08.2018
comment
Ах, отлично, да, lookupPrintServices возвращает массив всех моих принтеров... какой-нибудь хороший учебник для этой цели? ... например, какие функции использовать и т. д. .. ?   -  person Mssm    schedule 21.08.2018
comment
документация по пакету предоставляет хорошую резюме. Также есть спецификация JPS и краткий учебник.   -  person VGR    schedule 21.08.2018


Ответы (2)


Проблема решена: благодаря VGR.

вот код, который поможет любому, у кого такая же проблема:

private PrintService printer = ...; // init this using PrintService.lookupPrintServices();

if(this.printer != null) {
        String commandToSend = "Some command\n";

        Doc myDoc = new SimpleDoc(commandToSend.getBytes(), DocFlavor.BYTE_ARRAY.AUTOSENSE, null);
        DocPrintJob job = this.printer.createPrintJob();

        try {
            job.print(myDoc, null);
        } catch (PrintException e) {
            e.printStackTrace();
        }
    }
person Mssm    schedule 22.08.2018

Не уверен, что вы смогли это решить, но вот пример

final byte[] VALIDATION_MODE = new byte[]{27, 'c', '0', 4}; // Print in validation mode
final byte[]  PAPER_FULL_CUT = {0x1d,0x56,0x00}; // Full cut paper
final byte[]  PAPER_PART_CUT = {0x1d,0x56,0x01}; // Partial cut paper

public void print(String receiptContent, String printerName) throws IOException {
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        
        DocPrintJob docPrintJob = selectedPrinter(printerName).createPrintJob();
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        
        outputStream.write(VALIDATION_MODE);
        outputStream.write(receiptContent.getBytes());
        outputStream.close();
                        
        ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
        Doc doc = new SimpleDoc(inputStream, flavor, null);
        
        try {
            docPrintJob.print(doc, null);
        } catch (PrintException e) {
            System.out.println("Error:" + e.getMessage());
        }
        System.out.println("Print Job Finished");
    }


person rderoldan1    schedule 16.07.2021