SwiftUI ScrollView to PDF

Viewed 14

Currently, I am using this code to create a PDF, but it only creates a PDF of the part of the page the user is looking at, and not the entire scroll view. How can I create a multi-page PDF to get the entire scroll view?

func exportToPDF(width:CGFloat, height:CGFloat, airplane: String, completion: @escaping (String) -> Void) {
          let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
          let outputFileURL = documentDirectory.appendingPathComponent("smartsheet-\(airplane.afterchar(first: "N")).pdf")
          //Normal with
          let width: CGFloat = width
          //Estimate the height of your view
          let height: CGFloat = height
    let charts = SmartSheet().environmentObject(Variables())
          let pdfVC = UIHostingController(rootView: charts)
          pdfVC.view.frame = CGRect(x: 0, y: 0, width: width, height: height)
          //Render the view behind all other views
          let rootVC = UIApplication.shared.windows.first?.rootViewController
          rootVC?.addChild(pdfVC)
          rootVC?.view.insertSubview(pdfVC.view, at: 0)
          //Render the PDF

          let pdfRenderer = UIGraphicsPDFRenderer(bounds: CGRect(x: 0, y: 0, width: width, height: height))
          DispatchQueue.main.async {
              do {
                  try pdfRenderer.writePDF(to: outputFileURL, withActions: { (context) in
                      context.beginPage()
                      rootVC?.view.layer.render(in: context.cgContext)
                  })
                  UserDefaults.standard.set(outputFileURL, forKey: "pdf")
                  UserDefaults.standard.synchronize()
                  print("wrote file to: \(outputFileURL.path)")
                completion(outputFileURL.path)
              } catch {
                  print("Could not create PDF file: \(error.localizedDescription)")
              }

          pdfVC.removeFromParent()
          pdfVC.view.removeFromSuperview()
      }
  }
0 Answers
Related