canceling print operating crashes Swift Mac desktop app

◇◆丶佛笑我妖孽 提交于 2021-02-11 13:41:20

问题


I have had a problem with printing a certificate with a background image and overlay text.

My solution after much research is to convert a view to an image and print that and it works UNLESS the print dialogue is canceled then get a crash.

I have tried many versions of the code, even a test app that only does the print function and always get the crash on canceling print. If the certificate is printed no apparent issues.

following in one of many versions of the code I have tried, all with the same result on cancel.

App is Mac desktop, SwiftUi latest everything.

         let contentView = ContentView()
     let contentRect = NSRect(x: 0, y: 0, width: 620, height: 860)

     let newWindow = NSWindow(
         contentRect: contentRect,
         styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
         backing: .buffered, defer: false)

     newWindow.contentView = NSHostingView(rootView: contentView)

     let myNSBitMapRep = newWindow.contentView!.bitmapImageRepForCachingDisplay(in: contentRect)!

     newWindow.contentView!.cacheDisplay(in: contentRect, to: myNSBitMapRep)


     let myNSImage = NSImage(size: myNSBitMapRep.size)
     myNSImage.addRepresentation(myNSBitMapRep)
    
    
    var printView = NSImageView(frame: NSRect(x: 0, y: 0, width: 620, height: 860))
    printView.image = myNSImage
    
    let printInfo = NSPrintInfo()
    printInfo.horizontalPagination = .fit
    printInfo.verticalPagination = .automatic
    printInfo.leftMargin = 0.0
    printInfo.rightMargin = 0.0
    printInfo.topMargin = 0.0
    printInfo.bottomMargin = 0.0
    
    let paperBounds = printInfo.imageablePageBounds
    let origin = paperBounds.origin
    let size = paperBounds.size
    print( "Origin X:\(origin.x), y:\(origin.y) - Size width:\(size.width), height:\(size.height)")
    
    let printOperation = NSPrintOperation(view: printView, printInfo: printInfo)
    printOperation.showsPrintPanel = true
    printOperation.showsProgressPanel = true
    printOperation.canSpawnSeparateThread = true
    printOperation.run()

来源:https://stackoverflow.com/questions/62593232/canceling-print-operating-crashes-swift-mac-desktop-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!