У меня есть несколько принтеров, которые хорошо установлены на моем компьютере (Windows 7) и хорошо отображаются на панели управления.
Я хотел бы отправить некоторые специальные команды, такие как: команда вырезания или команды печати штрих-кода (команды ESC / POS).
Возможно ли это сделать с помощью Java Print API? или Java Print API выполняет только услуги печати?
Заранее спасибо.
Ах, отлично, да, lookupPrintServices возвращает массив всех моих принтеров ... есть хороший учебник для этой цели? ... например, какие функции использовать и т. д.?
пакетная документация дает хорошее резюме. Также есть спецификация JPS и краткое руководство.




Задача решена : Спасибо 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();
}
}
Не уверен, что вы смогли решить эту проблему, но вот пример
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");
}
API печати Java полагается на базовые драйверы системы. Если lookupPrintServices возвращает непустой массив для любого из PLAIN_TEXT DocFlavors (например, DocFlavor.STRING.TEXT_PLAIN), вы можете встроить эти управляющие последовательности в обычный текст.