2012-12-18 16 views
5

posso tranquillamente aprire un file PDF in path con Preview.app da dentro il mio applicazione utilizzandoÈ possibile aprire PDF con Preview.app su una determinata pagina?

[NSWorkspace.sharedWorkspace openFile: path]; 

Tuttavia, vorrei lanciare Preview.app con quel file ad una certa pagina. È possibile, ad es. passando una specifica NSAppleEventDescriptor in

- (BOOL)openURLs:(NSArray *)urls withAppBundleIdentifier:(NSString *)bundleIdentifier options:(NSWorkspaceLaunchOptions)options additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor launchIdentifiers:(NSArray **)identifiers 

metodo s' NSWorkspace? QuickLook può farlo e mi piacerebbe imitare questo comportamento.

Grazie per qualsiasi aiuto!

+0

Anteprima non ha dizionario AppleScript, quindi probabilmente non sarà facile capire come QuickLook lo fa. – JWWalker

risposta

3

È possibile farlo tramite NSAppleScript.

Ecco un metodo di categoria NSWorkspace che si apre il file e passa alla pagina specificata:

- (void)openPreviewFile:(NSString*)filePath onPage:(int)pageNumber { 
    [self openFile:filePath]; 

    NSString *sysEvents = @"System Events"; 

    NSString *source = [NSString stringWithFormat:@"tell application \"%@\" to activate\ntell application \"%@\" to keystroke \"g\" using {command down, option down}\ndelay %f\ntell application \"%@\" to keystroke \"%i\"\ntell application \"%@\" to keystroke return", 
         @"Preview", sysEvents, 0.5, sysEvents, pageNumber, sysEvents]; 

    NSAppleScript *script = [[[NSAppleScript alloc] initWithSource:source] autorelease]; 
    [script executeAndReturnError:nil]; 
} 

Ecco ciò che fa:

  • chiamata openFile: su un'istanza NSWorkspace
  • Aprire il Vai alla finestra di dialogo di anteprima
  • Attendi il pop-up della finestra di dialogo
  • Simu tardi la pressione di un tasto della pagina che dovrebbe ottenere attivato, quindi premere il ritorno

È quindi possibile chiamare il metodo in questo modo:

[[NSWorkspace sharedWorkspace] openPreviewFile:@"/YOUR_PDF.pdf" 
             onPage:3]; 

responsabilità: questo si rompe se l'utente definisce una scorciatoia da tastiera personalizzata per la voce di menu "Vai alla pagina ..."!

Problemi correlati