3

I read and search a lot on internet and stack, but I have a problem

I've used this extension

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 ""
    }
}

}

Then i save the path in this way

myPdfPath = self.tableView.exportAsPdfFromTable()

I tried several ways to show the pdf:

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

The extension used to save the pdf does not work well (not fill print preview page). Generate a 125MB pdf with a title I don't want.

Is there an easy way to do this?

1) TableView (generate pdf on a white background (always even if the tableview is red for example)

2) Print the generated pdf.

Thanks

luke
  • 31
  • 1
  • 3

0 Answers0