Технические вопросы и ответы QA1568

Определение, способен ли принтер к выводу цвета.

Q: Как я определяю, может ли текущий принтер распечатать в цвете?

A: Как я определяю, может ли текущий принтер распечатать в цвете?

Не возможно окончательно определить, может ли принтер распечатать в цвете. Можно определить, объявляет ли PPD связанный принтер как способный цвет, но PPD не требуется, чтобы объявлять это. Альтернативно принтер может быть способен к цвету, но помещенный в полутоновый режим пользователем. Наконец, не обычно возможно определить, может ли нецветной принтер произвести полутоновый вывод.

Можно определить, полагает ли PPD, что принтер способен к цвету путем поиска *ключевое слово ColorDevice в файле PPD принтера. Расширения Диалогового окна принтера (PDEs) могут получить соответствующий PPD для текущего принтера при помощи -ppdFile метод обратного вызова возражает, что им дают, когда инициализировано. Фильтры CUPS могут получить путь к файлу PPD для текущего принтера от PPD переменная окружения.

Перечисление 1 ниже шоу, как сделать это с точки зрения приложения.

При использовании цветной поддержки, чтобы влиять, как представить печатный вывод, необходимо всегда предоставлять метод пользователю для переопределения начального выбора.

Перечисление 1  , Определяющее, объявляет ли PPD ColorDevice

bool isPrinterColor(PMPrinter printer)
{
    bool isColor = true;
    CFURLRef ppdURL = NULL;
    OSStatus err = PMPrinterCopyDescriptionURL(printer, kPMPPDDescriptionType, &ppdURL);
    if((err == noErr) && (ppdURL != NULL))
    {
        char ppdPath[MAXPATHLEN];
        if(CFURLGetFileSystemRepresentation(ppdURL, true, (UInt8*)ppdPath, sizeof(ppdPath)))
        {
            ppd_file_t *ppd = ppdOpenFile(ppdPath);
            if(ppd != NULL)
            {
                ppd_attr_t *attr = ppdFindAttr(ppd, "ColorDevice", NULL);
                if((attr != NULL) && (attr->value != NULL))
                {
                    isColor  = ppd->color_device;
                }
                ppdClose(ppd);
            }
        }
        CFRelease(ppdURL);
    }
    return isColor;
}

Приложения какао должны использовать NSPrintInfo PMPrintSession метод для получения PMPrintSession затем вызовите PMSessionGetCurrentPrinter получить ссылку PMPrinter, необходимую для isPrinterColor выше.



История версии документа


ДатаПримечания
24.09.2009

Новый документ, описывающий эвристику, которую можно использовать, чтобы определить, поддерживает ли принтер вывод цвета.