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