我正在为OSX项目工作,其中用户可以选择一组文档(从任何应用程序),我需要从中生成PDF。标准的Macintosh打印对话框有一个PDF按钮,其中包括许多与PDF相关的命令,包括“另存为PDF...”。但是,我需要在不需要用户交互的情况下生成PDF文件。我希望这可以使用任何类型的文档。
到目前为止,我探索过的选项如下:
- Automator动作。Automator有一个PDF库,但它提供用于处理PDF文件而不是生成PDF文件的动作。有一个Finder操作可将任何文件打印到实际打印机上,但只限于实际打印机。
- AppleScript。某些应用程序具有生成PDF文件的功能(例如,如果您向Pages发送“save doc in“test.pdf””,它将生成PDF文件(但这仅适用于Pages - 我需要支持任何类型的文档)。
- 自定义打印机。我可以创建虚拟打印机驱动程序,然后使用Automator操作,但我不喜欢在打印列表中添加额外的打印机会让用户感到困惑。
我的希望是,有一种方法可以与活动应用程序交互,就像用户执行以下步骤一样:
- 按Cmd-P(打开打印对话框)
- 单击“PDF”按钮
- 选择“另存为PDF...”(菜单中的第二项)
- 在保存对话框中键入文件名
- 单击“保存”
如果这是最好的方法(是吗?),那么真正的问题是:如何向外部应用程序发送UI事件(按键,鼠标事件,菜单选择)?
更新:仅澄清一点:我需要转换为PDF的文档是由其他应用程序创建的文档。例如,用户可以选择Word文档、Numbers电子表格、OmniGraffle图纸或Web页面。它们的共同点是每个文档都有一个关联的应用程序,该应用程序知道如何打印它(且OSX知道如何将打印输出呈现为PDF文件)。
所以,Cocoa Dev Central上的示例不起作用,因为它们是关于从我的应用程序生成PDF。