Добавьте "PageSetupAccessory" в PrintPanel для PDFDocument

У меня есть приложение, которое отображает PDFViewи я хочу, чтобы он распечатал файл PDF из представления. Кроме того, я хочу, чтобы на панели "Печать" отображался аксессуар "Параметры страницы" (т. Е. Параметры "Размер бумаги", "Ориентация" и "Масштаб", как в режиме предварительного просмотра, которые отображаются в виде одной панели раскрывающегося списка параметров).

В настоящее время я по ошибке печатаю PDFView, а не сам документ PDF. Это дает мне только одну страницу и включает полосы прокрутки в распечатке! Я не вижу как init NSPrintOperation ссылаясь на PDFDocument а не PDFView,

Вот мой код, который работает, но не то, что я хочу. Я полагаю, мне придется переопределить либо printDocument или же printOperation функции NSDocument с похожим кодом, который определяет Panel и Info.

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()
}

1 ответ

Решение

Основываясь на комментариях @Willeke, я пришел к следующему, который, кажется, работает хорошо. (Незначительное утверждение состоит в том, что диалоговое окно "Печать" не является листом.) Если у кого-то есть какие-либо улучшения, пожалуйста, отправьте лучший ответ.

@IBAction func printContent(_ sender: Any) {
   let printOperation = thePDFView.document?.printOperation(for: thePrintInfo(), scalingMode: .pageScaleNone, autoRotate: true)
printOperation?.printPanel = thePrintPanel()
printOperation?.run()
}
Другие вопросы по тегам