如何直接从 macOS 应用程序打印显示打印对话框的 PDF 文件?

问题描述 投票:0回答:2

我希望能够显示 macOS 打印对话框,以便直接从我的应用程序打印 PDF 文件。有办法做到这一点吗?

以下是一些不太符合我需求的解决方案:

  • 我可以使用 AppleScript 要求预览应用程序打开 PDF 文件并显示打印对话框。这非常接近。问题是 用户可以看到预览窗口中显示的文档 打印对话框打开。我希望打印对话框是 显示在我的应用程序上或单独显示。

  • 我可以使用各种终端命令来打印 PDF 文件,而无需任何操作 用户交互。问题是我希望用户能够 与打印对话框交互。

  • 我可以使用 AppKit 打印 API 从我的应用程序显示打印对话框。问题是我看到实际打印内容的唯一方法是将其呈现在视图中。

macos pdf printing
2个回答
1
投票

我不确定我是否理解您在使用 AppKit 打印 API 时遇到的问题。 以下代码片段将为您提供一个没有文档视图的打印对话框。

    Boolean accepted = true;

    NSPrintInfo *thePrintInfo = [NSPrintInfo sharedPrintInfo];

    [NSApplication sharedApplication];
    NSPrintPanel *printPanel = [NSPrintPanel printPanel];
    accepted = [printPanel runModalWithPrintInfo: thePrintInfo];

0
投票

您只需从

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()
    }
© www.soinside.com 2019 - 2024. All rights reserved.