Here is a case for MacOS.
https://stackoverflow.com/questions/44640022/draw-on-a-pdf-using-swift-on-macos
Hope that will help.
On iOS, structure is like this:
func createPdfAndSave() -> Bool {
// 1. Create Print Formatter with input text.
let formatter = UIMarkupTextPrintFormatter(markupText: "") // Some text textView.text)
// 2. Add formatter with pageRender
let render = MultiPagesUIPrintPageRenderer(howManyPages: kDrawOn2Columns ? 1 : 2) // UIPrintPageRenderer()
render.addPrintFormatter(formatter, startingAtPageAt: 0)
// 3. Assign paperRect and printableRect
let page = CGRect(x: 0, y: 0, width: kPageWidth, height: kPageHeight) // A4, 72 dpi
let printable = page.insetBy(dx: 0, dy: 0)
render.setValue(NSValue(cgRect: page), forKey: "paperRect")
render.setValue(NSValue(cgRect: printable), forKey: "printableRect")
// 4. Initialize drawing areas
// 5. Create PDF context and draw
let rect = CGRect.zero
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, rect, nil)
render.prepare(forDrawingPages: NSMakeRange(0, render.numberOfPages))
let bounds = UIGraphicsGetPDFContextBounds()
for iPage in 1...render.numberOfPages {
UIGraphicsBeginPDFPage();
render.drawPage(at: iPage - 1, in: bounds)
}
UIGraphicsEndPDFContext();
// 6. Save PDF file
do {
let documentDirUrl = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
let fileNameWithPDFExtension = filenameShort + ".pdf"
let indexFileUrl = documentDirUrl.appendingPathComponent(fileNameWithPDFExtension)
return pdfData.write(to: indexFileUrl, atomically: true) // true if written
} catch {
print(error)
return false
}
}