1

我正在研究一个小框架,我需要获取所有可用自定义论文的列表

核心打印参考中只有一个名为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中。

有任何想法吗?谢谢

编辑1:

这是基于第一个答案的片段:

        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;
    }

但我只得到“普通”文件的列表,没有自定义文件。

在打印对话框中,我创建了一个自定义纸张(见屏幕截图),它应该在列表中。

截屏:

截图

4

2 回答 2

1

它可能PMSessionCreatePageFormatList()用于获取所有页面格式,枚举它们,并为每一个调用PMGetPageFormatPaper()获取其论文。您可以使用PMPaperIsCustom()来确定每张纸是否都是自定义纸张。

于 2016-03-02T08:51:40.737 回答
1

由于自定义论文列表显然(当前)无法通过 Core Printing 和 Cocoa Printing 访问……</p>

可以使用 Objective-C 读取存储用户创建的自定义论文字典的 plist:

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

然后,根据需要使用后续使用PMPaperCreateCustom

于 2017-07-10T17:03:51.187 回答