我有一种情况,我想打印多页 PDF。虽然我可以使用 PDFKit 实用程序类和/或石英函数来获取信息以手动为 NSView 子类编写绘图/分页代码,但我认为更快的替代方法是创建一个屏幕外 PDFView 并告诉它自己打印. 当我尝试这个解决方案时,打印对话框并没有消失,打印对话框右半部分的所有打印设置控件都消失了,应用程序冻结了。
然后,我使用以下方法编写了一个小型测试应用程序来说明问题。在未定义 USE_PDF_VIEW 预处理器宏的情况下编译测试程序时,空白视图显示正常。如果定义了 USE_PDF_VIEW,则不会打印文档,大多数打印对话框控件都会消失,并且应用程序会冻结。虽然我有其他方法可以实现我的目标,但我很好奇为什么这条捷径不起作用。可可绘画有什么我仍然不明白的地方吗?我是否在幕后使用 Apple Voodoo Magic(tm) 使 PDFView 的行为方式与其他 NSView 完全不同?
- (void)printMyStuff:(id)sender {
NSPrintInfo *currInfo = [NSPrintInfo sharedPrintInfo];
#ifdef USE_PDF_VIEW
PDFView *pdfView = [[PDFView alloc] init];
PDFDocument *pdfDoc = [[PDFDocument alloc] initWithURL:[NSURL fileURLWithPath:@"/Users/wls/Documents/my_document.pdf"]];
[pdfView setDocument: pdfDoc];
[pdfView printWithInfo:currInfo autoRotate:YES];
#else
NSView *myView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 500, 500)];
NSPrintOperation *myop = [NSPrintOperation printOperationWithView:myView printInfo:currInfo];
[myop runOperation];
#endif
}