目前我正在为OSX编写一个最终需要移植到iOS的应用程序。
需要打印的数据正在通过CoreGraphics绘制到PDF上下文中 - 这是完美的。
我一直在阅读关于iOS和OSX打印的Apple开发文档,具有讽刺意味的是,它实际上似乎从iOS打印会更容易。
在iOS上,UIPrintInteractionController的printingItem
属性可以获取包含PDF数据的NSData对象并打印出来。看起来应该是相当简单的。
+printOperationWithView:
或+printOperationWithView:printInfo:
)。
看到内容已格式化并已分页,将PDF数据重新绘制为类似NSView的内容似乎毫无意义。
可能有另一种方法可以实现这一点,我错过了吗?
答案 0 :(得分:3)
这段代码并不完整,但对于后来遇到这种情况的人来说,这基本上就是如何直接从NSData流中打印出来的:
#define kMimeType @"application/pdf"
#define kPaperType @"A4"
- (void)printData:(NSData *)incomingPrintData {
CFArrayRef printerList; //will soon be an array of PMPrinter objects
PMServerCreatePrinterList(kPMServerLocal, &printerList);
PMPrinter myPrinter;
//iterate over printerList and determine which one you want, assign to myPrinter
PMPrintSession printSession;
PMPrintSettings printSettings;
PMCreateSession(&printSession);
PMCreatePrintSettings(&printSettings);
PMSessionDefaultPrintSettings(printSession, printSettings);
CFArrayRef paperList;
PMPrinterGetPaperList(myPrinter, &paperList);
PMPaper usingPaper;
//iterate over paperList and to set usingPaper to the paper desired
PMPageFormat pageFormat;
PMCreatePageFormatWithPMPaper(&pageFormat, usingPaper);
CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((CFDataRef)incomingPrintData);
PMPrinterPrintWithProvider(myPrinter, printSettings, pageFormat, (CFStringRef)kMimeType, dataProvider);
}
(通过Core Printing Reference)
请注意,此代码缺少内存管理,因此您还需要使用PMRetain()
和PMRelease()
函数以及CoreFoundation内存管理函数。
如果有人能告诉我如何将OSX打印对话框中的数据转换为我可以在此方法中使用的数据,我将接受他们的答案,而不是这个。也就是说,不使用碳功能。