По сути, я создаю файл PDF из снимков экрана пользователя. Представление содержит табличное представление с текстом и значками.
На самом деле процесс печати выполняется на бумаге правильно.
ОДНАКО, прямо перед нажатием последней кнопки «Печать» пользователь видит родной экран предварительного просмотра печати iOS. И в этом предварительном просмотре PDF значки отображаются, а метки нет.
Мое решение выполняет свою работу, но это может привести пользователя в замешательство и разочарование, если они не смогут увидеть точный предварительный просмотр того, что они пытаются напечатать.
func printPDF(pdf: Data) {
if UIPrintInteractionController.canPrint(pdf) {
let printInfo = UIPrintInfo(dictionary: nil)
printInfo.jobName = "Minutes"
printInfo.outputType = .photo
let printController = UIPrintInteractionController.shared
printController.printInfo = printInfo
printController.showsNumberOfCopies = false
printController.printingItem = pdf
printController.present(animated: true, completionHandler: nil)
}
}
func generatePDF() -> Data {
// Determine number of pages to create in PDF
let contentHeight = Int(tableView.contentSize.height)
let tableHeight = Int(tableView.frame.height)
pageCount = (contentHeight/tableHeight) + 1
var currentPage = 1
pageOutlet.text = "Page \(currentPage)/\(pageCount)"
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, self.pdfContainerView.frame, nil)
let context = UIGraphicsGetCurrentContext()
for _ in 0..<pageCount {
// Update page number at bottom of screen
pageOutlet.text = "Page \(currentPage)/\(pageCount)"
// Create new page
UIGraphicsBeginPDFPage()
pdfContainerView.layer.render(in: context!)
// Adjust table view
let originalYOffset = tableView.contentOffset.y
let newOffset = originalYOffset + tableView.frame.height
tableView.contentOffset = CGPoint(x: 0, y: newOffset)
currentPage+=1
}
UIGraphicsEndPDFContext()
tableView.contentOffset = CGPoint(x: 0, y: 0)
return pdfData as Data
}