标签: applescript

如何以编程方式从OSX上的任何文档生成PDF?

我正在为OSX开发一个项目,用户可以从中选择我需要生成PDF文档的文档集合(来自任何应用程序).标准的"Macintosh打印"对话框有一个PDF按钮,其中包含许多与PDF相关的命令,包括"另存为PDF ...".但是,我需要生成PDF文件而无需用户交互.理想情况下,我希望这适用于任何类型的文档.

这是我到目前为止探讨的选项:

  • Automator动作.有一个用于Automator的PDF库,但它提供了处理PDF文件的操作,而不是生成它们.有一个Finder操作可以打印任何文件,但只能打印到真正的打印机.
  • AppleScript的.某些应用程序能够生成PDF文件(例如,如果您将'save doc in"test.pdf"'发送到Pages,它将生成PDF(但这仅适用于Pages - 我需要支持任何类型的文档) .
  • 定制打印机.我可以创建一个虚拟打印机驱动程序,然后使用自动机操作,但我不喜欢在打印列表中将用户与额外的打印机混淆的想法.

我希望有一些方法可以与活动应用程序进行交互,就像用户执行以下步骤一样:

  1. 做Cmd-P(打开打印对话框)
  2. 单击"PDF"按钮
  3. 选择"另存为PDF ..."(菜单中的第二项)
  4. 在保存对话框中键入文件名
  5. 点击"保存"

如果这是最好的方法(是吗?)那么真正的问题是:如何将UI事件发送到外部应用程序(击键,鼠标事件,菜单选择)?

更新:只是澄清一点:我需要转换为PDF的文档是由其他应用程序创建的文档.例如,用户可能会选择Word文档或Numbers电子表格或OmniGraffle绘图或网页.常见的分母是这些文档中的每一个都有一个相关的应用程序,该应用程序知道如何打印它(OSX知道如何将打印输出呈现为PDF文件).

因此,Cocoa Dev Central的样本没有帮助,因为它们是关于从我的应用程序生成PDF .

pdf macos applescript objective-c automator

18
推荐指数
1
解决办法
7076
查看次数

用AppleScript打开程序

2部分问题:

我只是试图使用终端上的AppleScript来运行程序,所以我尝试了:

$ osascript tell application "iTunes" to activate
Run Code Online (Sandbox Code Playgroud)

并得到错误:

osascript: tell: No such file or directory
Run Code Online (Sandbox Code Playgroud)

提供该计划的完整途径也不起作用.我错过了什么?问题的第二部分是我最终想要使用applescript的内容.我想用它来打开我使用py2app构建的应用程序.Apple可以打开任何mac应用程序或只是已经兼容的某些应用程序.

谢谢

applescript

18
推荐指数
5
解决办法
7万
查看次数

如何使用给定的进程ID激活Mac OS X应用程序?

我知道Mac OS X中应用程序的进程ID.如何切换到它(使用applescript,python或其他)?

通过"切换",我的意思是,重点关注.

通常的解决方案是使用applescript代码tell application "Foo" activate,但这里名称没用,因为我有许多同一个应用程序运行的实例.然而,我能够获得应用程序的进程ID.

如何以编程方式切换到此应用程序?

macos applescript

17
推荐指数
2
解决办法
8033
查看次数

邮件"无法继续"AppleScript功能

我正在尝试编写AppleScript以与Mail(在Snow Leopard上)一起使用,以将邮件的图像附件保存到文件夹中.AppleScript的主要部分是:

property ImageExtensionList : {"jpg", "jpeg"}
property PicturesFolder : path to pictures folder as text
property SaveFolderName : "Fetched"
property SaveFolder : PicturesFolder & SaveFolderName

tell application "Mail"
  set theMessages to the selection
  repeat with theMessage in theMessages
    repeat with theAttachment in every mail attachment of theMessage
      set attachmentFileName to theAttachment's name
      if isImageFileName(attachmentFileName) then
        set attachmentPathName to SaveFolder & attachmentFileName
        save theAttachment in getNonexistantFile(attachmentPathName)
      end if        
    end repeat
  end repeat
end tell

on isImageFileName(theFileName)
  set dot to offset …
Run Code Online (Sandbox Code Playgroud)

email applescript

17
推荐指数
2
解决办法
3972
查看次数

Xcode 4中的"选择中的行排序"

我喜欢Textmate的"选择中的排序行"功能.Xcode 4有类似的东西吗?如果没有,那么整合这样一个功能(插件,Applescript,......)的最佳方法是什么?

sorting xcode plugins applescript textmate

17
推荐指数
1
解决办法
3447
查看次数

通过Ruby避免AppleScript:rb-appscript或rubyosa?

您好Mac Mac ruby​​ists和AppleScript仇恨,

对于那些有rubyosa和rb-appscript经验的人,我希望听到每个人的优点和缺点,你决定坚持哪一个,以及你推荐哪一个完全非AppleScript精明的人红宝石老人.此外,还有其他任何我错过的选择吗?

另外,任何处理AppleScript方面的提示(例如浏览词典等)也是受欢迎的.

看到一些示例代码也有很大帮助.

ruby macos applescript rb-appscript rubyosa

16
推荐指数
2
解决办法
6865
查看次数

使用Applescript通过特定的完整路径"告诉"特定的应用程序

我想告诉应用程序"xyz",但通过指定应用程序的完整路径.这是因为系统上的应用程序可能存在不同版本,但名称相同.如果这可能吗?

applescript tell

16
推荐指数
2
解决办法
8404
查看次数

如何以编程方式为任务控制添加空间?

我想创建一个新的空间(也可以在以后删除它),而不必通过标准的misson控件gui.有没有办法以编程方式执行此操作?通过终端命令,applescript或一些可可?

macos cocoa applescript spaces mission-control

16
推荐指数
1
解决办法
2482
查看次数

AppleEvents:进程的发送端口没有发送权限

我在我的Mac OS X Yosemite控制台中看到了这个:

AppleEvents: Send port for process has no send right, 
port=( port:30743/0x7817 rcv:1,send:0,d:0 limit:5)    
(findOrCreate()/AEMachUtils.cp #526) 
com.apple.NSXPCConnection.user.1963
Run Code Online (Sandbox Code Playgroud)

我正在开发一个XPC服务,它处理来自Mac OS App运行在同一个客户端上的客户端的进程间通信Mac.

显然错误来自:

(findOrCreate()方法/AEMachUtils.cp#526(Line#?)

XPC服务接收请求并调用正确的方法来处理这个请求,但每次我看到上面的警告.@protocol是:

 - (oneway void)doService:(NSString *)aString withReply:(void (^)(NSString *))reply;
Run Code Online (Sandbox Code Playgroud)

我再也没有看到回复NSString.- (单程void)是否与此有关?该错误出现在服务的Console跟踪stderrXPC.错误是说我需要赋予发件人进程权限吗?如果是这样的话?

在此先感谢您的考虑.此致,AK

macos applescript xpc objective-c

16
推荐指数
1
解决办法
864
查看次数

使用AppleScript从Web浏览器中最前面的窗口中获取URL:最终列表

我构建了一个[widget] [1],它从Safari中最前面的窗口抓取URL,然后允许你使用tr.im API缩短它.工作甜美如.

我想让它更灵活,所以我正在研究如何从其他浏览器中获取URL.这是在Safari中运行的AppleScript:

tell application "Safari"
    return URL of front document as string
end tell
Run Code Online (Sandbox Code Playgroud)

经过一番挖掘后,我确定以下内容可能适用于Firefox(虽然有人告诉我它对他不起作用,可能与某些扩展冲突?):

tell application "Firefox"
    set myFirefox to properties of front window as list
    return item 3 of myFirefox
end tell
Run Code Online (Sandbox Code Playgroud)

注意:上面是一个不太好的做法的例子,依赖于列表项的位置.请参阅下面的Firefox更好的解决方案.

我想做的是在这里建立一个列表,列出Mac上每个现代浏览器的最终等价物:Opera,Camino,Flock等.

更新:在我对这个主题的研究中,我在MacOSXHints.com上遇到了一个有用的主题.我下面的大部分答案都是基于这个讨论.

更新2:我已将此页面上的AppleScript合并到[widget] [1]中.它似乎工作膨胀.

safari firefox applescript camino flock

15
推荐指数
1
解决办法
1万
查看次数