Objective-C получить список всех пользовательских документов

Я работаю над небольшой структурой, и мне нужно получить список всех доступных пользовательских документов

В базовой справке по печати есть только метод PMPrinterGetPaperList, но он не возвращает пользовательскую бумагу:

This function obtains a list of the papers that a given printer claims to support.
The paper list does not include any custom paper sizes that may be available

Если я открою PDF-документ, а затем открою диалоговое окно печати, я могу создать и выбрать пользовательские документы.

В качестве резюме я хочу получить список пользовательских документов, которые я могу создать с помощью print-dialog и метода Objective-C PMPaperCreateCustom

Это должно быть в Objective-C.

Есть идеи? Спасибо

Edit1:

Вот фрагмент, основанный на первом ответе:

        for (int i = 0; i < printerCount; i++)
    {
        CFStringRef currentPrinterName;
        currentPrinter = (PMPrinter) CFArrayGetValueAtIndex(printerList, i);
        currentPrinterName = PMPrinterGetName(currentPrinter);

        if ([(NSString *) currentPrinterName caseInsensitiveCompare:printerName] == NSOrderedSame)
        {
            error = PMSessionCreatePageFormatList([[NSPrintInfo sharedPrintInfo] PMPrintSession], currentPrinter, &pageFormatList);

            if (error != noErr)
            {
                // TODO
            }

            NSUInteger pageCount = CFArrayGetCount(pageFormatList);

            for (int n = 0; n < pageCount; n++)
            {
                currentPage = (PMPageFormat) CFArrayGetValueAtIndex(pageFormatList, n);

                error = PMGetPageFormatPaper(currentPage, &currentPaper);

                if (error != noErr)
                {
                    // TODO
                }

                if (PMPaperIsCustom(currentPaper))
                {
                    NSLog(@"It's custom");
                }
            }

            break;
        }

        currentPrinter = NULL;
    }

Но я получаю только список "нормальных" бумаг и никаких пользовательских.

В диалоговом окне печати я создал собственную бумагу (см. Скриншот), и это должно быть в списке.

Скриншот:

Скриншот xcode

2 ответа

Поскольку список пользовательских документов, по-видимому, (в настоящее время) недоступен через Core Printing и Cocoa Printing …

Можно использовать Objective-C, чтобы прочитать список, в котором хранится словарь пользовательских документов, созданных пользователем:

~ / Library / Preferences / com.apple.print.custompapers.plist

Затем используйте впоследствии использовать PMPaperCreateCustom по мере необходимости.

Это может работать, чтобы использовать PMSessionCreatePageFormatList() чтобы получить все форматы страниц, перечислить их, и, для каждого, вызвать PMGetPageFormatPaper() чтобы получить его бумагу. Ты можешь использовать PMPaperIsCustom() чтобы узнать, является ли каждый заказной бумагой.

Другие вопросы по тегам