是否可以在特定页面上使用Preview.app打开PDF?

时间:2012-12-18 20:38:33

标签: macos cocoa

我很高兴使用

在我的应用程序中使用Preview.app在path打开PDF文件
[NSWorkspace.sharedWorkspace openFile: path];

但是,我想在某个页面上使用该文件启动Preview.app。这是可能的,例如通过在NSAppleEventDescriptor

中传递特定的NSWorkspace
- (BOOL)openURLs:(NSArray *)urls withAppBundleIdentifier:(NSString *)bundleIdentifier options:(NSWorkspaceLaunchOptions)options additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor launchIdentifiers:(NSArray **)identifiers

方法? QuickLook可以做到这一点,我想模仿这种行为。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您可以通过NSAppleScript执行此操作。

这是一个NSWorkspace类别方法,它打开文件并跳转到指定的页面:

- (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];
}

这就是它的作用:

  • 在NSWorkspace实例上调用openFile:
  • 打开预览
  • 的“转到页面”对话框
  • 等待对话框弹出
  • 模拟应激活的页面的按键,然后按返回

然后您可以像这样调用方法:

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

免责声明:如果用户为“转到页面...”菜单项定义了自定义键盘快捷键,则会中断!