Добавьте "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()
}