Это лучший способ получить размер бумаги через CUPS? - PullRequest
1 голос
/ 20 марта 2010

У меня есть файл управления заданиями CUPS (его можно найти в / var / spool / cups / cnnnnn). Мне нужно узнать фактические размеры отпечатка.

Вот как я это понял:

  1. Получите название бумаги, используя атрибут media. (например, Letter)
  2. Получить URI принтера из атрибута printer-uri. (например, ipp://localhost/printers/MyPrinter)
  3. Получите имя принтера, передав uri принтера операции IPP_GET_PRINTER_ATTRIBUTES и получив атрибут printer-name. (например, MyPrinter)
  4. Получить путь к PPD, передав имя принтера методу cupsGetPPD.
  5. Откройте PPD, передав путь к PPD методу ppdOpenFile.
  6. Получите размер бумаги, передав PPD и имя бумаги методу ppdPageSize.

Это будет работать, но, кажется, немного окольным. Есть ли более эффективный способ получить то, что мне нужно?

Ответы [ 2 ]

1 голос
/ 24 июня 2010

Файл управления заданиями будет содержать все параметры задания файла, используемого для печати. Есть 3 типа работы:

  1. те, которые были специально и явным образом выбраны пользователем в командной строке или нажатием некоторых элементов графического интерфейса (они появятся в управляющих файлах);
  2. те, которые были неявно установлены, потому что они содержатся и читаются из пользовательского ~/.lpoptions или общесистемного /etc/cups/lpoptions файла (пользовательский файл был перенесен в ~/.cups/lpoptions в более поздних версиях CUPS (они также появятся в контрольных файлах);
  3. те, которые были добавлены CUPS путем анализа PPD и поиска содержащихся в них настроек по умолчанию (эти не появятся в контрольных файлах, поскольку CUPS оценивает их только в момент выполнения задания - это может быть 2 дня в будущем, если вы использовали -o job-hold-until=indefinite.

Если вам известно имя printqueuen и используемый cupsserver, вы можете запросить параметры очереди по умолчанию для этой комбинации с помощью этих двух команд:

lpoptions -h cupsserver \
          -U username \
          -d printqueuename

Это вернет все текущие настройки, как отмечено в (.)loptions файлах.

lpoptions -h cupsserver \
          -U username \
          -d printqueuename \
          -l

Это вернет все пользовательские настройки, содержащиеся в PPD. Обратите внимание, что звездочками * отмечены настройки по умолчанию для каждой опции. Также обратите внимание, что -U username здесь важно - разные пользователи могут использовать разные настройки по умолчанию ...

Теперь следите за результатами этих команд, отмечая PageSize used ...

0 голосов
/ 31 марта 2010

На самом деле вы можете использовать запрос CUPS_GET_PPD, чтобы получить ppd напрямую вместо шагов 3 и 4. Это кажется более эффективным.

...