Как легко сохранить PDF (и распечатать) из UITableView (или ячейки)? - PullRequest
3 голосов
/ 28 мая 2020

Я много читаю и ищу в inte rnet и стеке, но у меня проблема

Я использовал это расширение

extension UITableView {

// Export pdf from UITableView and save pdf in drectory and return pdf file path
func exportAsPdfFromTable() -> String {

    self.showsVerticalScrollIndicator = false
    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("myPDF.pdf")
    if data.write(to: pdfPath, atomically: true) {
        return pdfPath.path
    } else {
        return ""
    }
}

}

Затем я сохраняю путь таким образом

myPdfPath = self.tableView.exportAsPdfFromTable()

Я пробовал несколько способов показать pdf:

- UIActivityViewController (with this work but not well)
- WKWebView
- SFSafariViewController (only http / https, path file not work)
- UIDocumentInteractionController (not show preview and not work)

Расширение, используемое для сохранения pdf, не работает (не заполняет печать страницу предварительного просмотра). Создайте PDF-файл размером 125 МБ с заголовком, который мне не нужен.

Есть ли простой способ сделать это?

1) TableView (генерировать PDF-файл на белом фоне (всегда, даже если tableview красный, например)

2) Распечатайте сгенерированный pdf.

Спасибо

...