3

我在互联网和堆栈上阅读和搜索了很多,但我有一个问题

我用过这个扩展

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 的扩展不能正常工作(不填充打印预览页面)。生成一个 125MB 的 pdf,其标题是我不想要的。

是否有捷径可寻?

1)TableView(在白色背景上生成pdf(例如,即使tableview是红色的)

2)打印生成的pdf。

谢谢

4

0 回答 0