gpt4 book ai didi

objective-c - 不使用 NSView 进行打印

转载 作者:行者123 更新时间:2023-12-03 16:33:39 24 4
gpt4 key购买 nike

目前我正在为 OSX 编写一个应用程序,最终需要移植到 iOS。

需要打印的数据通过 CoreGraphics 绘制到 PDF 上下文中 - 工作完美。

我一直在阅读有关 iOS 和 OSX 中打印的 Apple 开发文档,具有讽刺意味的是,实际上从 iOS 进行打印似乎会更容易。

在 iOS 上,UIPrintInteractionControllerprintingItem 属性可以获取包含 PDF 数据的 NSData 对象并打印该对象。看起来应该相当简单。

另一方面,OSX(看起来像)需要使用 NSPrintOperation class - 但似乎将数据获取到实例的唯一方法是通过 NSView。 (+printOperationWithView:+printOperationWithView:printInfo:)。

由于内容已经格式化并分页,因此必须将 PDF 数据重新绘制为 NSView 之类的内容似乎毫无意义。

是否有可能有另一种我错过的方法来实现这一目标?

最佳答案

此代码绝不完整,但对于稍后遇到此代码的任何人来说,这基本上是直接从 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 打印对话框获取数据到我可以在这种方法中使用的数据,我会接受他们的答案而不是这个。也就是说,不使用 Carbon 函数。

关于objective-c - 不使用 NSView 进行打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4881635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com