быстрая печать представления в верхнем левом углу страницы

#swift #macos #printing #swiftui

#быстрая #macos #печать #swiftui

Вопрос:

У меня есть процедура печати, которая печатает представление на выбранном принтере. Работает нормально, но вывод всегда находится в центре страницы.

Я хотел бы иметь возможность печатать представление с исходным кодом в верхнем левом углу страницы, перепробовал все, что мог придумать, но всегда в центре.

Моя функция печати:

 func printView(viewToPrint: AnyView){
    let printContainerView = NSHostingView(rootView: viewToPrint)
    printContainerView.frame.size = CGSize(width: 196, height: 200)
    let printInfo = NSPrintInfo()
    printInfo.horizontalPagination = .automatic
    printInfo.verticalPagination = .automatic
    printInfo.leftMargin = 0.0
    printInfo.rightMargin = 0.0
    printInfo.topMargin = 0.0
    printInfo.bottomMargin = 0.0
    let printOperation = NSPrintOperation(view: printContainerView, printInfo: printInfo)
    printOperation.showsPrintPanel = true
    printOperation.showsProgressPanel = true
    printOperation.canSpawnSeparateThread = true
    printOperation.run()
}
 

Потому что я не знаю, какой принтер используется, а некоторые не сообщают размер бумаги (думаю, это проблема с драйвером) Я не могу создать представление размером со страницу и расположить представление для печати соответствующим образом — попробовал и все еще в центре!

Я пришел к выводу, что я делаю что-то в корне неправильное, но оно печатает!

Спасибо за любые предложения.

Ответ №1:

Попробуйте выполнить следующее

 let printInfo = NSPrintInfo.shared
printInfo.isHorizontallyCentered = false
printInfo.isVerticallyCentered = false