Swift 4 and UIPrintPageRenderer not printing the text
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
add a comment |
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
add a comment |
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
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
ios swift
asked Jan 2 at 19:02
user979331user979331
8133121235
8133121235
add a comment |
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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