Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 生成多页PDF UIView_Swift_Uitableview_Pdf_Uiview - Fatal编程技术网

Swift 生成多页PDF UIView

Swift 生成多页PDF UIView,swift,uitableview,pdf,uiview,Swift,Uitableview,Pdf,Uiview,我想创建多页PDF的self.view。我有以下viewController和tableView现在我想创建视图的pdf 这是我所做的,但它只是创建单页pdf func pdfDataWithTableView(tableView: UITableView) { let priorBounds = tableView.bounds let fittedSize = tableView.sizeThatFits(CGSize(width:priorBounds.size.widt

我想创建多页PDF的
self.view
。我有以下
viewController
tableView
现在我想创建视图的pdf

这是我所做的,但它只是创建单页pdf

func pdfDataWithTableView(tableView: UITableView) {
    let priorBounds = tableView.bounds
    let fittedSize = tableView.sizeThatFits(CGSize(width:priorBounds.size.width, height:tableView.contentSize.height))
    tableView.bounds = CGRect(x:0, y:0, width:fittedSize.width, height:fittedSize.height)
    let pdfPageBounds = CGRect(x:0, y:0, width:tableView.frame.width, height:self.view.frame.height)
    let pdfData = NSMutableData()
    UIGraphicsBeginPDFContextToData(pdfData, pdfPageBounds,nil)
    var pageOriginY: CGFloat = 0
    while pageOriginY < fittedSize.height {
        UIGraphicsBeginPDFPageWithInfo(pdfPageBounds, nil)
        UIGraphicsGetCurrentContext()!.saveGState()
        UIGraphicsGetCurrentContext()!.translateBy(x: 0, y: -pageOriginY)
        tableView.layer.render(in: UIGraphicsGetCurrentContext()!)
        UIGraphicsGetCurrentContext()!.restoreGState()
        pageOriginY += pdfPageBounds.size.height
    }

    UIGraphicsEndPDFContext()
    tableView.bounds = priorBounds
    var docURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).last! as URL
    docURL = docURL.appendingPathComponent("myPassBook.pdf")
    pdfData.write(to: docURL as URL, atomically: true)
    share()
}
func pdfDataWithTableView(tableView:UITableView){
设priorBounds=tableView.bounds
让fittedSize=tableView.sizeThatFits(CGSize(宽度:priorBounds.size.width,高度:tableView.contentSize.height))
tableView.bounds=CGRect(x:0,y:0,width:fittedSize.width,height:fittedSize.height)
让pdfPageBounds=CGRect(x:0,y:0,宽度:tableView.frame.width,高度:self.view.frame.height)
设pdfData=NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData、pdfPageBounds、nil)
变量pageOriginY:CGFloat=0
而pageOriginY
在下面的函数中调用保存按钮

func createImg() -> UIImage {
        guard tblView.numberOfSections > 0, tblView.numberOfRows(inSection: 0) > 0 else {
            let errorImage = UIImage(named: "Error Image")
            return errorImage!
        }
        UIGraphicsBeginImageContextWithOptions(CGSize(width: tblView.contentSize.width, height:  tblView.contentSize.height), false, 0.0)
        let context = UIGraphicsGetCurrentContext()
        let previousFrame = tblView.frame
        tblView.frame = CGRect(x: tblView.frame.origin.x, y:  tblView.frame.origin.y, width: tblView.contentSize.width, height: tblView.contentSize.height)
        // Draw view in that context
        tblView.layer.render(in: context!)
        tblView.frame = previousFrame
        let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        createPDFDataFromImage(image: image)
        return image;
    }
从图像创建PDF并共享

func createPDFDataFromImage(image: UIImage){
        let pdfData = NSMutableData()
        let imgView = UIImageView.init(image: image)
        let imageRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
        UIGraphicsBeginPDFContextToData(pdfData, imageRect, nil)
        UIGraphicsBeginPDFPage()
        let context = UIGraphicsGetCurrentContext()
        imgView.layer.render(in: context!)
        UIGraphicsEndPDFContext()

        //try saving in doc dir to confirm:
        let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last
        let path = dir?.appendingPathComponent("file.pdf")

        do {
            try pdfData.write(to: path!, options: NSData.WritingOptions.atomic)
        } catch {
            print("error catched")
        }
        let activityViewController = UIActivityViewController(activityItems: [pdfData] , applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = self.view
        self.present(activityViewController, animated: true, completion: nil)

    }