How to set title and author for pdf (swift, UIKit)

Viewed 186

how could you set metadata like title and author for a PDF generated like this?

            let fmt = UIMarkupTextPrintFormatter(markupText: html)

            let render = UIPrintPageRenderer()
            render.addPrintFormatter(fmt, startingAtPageAt: 0)

            let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8)

            render.setValue(page, forKey: "paperRect")
            render.setValue(page, forKey: "printableRect")
            
            let pdfData = NSMutableData()
            
            let pdfMetaData = [
                kCGPDFContextCreator: "xxx",
                kCGPDFContextAuthor: "xxx",
                kCGPDFContextTitle: "xxx"
            ]

            UIGraphicsBeginPDFContextToData(pdfData, .zero, pdfMetaData)


            for i in 0..<render.numberOfPages {
                UIGraphicsBeginPDFPage();
                render.drawPage(at: i, in: UIGraphicsGetPDFContextBounds())
            }

            UIGraphicsEndPDFContext();

As you can see I only generate the PDF as Data. If I share this data, I get a Sheet like that:

My result

As you can see, the headline is empty, you can only see the app logo. What I want is a headbar like this:

The result that I want

And when I save It to files, the name is "PDF Document" too! :(

I thought this line of code would fix it:

let pdfMetaData = [
                kCGPDFContextCreator: "xxx",
                kCGPDFContextAuthor: "xxx",
                kCGPDFContextTitle: "xxx"
            ]

            UIGraphicsBeginPDFContextToData(pdfData, .zero, pdfMetaData)

Thanks for your time! Boothosh

EDIT: Is this headline (like in the second picture) even the PDF title?

1 Answers

You can set pdf info like this

let pdfInfo = [kCGPDFContextCreator : "App Name", kCGPDFContextTitle : "Title"]
UIGraphicsBeginPDFContextToData(pdfData, .zero, pdfInfo)
Related