Попытка добавить функциональность, чтобы иметь возможность передавать в эфир Распечатать UITableView

У меня есть приложение со списком дел (в стиле). данные размещаются в табличном представлении источника данных с настраиваемыми ячейками. У меня есть раскрывающееся меню, и я пытаюсь добавить print кнопку, чтобы пользователь мог распечатать список, если он хочет (кажется стандартным для многих приложений со списками).

Пока у меня в действии кнопки следующее:

                  let printController = UIPrintInteractionController.shared
            printController.delegate = self
            
            let printInfo = UIPrintInfo(dictionary: nil)
            printInfo.outputType = .general
            printInfo.jobName = "Print TableView"
            printController.printInfo = printInfo
            
            let tableViewPDF = self?.tableView.exportAsPdfFromTable()
            printController.printingItem = tableViewPDF
            
            let formatter = UIPrintFormatter()
            formatter.perPageContentInsets = UIEdgeInsets(top: 50, left: 50, bottom: 50, right: 50)
            printController.printFormatter = formatter
            
            printController.present(animated: true, completionHandler: nil)

и делегат:

           extension ListTableViewController: UIPrintInteractionControllerDelegate {
  func printInteractionControllerParentViewController(_ printInteractionController: UIPrintInteractionController) -> UIViewController? {
    return self
   }
  }

Как видите, я пытаюсь преобразовать табличное представление в PDF-файл и распечатать его (возможно, что-то еще может быть лучше?). В .exportAsPdfFromTable() метод в tableView - это UITableView расширение следующим образом:

      extension UITableView {

// Export pdf from UITableView and save pdf in drectory and return pdf file path
func exportAsPdfFromTable() -> String {
    
    let originalBounds = self.bounds
    self.bounds = CGRect(x:originalBounds.origin.x, y: originalBounds.origin.y, width: self.contentSize.width, height: self.contentSize.height)
    let pdfPageFrame = CGRect(x: 0, y: 0, width: self.bounds.size.width, height: self.contentSize.height)
    
    let pdfData = NSMutableData()
    UIGraphicsBeginPDFContextToData(pdfData, pdfPageFrame, nil)
    UIGraphicsBeginPDFPageWithInfo(pdfPageFrame, nil)
    guard let pdfContext = UIGraphicsGetCurrentContext() else { return "" }
    self.layer.render(in: pdfContext)
    UIGraphicsEndPDFContext()
    self.bounds = originalBounds
    // Save pdf data
    return self.saveTablePdf(data: pdfData)
}

// Save pdf file in document directory
func saveTablePdf(data: NSMutableData) -> String {
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    let docDirectoryPath = paths[0]
    let pdfPath = docDirectoryPath.appendingPathComponent("tablePdf.pdf")
    if data.write(to: pdfPath, atomically: true) {
        return pdfPath.path
    } else {
        return ""
    }
}

}

В результате контроллеру печати отображается пустая страница. Любые идеи о том, что мне не хватает?

0 ответов

Другие вопросы по тегам