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