3

I would like to be able to output one of my SwiftUI views that I have created in my SwiftUI app as a PDF on the Mac.

Everything that I have found seems to be centered around iOS.

I have managed to get some simple output of text only to a PDF but this is not doing any fancy stuff like images or colours.

struct ContentView: View
{
    var body: some View
    {
        TestView()
        Button("Click")
        {
            exportPDF()
        }
        .padding()
    }
}

func exportPDF()
{
    let testView = TestView()
    let hostingView = NSHostingView(rootView: testView)
    hostingView.frame = .init(origin: .zero, size: .init(width: 800, height: 1200))
    do {
        let pdfData = hostingView.dataWithPDF(inside: hostingView.bounds)
        
        let savePanel = NSSavePanel()
        savePanel.allowedFileTypes = ["PDF"]
        savePanel.canCreateDirectories = true
        savePanel.isExtensionHidden = false
        savePanel.allowsOtherFileTypes = false
        savePanel.title = "Save your text"
        savePanel.message = "Choose a folder and a name to store your text."
        savePanel.nameFieldLabel = "File name:"
        let response = savePanel.runModal()
        if response == .OK {
            let urlDuPDF = savePanel.url
            guard let urlDuPDF = urlDuPDF else { return }
            try! pdfData.write(to: urlDuPDF)
        }
    }
}

struct TestView: View {
    var body: some View {
        VStack
        {
            Image("Logo")
                .frame(width:100, height: 100)
            Text("My Company")
            
        }
    }
}

Which I plagiarised from here:

How to export swiftUI view as a PDF file on macOS

In 2022, what is the best way of creating a PDF from the Mac? People must be doing this.

iphaaw
  • 6,764
  • 11
  • 58
  • 83

0 Answers0