複数ページのPDFを印刷したいという状況があります。PDFKitユーティリティクラスやクォーツ関数を使用して、NSViewサブクラスの描画/ページネーションコードを手動で記述するための情報を取得することはできますが、より迅速な代替策は、画面外のPDFViewを作成し、それ自体を印刷するように指示することだと考えていました。 。この解決策を試したところ、印刷ダイアログが消えず、印刷ダイアログの右半分にあるすべての印刷設定コントロールが消え、アプリケーションがフリーズしました。
次に、問題を説明する次の方法で小さなテストアプリケーションを作成しました。USE_PDF_VIEWプリプロセッサマクロを定義せずにテストプログラムをコンパイルすると、空白のビューが正常に表示されます。USE_PDF_VIEWが定義されている場合、ドキュメントは印刷されず、ほとんどの印刷ダイアログコントロールが消え、アプリがフリーズします。目標を達成する方法は他にもありますが、なぜこのショートカットが機能しないのか興味があります。ココアの絵について、まだわからないことがありますか?PDFViewを他のNSViewとはまったく異なる方法で動作させる舞台裏でAppleVoodooMagic(tm)を叩いていますか?
- (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
}