Swift 4 and UIPrintPageRenderer not printing the text












0















I am using Swift 4 with WKWebView when WKWebView is finished loading, I want to take the webview and generate a PDF, everything is working except when I print it the text does not appear from the WKWebView, all the borders and td cell colours appear, but not the text.



Here is my code:



func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

self.stopIndicator()

//Assign the Web View as the View

view = webView

var newheight = CGFloat()
var newwidth = CGFloat()

self.webView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in

if complete != nil {

self.webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { (height, error) in

newheight = height as! CGFloat

self.webView.evaluateJavaScript("document.body.scrollWidth", completionHandler: { (width, error) in

newwidth = width as! CGFloat

//Define the render, an object that draws pages of content that are to be printed, with or without the assistance of print formatters.

let render = UIPrintPageRenderer()

//Assign the Web View to the print page renderer

render.addPrintFormatter(webView.viewPrintFormatter(), startingAtPageAt: 0)

//Define the page size of the PDF Document

let page = CGRect(x: 0, y: 0, width: newwidth, height: newheight)

//Define the print page size

let printable = page.insetBy(dx: 0, dy: 0)

//Set the size for the render page

render.setValue(NSValue(cgRect: page), forKey: "paperRect")

//Set the size for the render printable

render.setValue(NSValue(cgRect: printable), forKey: "printableRect")

let rect = CGRect(x: 0, y: 0, width: newwidth, height: newheight)

//Define the PDF Data variable

let pdfData = NSMutableData()

//Creates a PDF-based graphics context that targets the specified mutable data object.

UIGraphicsBeginPDFContextToData(pdfData, rect, nil)

//For each pages in the render

for i in 0...render.numberOfPages {

//Marks the beginning of a new page in a PDF context and configures it using default values.

UIGraphicsBeginPDFPage();

//Define the current page bounds.

let bounds = UIGraphicsGetPDFContextBounds()

//Draw the page on content

render.drawPage(at: i, in: bounds)

}

//Closes a PDF graphics context and pops it from the current context stack.

UIGraphicsEndPDFContext();

//Get the first directory path.

let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

//Write the PDF Data to the file.

pdfData.write(toFile: "(documentsPath)/pdfName.pdf", atomically: true)

//Set the PDF file path

self.pdfPath = "(documentsPath)/pdfName.pdf"

//Set the PDF title

self.pdfTitle = "pdfName"

self.shareButton.isEnabled = true



})
})
}

})

}


When the web view is done loading, this method above will generate a PDF from the web view, but the problem is no text gets generated. What am I doing wrong?










