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, ¤tPaper);
if (error != noErr)
{
// TODO
}
if (PMPaperIsCustom(currentPaper))
{
NSLog(@"It's custom");
}
}
break;
}
currentPrinter = NULL;
}
Но я получаю только список "нормальных" бумаг и никаких пользовательских.
В диалоговом окне печати я создал собственную бумагу (см. Скриншот), и это должно быть в списке.
Скриншот:
2 ответа
Поскольку список пользовательских документов, по-видимому, (в настоящее время) недоступен через Core Printing и Cocoa Printing …
Можно использовать Objective-C, чтобы прочитать список, в котором хранится словарь пользовательских документов, созданных пользователем:
~ / Library / Preferences / com.apple.print.custompapers.plist
Затем используйте впоследствии использовать PMPaperCreateCustom
по мере необходимости.
Это может работать, чтобы использовать PMSessionCreatePageFormatList()
чтобы получить все форматы страниц, перечислить их, и, для каждого, вызвать PMGetPageFormatPaper()
чтобы получить его бумагу. Ты можешь использовать PMPaperIsCustom()
чтобы узнать, является ли каждый заказной бумагой.