html - 无法将html代码转换为pdf
问题描述
我有一个 html 模板。我想把它转换成pdf并分享。
当我做这样的事情时......
let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: [self.appDelegate.HTMLContent], applicationActivities: nil)
self.present(activityViewController, animated: true, completion: nil)
那么共享的只是html代码。我想将html代码转换为pdf然后分享。我该怎么办呢……?
解决方案
使用以下方法将您的 HTML 字符串转换为 A4 大小的 PDF 数据格式:
func generatePDF(from html: String) -> NSData {
let fmt = UIMarkupTextPrintFormatter(markupText: html)
// 2. Assign print formatter to UIPrintPageRenderer
let render = UIPrintPageRenderer()
render.addPrintFormatter(fmt, startingAtPageAt: 0)
// 3. Assign paperRect and printableRect
let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi
let printableRect = CGRect(x: 47.6, y: 70.9, width: 500, height: 700) // Adding margin to page
render.setValue(page, forKey: "paperRect")
render.setValue(printableRect, forKey: "printableRect")
// 4. Create PDF context and draw
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, .zero, nil)
for i in 0..<render.numberOfPages {
UIGraphicsBeginPDFPage()
render.drawPage(at: i, in: UIGraphicsGetPDFContextBounds())
}
UIGraphicsEndPDFContext()
return pdfData
}
现在使用下面的代码来分享一下:
let pdfData = generatePDF(from: self.appDelegate.HTMLContent)
let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: [pdfData], applicationActivities: nil)
self.present(activityViewController, animated: true, completion: nil)
推荐阅读
- laravel - 此路由不支持 POST 方法。支持的方法:GET、HEAD、PUT、PATCH、DELETE
- android - 从 Retrofit2 调用 Web 请求时如何解决 FATAL EXCEPTION?
- r - 如何将数据转换为非 equi 列?
- javascript - 正则表达式使用 powershell 脚本替换 javascript 内容
- cypress - 测试用例中的赛普拉斯 XHR API 调用验证
- rdf - JSON-LD 上下文:指定(固有)rdf:属性值的类型
- spring-data-jpa - spring data jpa 不使用@idClass 保存实体
- php - MySQLi begin_transaction 和自动提交
- c# - 产品数据库及应用
- c++ - 从 12 小时格式到 24 小时格式的时间转换