Как получить все доступные Paper Feed и как их изменить в NSPrintInfo obj - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь установить подачу бумаги в объекте NSPrintInfo

В настоящее время я получаю параметры подачи бумаги (теперь уже в лотках) из вызова IPP

ipp_t *request;

request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer_uri);
respose = cupsDoRequest(http, request, "/");
...

string trays = ippGetString(ippFindAttribute(response, "media-source-supported", IPP_TAG_KEYWORD), 0, NULL);

Это возвращает мне разделенную запятыми строку с лотками принтера, например: auto,top,manual,tray-1

Вопрос 1: Есть ли другой способ получить поддерживаемые лотки с данного принтера ? (Если текст локализован, было бы лучше)

После этого, чтобы установить подачу бумаги в объект NSPrintInfo, я попробовал:

Опция 1

NSPrintInfo *printInfo; 
// Initialization of printInfo and others...
PMPrintSettingsSetValue([printInfo PMPrintSettings], kPMPrimaryPaperFeedKey, (__bridge CFTypeRef _Nullable)(@<TRAY INDEX>), false);

Проблема в том, что я не знаю, что такое индексный лоток. Я предположил связь между выводом IPP и массивом с 0 индексами (0=auto, 1=top, 2=manual, 3=tray-1), поэтому я поместил вывод IPP в упорядоченный массив, но он не работает.

Вариант 2

NSPrintInfo *printInfo;
// Initialization of printInfo and others...
[[printInfo printSettings]setObject:@"<TRAY NAME>", forKey:@"InputSlot"];

Проблема в том, что я не могу получить «правильную» строку в трее (см. Скриншот)

Как видите, нет никакой связи между выводом IPP, локализованным текстом (в диалоге принтера) и тем, что диалог принтера записывает в NSPrintInfo (эквивалент: top = Cassette = Upper)

( NOTE Я должен сделать это по коду, я не могу использовать ни одно диалоговое окно ОС)

...