Swift macOS, как печатать с NSPrintInfo и NSAttributedString
Я хочу распечатать список в моем приложении.
Однако, если список слишком велик для размещения на одной странице, возникает проблема с последней и первой строкой на странице.
например, последняя строка на странице обрезается, а некоторые части отображаются в верхней части следующей страницы.
Снимок экрана внизу страницы 1
Снимок экрана вверху страницы 2
Как мне настроить мое задание на печать, чтобы текст был правильно настроен на каждой странице?
В настоящее время у меня есть следующий фрагмент кода:
func makePDF(markup: String, amount: Int) {
let directoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let printOpts: [NSPrintInfo.AttributeKey: Any] = [NSPrintInfo.AttributeKey.jobDisposition: NSPrintInfo.JobDisposition.save, NSPrintInfo.AttributeKey.jobSavingURL: directoryURL]
let printInfo = NSPrintInfo(dictionary: printOpts)
printInfo.horizontalPagination = NSPrintInfo.PaginationMode.autoPagination
printInfo.verticalPagination = NSPrintInfo.PaginationMode.autoPagination
printInfo.topMargin = 20.0
printInfo.leftMargin = 20.0
printInfo.rightMargin = 20.0
printInfo.bottomMargin = 20.0
let view = NSView(frame: NSRect(x: 0, y: 0, width: 560, height: (60 + 36 * amount)))
if let htmlData = markup.data(using: String.Encoding.utf8) {
let attrStr = NSAttributedString(html: htmlData, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:
String.Encoding.utf8.rawValue], documentAttributes: nil)
let frameRect = NSRect(x: 0, y: 0, width: 560, height: (60 + 36 * amount))
let textField = NSTextField(frame: frameRect)
textField.attributedStringValue = attrStr!
view.addSubview(textField)
let printOperation = NSPrintOperation(view: view, printInfo: printInfo)
printOperation.showsPrintPanel = true
printOperation.showsProgressPanel = true
printOperation.run()
}
}