Imprimir PDFViews fora da tela
Eu tenho uma situação onde eu quero imprimir um PDF de várias páginas. Embora eu pudesse usar as classes de utilitário PDFKit e / ou quartzo para obter as informações para escrever manualmente código de desenho / paginação para uma subclasse NSView, pensei que uma alternativa mais rápida seria criar um PDFView fora da tela e dizer para ele se imprimir . Quando tentei essa solução, a caixa de diálogo de impressão não desapareceu, todos os controles de configurações de impressão na metade direita da caixa de diálogo de impressão desapareceram e o aplicativo congelou.
Em seguida, escrevi um pequeno aplicativo de teste com o seguinte método que ilustra o problema. Quando o programa de teste é compilado sem a macro de pré-processador USE_PDF_VIEW definida, a exibição em branco é exibida corretamente. Se USE_PDF_VIEW for definido, o documento não será impresso, a maioria dos controles da caixa de diálogo de impressão desaparecerá e o aplicativo congelará. Embora eu tenha outras formas de atingir meu objetivo, estou curioso para saber por que esse atalho não funciona. Há algo sobre o desenho de cacau que ainda não entendi? Estou batendo no Apple Voodoo Magic (tm) nos bastidores que faz o PDFView se comportar de uma maneira completamente diferente de outros NSViews?
- (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
}