Как создать raw (-o raw) PrintJob в Cups4J?

В настоящее время у меня есть некоторые проблемы с использованием cups4j. Например, в Linux вы можете печатать на принтере для чашек следующим образом:

echo -e "test Text\\r" | lp -o raw -h <IP-ADRESS> -d <PRINTER-NAME>

Для меня важен флаг "-o raw".

Моя проблема при печати с cups4j, я не знаю, как установить этот флаг. Следующий исправленный рабочий код показывает мой метод, который печатает cups4j PrintJob на CupsPrinter.

private PrintRequestResult print(CupsPrinter printer, PrintJob job) throws Exception {
    return printer.print(job);
}

Опция -o raw описана здесь довольно хорошо:

Опция -o raw позволяет отправлять файлы напрямую на принтер без фильтрации. Это иногда требуется при печати из приложений, которые предоставляют собственные "драйверы принтера" для вашего принтера:

Как я уже сказал, сама печать работает как шарм, но я не знаю, как добавить этот конкретный флаг. Может быть, кто-то может описать мне, как это сделать.

1 ответ

Решение

Проанализировав пакеты, отправленные в CUPS через wireshark (я просто обожаю это) из терминала и java-программы, я обнаружил следующее, которое работает для меня:

CupsClient cupsClient = new CupsClient(IP, port);
URL url = new URL(printerName);
CupsPrinter cupsPrinter = cupsClient.getPrinter(url);
HashMap<String, String> map = new HashMap<>();
map.put("document-format", "application/vnd.cups-raw");
PrintJob printJob = new PrintJob.Builder(bytes).attributes(map).build();
PrintRequestResult printRequestResult = cupsPrinter.print(printJob);
Другие вопросы по тегам