S Lareau
S Lareau

Reputation: 199

Swift Cocoa; printOperation() does not run in Sonoma

I have a Swift Cocoa program that print a NSView. It work perfectly fine in Monterey but does show the print panel in Sonoma. I cannot find the problem. Here are the 4 errors:

Failed to connect (genericPrinterImage) outlet from (PMPrinterSelectionController) to (NSImageView): missing setter or instance variable

Failed to connect (otherPrintersLabel) outlet from (PMPrinterSelectionController) to (NSTextField): missing setter or instance variable

Failed to connect (localPrintersLabel) outlet from (PMPrinterSelectionController) to (NSTextField): missing setter or instance variable

Failed to connect (genericPrinterImage) outlet from (PMPrinterSelectionController) to (NSImageView): missing setter or instance variable

 func createPrintOperation() {
        let printOpts: [NSPrintInfo.AttributeKey: Any] = [
            .headerAndFooter: false,
            .orientation: NSPrintInfo.PaperOrientation.portrait
        ]
        let printInfo = NSPrintInfo(dictionary: printOpts)
        printInfo.leftMargin = 0
        printInfo.rightMargin = 0
        printInfo.topMargin = 0
        printInfo.bottomMargin = 0
        printInfo.horizontalPagination = .fit
        printInfo.verticalPagination = .automatic
        printInfo.isHorizontallyCentered = true
        printInfo.isVerticallyCentered = true
        printInfo.scalingFactor = 1.0
        printInfo.paperSize = NSMakeSize(612, 792) // Letter size

        // Create a print operation with the view you want to print , myPrintView is a NSView
        
        let printOperation = NSPrintOperation(view: myPrintView, printInfo: printInfo)
        
        // Configure the print panel
        printOperation.printPanel.options.insert(NSPrintPanel.Options.showsPaperSize)
        printOperation.printPanel.options.insert(NSPrintPanel.Options.showsOrientation)
        
        // Set the job title for the print operation
        let jobTitle = fact.nom_complet_f.replacingOccurrences(of: " ", with: "")
        printOperation.jobTitle = jobTitle

        // Run the print operation
        printOperation.run()
    }

Upvotes: 1

Views: 65

Answers (1)

S Lareau
S Lareau

Reputation: 199

This code is working, thanks to ChatGPT.

func createPrintOperation() {
    let printOpts: [NSPrintInfo.AttributeKey: Any] = [.headerAndFooter: false,.orientation : 1]  // set
    let printInfo = NSPrintInfo(dictionary: printOpts)
        
    printInfo.leftMargin = 0
    printInfo.rightMargin = 0
    printInfo.topMargin = 0
    printInfo.bottomMargin = 0
    
    printInfo.horizontalPagination = .fit
    printInfo.verticalPagination = .automatic
   
    printInfo.isHorizontallyCentered = true
    printInfo.isVerticallyCentered = true
    
    printInfo.scalingFactor = 1.0
    printInfo.paperSize = NSMakeSize(612, 792)   // letter
    printInfo.orientation = .portrait
    
    let printOperation = NSPrintOperation(view: PrintView, printInfo: printInfo)

    // Attempt to show paper size and orientation options
    printOperation.printPanel.options.insert(.showsPaperSize)
    printOperation.printPanel.options.insert(.showsOrientation)

    // Set the job title
    let jobTitle = fact.nom_complet_f.replacingOccurrences(of: " ", with: "")
    printOperation.jobTitle = jobTitle

    // Ensure the print operation runs on the main thread
    DispatchQueue.main.async {
        printOperation.run()
    }

`

Upvotes: 0

Related Questions