iOS UIPrintPageRenderer prints last page for each page to be printed

515 Views Asked by At

I am in middle of developing an iOS app and I want to export certain reports in PDF format. So I am using webView to generate report and print webView to pdf.

Here is my code:

var renderer : UIPrintPageRenderer!
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    renderer = CustomPrintPageRenderer()
    if let url = Bundle.main.url(forResource: "pdf", withExtension: "html", subdirectory: "web") {
        let request = URLRequest(url: url);
        webView.delegate = self;
        webView.loadRequest(request);
    }
}

func webViewDidFinishLoad(_ webView: UIWebView) {
    var pages : [UIViewPrintFormatter] = []
    var index = 0
    for query in queryList {
      var result = webView.stringByEvaluatingJavaScript(from: query)
      if(!webView.isLoading) {
          let printFormatter =  webView.viewPrintFormatter()
          pages.append(printFormatter)
       }
    }

    for page in pages {
        renderer.addPrintFormatter(page, startingAtPageAt: index)
        index = index + 1
    }

    let pdfData = drawPDFUsingPrintPageRenderer(printPageRenderer: renderer)
   pdfData?.write(toFile: "\(AppDelegate.getAppDelegate().getDocDir())/report.pdf", atomically: true)
}

func drawPDFUsingPrintPageRenderer(printPageRenderer: UIPrintPageRenderer) -> NSData! {
    let data = NSMutableData()

    UIGraphicsBeginPDFContextToData(data, CGRect.zero, nil)
    printPageRenderer.prepare(forDrawingPages: NSMakeRange(0, printPageRenderer.numberOfPages))

    let bounds = UIGraphicsGetPDFContextBounds()

    for i in 0...(printPageRenderer.numberOfPages - 1) {
        UIGraphicsBeginPDFPage()
        printPageRenderer.drawPage(at: i, in: bounds)
    }

    UIGraphicsEndPDFContext();
    return data
}

Now problem is that, the generated PDF contains only last page printed multiple time (once for each page in pages which is not the expected behavior.

0

There are 0 best solutions below