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.