使用的webview为WKWebView,核心部分代码(Swift 4):

// 创建打印渲染
let printPageRenderer:PDFRender = PDFRender()
// 获取渲染格式
let viewFormatter:UIViewPrintFormatter = webView.viewPrintFormatter()
// 设置渲染格式
printPageRenderer.addPrintFormatter(viewFormatter, startingAtPageAt: 0)
// 将HTML渲染为PDF
let pdfData:NSData = printPageRenderer.drawPDF()
// 输出文件
let pdfFilename:String = "\(NSHomeDirectory())/Documents/test.pdf"
// 保存
pdfData.write(toFile: pdfFilename, atomically: true)
// 获取文件的保存位置
let url = URL.init(fileURLWithPath: pdfFilename)

PDFRender类的实现

import UIKit

class PDFRender: UIPrintPageRenderer {
// A4纸大小 595*842
let pageFrame:CGRect = CGRect(x: 0.0, y: 0.0, width: 595, height: 842) override init() {
super.init() // 设置打印纸的尺寸大小
self.setValue(pageFrame, forKey: "paperRect")
// 设置内容区域大小
self.setValue(pageFrame, forKey: "printableRect")
}
/// 绘制PDF并生成NSData
func drawPDF() -> NSData! { let data:NSMutableData = NSMutableData()
// 小心!第二个参数如果设置为CGRect.zero,PDF尺寸就会是默认的 612*792
UIGraphicsBeginPDFContextToData(data, pageFrame, nil)
self.prepare(forDrawingPages: NSRange.init(location: 0, length: self.numberOfPages)) let bounds:CGRect = pageFrame
for i in 0..<self.numberOfPages{
UIGraphicsBeginPDFPage()
self.drawPage(at: i, in: bounds)
}
UIGraphicsEndPDFContext()
return data
}
}

Ficow原创,转载请注明出处:http://www.cnblogs.com/ficow/p/7859462.html

iOS 将WKWebView内的HTML打印为PDF的更多相关文章

  1. iOS开发苹果内购的介绍与实现

    1.iOS开发苹果内购的介绍 1.1 介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝 ...

  2. iOS:苹果内购实践

    iOS 苹果的内购 一.介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝等),当然开发 ...

  3. ios调用Html内JS alert 不能点击关闭为甚?

    ios调用Html内JS alert 不能点击关闭为甚? This question gave me the most insight to the problem... Deadlock with ...

  4. IOS IAP APP内支付 Java服务端代码

    IOS IAP APP内支付 Java服务端代码   场景:作为后台需要为app提供服务,在ios中,app内进行支付购买时需要进行二次验证. 基础:可以参考上一篇转载的博文In-App Purcha ...

  5. 将python代码打印成pdf

    将python代码打印成pdf,打印出来很丑,完全不能看. mac下:pycharm 编辑器有print的功能,但是会提示: Error: No print service found. 所以需要一个 ...

  6. ahk打印成pdf记录

    软工课程后记: 要求将博客打印成pdf存档.为了偷懒,不想自己点鼠标一个个保存,所以写了一个ahk小程序.博客教程推荐,建议一试,不难.还很方便.我也只学了点点皮毛,满足需求即止. 第一个成功的小例子 ...

  7. 基于iTextSharp的PDF操作(PDF打印,PDF下载)

    基于iTextSharp的PDF操作(PDF打印,PDF下载) 准备 1. iTextSharp的简介 iTextSharp是一个移植于java平台的iText项目,被封装成c#的组件来用于C#生成P ...

  8. 网页批量打印成PDF,并按条件合并成大PDF、生成页码

    题记:因为老板要求将过去一年内系统中的订单合同内容进行打印,并按月进行整理成纸质文件.合同在系统(web系统)中以html形式显示,打印单份都是在网页中右键打印,订单量上千份,每笔订单有两份合同,如果 ...

  9. iOS 开发之路(WKWebView内嵌HTML5之图片上传) 五

    HTML5页面的图片上传功能在iOS端的实现. 首先,页面上用的是plupload组件,在wkwebview上存在两个坑需要修复才能正常使用. 问题:在webview上点击选择照片/相机拍摄,就会出现 ...

随机推荐

  1. 解决编译twrp3.0.3遇到的问题

    1. 问题: ninja: error: '/home/jessie/OMNI/out/target/product/m1/obj/SHARED_LIBRARIES/libcryptfs_hw_int ...

  2. python day - 17 面向对象的 类空间 和 组合

    1. 类命名空间 在类的代码中,当python 解释器在 运行的那一刻.就会在内存中开辟一个类空间,在类的空间中会加载静态变量,以及类方法的内存地址. 当类名+()(也就是实例化过程中),内存中会再次 ...

  3. Bootstrap progress-bar

    1.进度条 在网页中,进度条的效果并不少见,比如一个评分系统,比如加载状态等.就如下图所示的一个评分系统,他就是一个简单的进度条效果: 进度条和其他独立组件一样,开发者可以根据自己的需要,选择对应的版 ...

  4. HDU 2746 Cyclic Nacklace

    Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  5. HDU2594 Simpsons’ Hidden Talents —— KMP next数组

    题目链接:https://vjudge.net/problem/HDU-2594 Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Oth ...

  6. 控制cms:CMSDropDownList的width

    查找了一下kentico内部使用相关控件的代码,发现有2种方式,可以达到效果. 在我们自己的css class定义的地方,在class前面加上.cms-bootstrap .cms-bootstrap ...

  7. jquery 获取radio被选中的值

    <html> <head> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"& ...

  8. 西交校赛 F. GZP and Poker

    F. GZP and Poker GZP often plays games with his friends.Today they went to a board game.There are n ...

  9. python中的编码和解码

    计算机中常见的编码方式有多种,英文一般是ascii编码,其他有unicode,utf-8,gbk,utf-16等编码. 常见编码方式: ASCII编码:ASCII是早期的编码,包含英文字母.数字和 ...

  10. Watir: 在使用test/unit的时候要注意,不需要require的时候别require

    假设我书写了很多测试用例,测试用例中都有:require 'test/unit' 后来我想把很多这样的测试用例组织在一起运行,我使用了两个require: require 'test/unit' re ...