我希望能够显示 macOS 打印对话框,以便直接从我的应用程序打印 PDF 文件。有办法做到这一点吗?
以下是一些不太符合我需求的解决方案:
我可以使用 AppleScript 要求预览应用程序打开 PDF 文件并显示打印对话框。这非常接近。问题是 用户可以看到预览窗口中显示的文档 打印对话框打开。我希望打印对话框是 显示在我的应用程序上或单独显示。
我可以使用各种终端命令来打印 PDF 文件,而无需任何操作 用户交互。问题是我希望用户能够 与打印对话框交互。
我可以使用 AppKit 打印 API 从我的应用程序显示打印对话框。问题是我看到实际打印内容的唯一方法是将其呈现在视图中。
我不确定我是否理解您在使用 AppKit 打印 API 时遇到的问题。 以下代码片段将为您提供一个没有文档视图的打印对话框。
Boolean accepted = true;
NSPrintInfo *thePrintInfo = [NSPrintInfo sharedPrintInfo];
[NSApplication sharedApplication];
NSPrintPanel *printPanel = [NSPrintPanel printPanel];
accepted = [printPanel runModalWithPrintInfo: thePrintInfo];
您只需从
NSPrintOperation
中抓取 PDFDocument
,然后创建一个 NSPrintInfo
来使用它。这是 Swift 中的示例:
import Foundation
import PDFKit
// ...
if let doc = PDFDocument(url: myFileURL) {
let printInfo = NSPrintInfo()
printInfo.topMargin = 0;
printInfo.bottomMargin = 0;
printInfo.leftMargin = 0;
printInfo.rightMargin = 0;
printInfo.horizontalPagination = .fit
printInfo.verticalPagination = .fit
let scalingMode = PDFPrintScalingMode.pageScaleDownToFit
let op = doc.printOperation(for: printInfo, scalingMode: scalingMode, autoRotate: true)
op?.showsPrintPanel = true
op?.showsProgressPanel = true
op?.run()
}