我正在开发一个OSX项目,用户可以从中选择需要生成PDF的文档集合(来自任何应用程序)。标准的Macintosh打印对话框有一个PDF按钮,其中有许多与PDF相关的命令,包括“另存为PDF ...”。但是,我需要生成PDF文件而无需用户交互。我理想的是希望这可以用于任何类型的文档。如何以编程方式从OSX上的任何文档生成PDF?
这里是我到目前为止探索的选项:
- Automator动作。有一个用于Automator的PDF库,但它提供了处理PDF文件的操作,而不是生成它们。 Finder有一个打印任何文件的动作,但只能打印一个真实的打印机。
- AppleScript。某些应用程序可以生成PDF文件(例如,如果您将'doc.pdf'中的doc保存到Pages中,它将生成PDF(但这仅适用于Pages) - 我需要支持任何类型的文档) 。
- 自定义的打印机。我可以创建一个虚拟打印机驱动程序,然后使用Automator的行动,但我不喜欢在打印列表中的一个额外的打印机混淆用户的想法。
我希望有一些方法可以与活动应用程序交互,就好像用户正在执行以下步骤一样:
- Do Cmd-P(打开打印对话框)
- 点击 “PDF” 按钮
- 选择 “另存为PDF ...”(在菜单的第二项)
- 键入文件名在保存对话框
- 点击 “保存”
如果这是最好的方法(是吗?),那么真正的问题是:我如何将UI事件发送到外部应用程序(击键,鼠标事件,菜单选择)?
更新:我只想澄清一点:我需要转换为PDF文件是由其他应用创建的文档。例如,用户可能会选择Word文档或Numbers电子表格或OmniGraffle绘图或Web页面。共同点是每个文档都有一个关联的应用程序,并且该应用程序知道如何打印它(并且OSX知道如何将打印输出呈现为PDF文件)。
因此,可可开发中心的样本并没有帮助,因为它们是从我的应用程序生成PDF。
谢谢!那正是我正在寻找的指针。 – 2008-11-10 09:51:06
-1这似乎是一个好方法,如果你打开Safari浏览器中的一个文件,但我敢肯定,你不想正确的代码为每一种可能的应用 – mcgrailm 2010-12-13 15:19:50