0

我有一个显示 的应用程序PDFView,我希望它从视图中打印 PDF 文件。此外,我希望打印面板显示页面设置附件(即纸张大小、方向和比例设置,如预览中一样,显示为选项下拉列表的一个面板)。

目前,我错误地打印了PDFView,而不是 PDF 文档本身。这只会给我一页,并在打印输出中包含滚动条!我看不到如何init引用NSPrintOperationaPDFDocument而不是PDFView.

这是我的代码,它有效,但不是我想要的。我想我必须用定义面板和信息的类似代码覆盖printDocumentprintOperation函数。NSDocument

func thePrintInfo() -> NSPrintInfo {
    let thePrintInfo = NSPrintInfo()
    thePrintInfo.horizontalPagination = .automatic // Tried fit
    thePrintInfo.verticalPagination = .automatic // Tried fit
    thePrintInfo.isHorizontallyCentered = true // Tried false
    thePrintInfo.isVerticallyCentered = true // Tried false
    thePrintInfo.leftMargin = 0.0
    thePrintInfo.rightMargin = 0.0
    thePrintInfo.topMargin = 0.0
    thePrintInfo.bottomMargin = 0.0
    thePrintInfo.jobDisposition = .spool
    return thePrintInfo
}

// Need to show the 'Page Setup' Options as an Accessory
// e.g. Paper size, orientation.
@IBAction func printContent(_ sender: Any) {
    let printOperation = NSPrintOperation(view: thePDFView, printInfo: thePrintInfo())
    let printPanel = NSPrintPanel()
    printPanel.options = [
        NSPrintPanel.Options.showsCopies,
        NSPrintPanel.Options.showsPrintSelection,
        NSPrintPanel.Options.showsPageSetupAccessory,
        NSPrintPanel.Options.showsPreview
    ]
    printOperation.printPanel = printPanel
    printOperation.run()
}
4

1 回答 1

1

根据@Willeke 的评论,我提出了以下建议,似乎效果很好。(小问题是“打印”对话框不是一张纸。)如果有人有任何改进,请发布更好的答案。

@IBAction func printContent(_ sender: Any) {
   let printOperation = thePDFView.document?.printOperation(for: thePrintInfo(), scalingMode: .pageScaleNone, autoRotate: true)
printOperation?.printPanel = thePrintPanel()
printOperation?.run()
}
于 2019-08-18T10:16:59.097 回答