swift - 如何从 UIWebview 生成 PDF
问题描述
无法在 iOS 设备上从 HTML 模板生成 PDF。它渲染除图像 [ 本地以及服务器端图像之外的所有其他内容。甚至使用了 UIWebview(因为我的应用程序最小 iOS 目标是 10.3),但仍然无法呈现为 pdf。我已经成功地在 UIWebview 上显示了预览,但是当涉及到 pdf 时,我只得到动态文本,没有别的。
@objc func downloadPDF(){
let render = UIPrintPageRenderer()
render.addPrintFormatter(webView.viewPrintFormatter(), startingAtPageAt: 0);
let page = CGRect(x: 0, y: 10, width: webView.frame.size.width, height: webView.frame.size.height) // take the size of the webView
let printable = page.insetBy(dx: 0, dy: 0)
render.setValue(NSValue(cgRect: page), forKey: "paperRect")
render.setValue(NSValue(cgRect: printable), forKey: "printableRect")
// 4. Create PDF context and draw
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, CGRect.zero, nil)
for i in 1...render.numberOfPages {
UIGraphicsBeginPDFPage();
let bounds = UIGraphicsGetPDFContextBounds()
render.drawPage(at: i - 1, in: bounds)
}
UIGraphicsEndPDFContext();
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
print(documentsPath)
pdfData.write(toFile: "\(documentsPath)/\(self.pdfTitle).pdf", atomically: true)
AppConfigurations.shared.popAlert(To: "PDF Generate", for: documentsPath, callingView: self)
self.pdfPath = "\(documentsPath)/\(self.pdfTitle).pdf"
}
@objc func downloadPDF(){
let render = UIPrintPageRenderer()
render.addPrintFormatter(webView.viewPrintFormatter(), startingAtPageAt: 0);
let page = CGRect(x: 0, y: 10, width: webView.frame.size.width, height: webView.frame.size.height) // take the size of the webView
let printable = page.insetBy(dx: 0, dy: 0)
render.setValue(NSValue(cgRect: page), forKey: "paperRect")
render.setValue(NSValue(cgRect: printable), forKey: "printableRect")
// 4. Create PDF context and draw
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, CGRect.zero, nil)
for i in 1...render.numberOfPages {
UIGraphicsBeginPDFPage();
let bounds = UIGraphicsGetPDFContextBounds()
render.drawPage(at: i - 1, in: bounds)
}
UIGraphicsEndPDFContext();
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
print(documentsPath)
pdfData.write(toFile: "\(documentsPath)/\(self.pdfTitle).pdf", atomically: true)
AppConfigurations.shared.popAlert(To: "PDF Generate", for: documentsPath, callingView: self)
self.pdfPath = "\(documentsPath)/\(self.pdfTitle).pdf"
}
我的期望是我想生成具有正确背景图像和 html 样式的 PDF 以及本地和服务器端图像。
解决方案
推荐阅读
- wpf - 在另一个程序集中使用 WPF 控件时找不到 StaticResource
- while-loop - 使用while循环无法获取所有消息
- java - Jython 给出“无法创建具有非字节值的 PyString”错误
- perl - 如何在perl脚本中将文件的内容多次附加到一个文件中
- javascript - 如何在javascript中循环直到满足条件并将结果添加到数组中?
- c# - 增量游戏公式问题
- ansible - Ansible:使用集合时找不到模块
- http - Jenkins:使用 Jenkins 请求插件通过 HTTP POST 将文件上传到服务器
- pycharm - 你能修复 Pycharm 中的工具窗口宽度吗?
- aws-lambda - 运行无服务器批处理作业是否有时间限制?