share|improve this question



























    0















    I am using Swift 4 with WKWebView when WKWebView is finished loading, I want to take the webview and generate a PDF, everything is working except when I print it the text does not appear from the WKWebView, all the borders and td cell colours appear, but not the text.



    Here is my code:



    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

    self.stopIndicator()

    //Assign the Web View as the View

    view = webView

    var newheight = CGFloat()
    var newwidth = CGFloat()

    self.webView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in

    if complete != nil {

    self.webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { (height, error) in

    newheight = height as! CGFloat

    self.webView.evaluateJavaScript("document.body.scrollWidth", completionHandler: { (width, error) in

    newwidth = width as! CGFloat

    //Define the render, an object that draws pages of content that are to be printed, with or without the assistance of print formatters.

    let render = UIPrintPageRenderer()

    //Assign the Web View to the print page renderer

    render.addPrintFormatter(webView.viewPrintFormatter(), startingAtPageAt: 0)

    //Define the page size of the PDF Document

    let page = CGRect(x: 0, y: 0, width: newwidth, height: newheight)

    //Define the print page size

    let printable = page.insetBy(dx: 0, dy: 0)

    //Set the size for the render page

    render.setValue(NSValue(cgRect: page), forKey: "paperRect")

    //Set the size for the render printable

    render.setValue(NSValue(cgRect: printable), forKey: "printableRect")

    let rect = CGRect(x: 0, y: 0, width: newwidth, height: newheight)

    //Define the PDF Data variable

    let pdfData = NSMutableData()

    //Creates a PDF-based graphics context that targets the specified mutable data object.

    UIGraphicsBeginPDFContextToData(pdfData, rect, nil)

    //For each pages in the render

    for i in 0...render.numberOfPages {

    //Marks the beginning of a new page in a PDF context and configures it using default values.

    UIGraphicsBeginPDFPage();

    //Define the current page bounds.

    let bounds = UIGraphicsGetPDFContextBounds()

    //Draw the page on content

    render.drawPage(at: i, in: bounds)

    }

    //Closes a PDF graphics context and pops it from the current context stack.

    UIGraphicsEndPDFContext();

    //Get the first directory path.

    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

    //Write the PDF Data to the file.

    pdfData.write(toFile: "(documentsPath)/pdfName.pdf", atomically: true)

    //Set the PDF file path

    self.pdfPath = "(documentsPath)/pdfName.pdf"

    //Set the PDF title

    self.pdfTitle = "pdfName"

    self.shareButton.isEnabled = true



    })
    })
    }

    })

    }


    When the web view is done loading, this method above will generate a PDF from the web view, but the problem is no text gets generated. What am I doing wrong?










    share|improve this question

























      0












      0








      0








      I am using Swift 4 with WKWebView when WKWebView is finished loading, I want to take the webview and generate a PDF, everything is working except when I print it the text does not appear from the WKWebView, all the borders and td cell colours appear, but not the text.



      Here is my code:



      func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

      self.stopIndicator()

      //Assign the Web View as the View

      view = webView

      var newheight = CGFloat()
      var newwidth = CGFloat()

      self.webView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in

      if complete != nil {

      self.webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { (height, error) in

      newheight = height as! CGFloat

      self.webView.evaluateJavaScript("document.body.scrollWidth", completionHandler: { (width, error) in

      newwidth = width as! CGFloat

      //Define the render, an object that draws pages of content that are to be printed, with or without the assistance of print formatters.

      let render = UIPrintPageRenderer()

      //Assign the Web View to the print page renderer

      render.addPrintFormatter(webView.viewPrintFormatter(), startingAtPageAt: 0)

      //Define the page size of the PDF Document

      let page = CGRect(x: 0, y: 0, width: newwidth, height: newheight)

      //Define the print page size

      let printable = page.insetBy(dx: 0, dy: 0)

      //Set the size for the render page

      render.setValue(NSValue(cgRect: page), forKey: "paperRect")

      //Set the size for the render printable

      render.setValue(NSValue(cgRect: printable), forKey: "printableRect")

      let rect = CGRect(x: 0, y: 0, width: newwidth, height: newheight)

      //Define the PDF Data variable

      let pdfData = NSMutableData()

      //Creates a PDF-based graphics context that targets the specified mutable data object.

      UIGraphicsBeginPDFContextToData(pdfData, rect, nil)

      //For each pages in the render

      for i in 0...render.numberOfPages {

      //Marks the beginning of a new page in a PDF context and configures it using default values.

      UIGraphicsBeginPDFPage();

      //Define the current page bounds.

      let bounds = UIGraphicsGetPDFContextBounds()

      //Draw the page on content

      render.drawPage(at: i, in: bounds)

      }

      //Closes a PDF graphics context and pops it from the current context stack.

      UIGraphicsEndPDFContext();

      //Get the first directory path.

      let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

      //Write the PDF Data to the file.

      pdfData.write(toFile: "(documentsPath)/pdfName.pdf", atomically: true)

      //Set the PDF file path

      self.pdfPath = "(documentsPath)/pdfName.pdf"

      //Set the PDF title

      self.pdfTitle = "pdfName"

      self.shareButton.isEnabled = true



      })
      })
      }

      })

      }


      When the web view is done loading, this method above will generate a PDF from the web view, but the problem is no text gets generated. What am I doing wrong?










      share|improve this question














      I am using Swift 4 with WKWebView when WKWebView is finished loading, I want to take the webview and generate a PDF, everything is working except when I print it the text does not appear from the WKWebView, all the borders and td cell colours appear, but not the text.



      Here is my code:



      func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

      self.stopIndicator()

      //Assign the Web View as the View

      view = webView

      var newheight = CGFloat()
      var newwidth = CGFloat()

      self.webView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in

      if complete != nil {

      self.webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { (height, error) in

      newheight = height as! CGFloat

      self.webView.evaluateJavaScript("document.body.scrollWidth", completionHandler: { (width, error) in

      newwidth = width as! CGFloat

      //Define the render, an object that draws pages of content that are to be printed, with or without the assistance of print formatters.

      let render = UIPrintPageRenderer()

      //Assign the Web View to the print page renderer

      render.addPrintFormatter(webView.viewPrintFormatter(), startingAtPageAt: 0)

      //Define the page size of the PDF Document

      let page = CGRect(x: 0, y: 0, width: newwidth, height: newheight)

      //Define the print page size

      let printable = page.insetBy(dx: 0, dy: 0)

      //Set the size for the render page

      render.setValue(NSValue(cgRect: page), forKey: "paperRect")

      //Set the size for the render printable

      render.setValue(NSValue(cgRect: printable), forKey: "printableRect")

      let rect = CGRect(x: 0, y: 0, width: newwidth, height: newheight)

      //Define the PDF Data variable

      let pdfData = NSMutableData()

      //Creates a PDF-based graphics context that targets the specified mutable data object.

      UIGraphicsBeginPDFContextToData(pdfData, rect, nil)

      //For each pages in the render

      for i in 0...render.numberOfPages {

      //Marks the beginning of a new page in a PDF context and configures it using default values.

      UIGraphicsBeginPDFPage();

      //Define the current page bounds.

      let bounds = UIGraphicsGetPDFContextBounds()

      //Draw the page on content

      render.drawPage(at: i, in: bounds)

      }

      //Closes a PDF graphics context and pops it from the current context stack.

      UIGraphicsEndPDFContext();

      //Get the first directory path.

      let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

      //Write the PDF Data to the file.

      pdfData.write(toFile: "(documentsPath)/pdfName.pdf", atomically: true)

      //Set the PDF file path

      self.pdfPath = "(documentsPath)/pdfName.pdf"

      //Set the PDF title

      self.pdfTitle = "pdfName"

      self.shareButton.isEnabled = true



      })
      })
      }

      })

      }


      When the web view is done loading, this method above will generate a PDF from the web view, but the problem is no text gets generated. What am I doing wrong?







      ios swift






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 2 at 19:02









      user979331user979331

      8133121235




      8133121235
























          0






          active

          oldest

          votes












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54011786%2fswift-4-and-uiprintpagerenderer-not-printing-the-text%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54011786%2fswift-4-and-uiprintpagerenderer-not-printing-the-text%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          MongoDB - Not Authorized To Execute Command

          in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

          How to fix TextFormField cause rebuild widget in Flutter