iOS 将WKWebView内的HTML打印为PDF

使用的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)

PDFReader类的实现

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

时间: 2024-11-12 00:10:18

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

【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】

转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 ItunesConnect 里 “Contracts, Tax, and Banking”的状态,如下图所示,即可: 这里也是由于Himi疏忽的原因没有说明,这里先给童鞋们带来的麻烦,致以歉意. //——2012-6-25日更新iap恢复 看到很多童鞋说让Himi讲解如何恢复i

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

ios调用Html内JS alert 不能点击关闭为甚? This question gave me the most insight to the problem... Deadlock with GCD and webView The gist is that the thread handling the JS from the stringByEvaluatingJavaScriptFromString: method and the thread handling the iOS al

iOS:苹果内购实践

iOS 苹果的内购 一.介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝等),当然开发者可以设置后门,在审核时避开审核人员.这个是有风险的,一旦发现,app会被立即下架,还是老老实实接入内购吧. 二.注意 内购接入还是比较简单的,苹果提供了专门的框架<StoreKit/StoreKit.h>,只要按照它提供的api进行开发就行.然而,接入的过程还是有需要注意的地方,分别是:漏单处理

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

IOS IAP APP内支付 Java服务端代码 场景:作为后台需要为app提供服务,在ios中,app内进行支付购买时需要进行二次验证. 基础:可以参考上一篇转载的博文In-App Purchase(iap)快速指南了解原理. 直接先上服务端测试通过的代码: import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.U

C# 打印本地PDF文件

通过几天的查找经测试后发现以下三种方法可以实现用C#直接打印PDF文件. 方法一:通过调用命令行: using System.Drawing.Printing; using System.Diagnostics; using System.Collections.Specialized; //打印方法 private void pdfPrint(string filePath) { PrintDocument pd = new PrintDocument(); Process p = new P

AX2009 打印到PDF优化

AX2009打印到PDF存在的问题 1.中文字体,如果报表打印时没有设置成支持中文的字体,生成的PDF中文字符无法显示 2.承第一点,如果设置成中文字体,生成的报表发送给没有安装这个字体的电脑,打开这个PDF会提示要安装字体 3.生成速度慢,AX生成PDF单页需要5-10秒 优化方法 1.AX报表生成RTF文件,速度不错,按保存立刻生成,图片和报表格式正常 2.利用Office Word将RTF转成PDF 具体起作用是下面这个方法 Document.ExportAsFixedFormat sta

MVC页面打印成pdf插件Rotativa

最近做项目,需要把用户信息页面打印成pdf导出,在github上发现了一个插件,非常好用. Rotativa是一个开源的用户MVC页面生成PDF格式文档的dll封装库,我们可以在管理Nuget包中找到并安装它. 安装好之后就可以直接输入一个视图,并生成pdf返回了,具体上代码: 1 return new Rotativa.ActionAsPdf("UserInfo", new { id = id }) { FileName = "User.pdf" }; Rotat

iOS开发WKWebView Cookie的读取与写入,与UIWebView的Cookie共享

NSHTTPCookieStorage和NSHttpCookie NSHTTPCookieStorage 实现了一个管理Cookie的单例对象(只有一个实例),每个Cookie都是NSHTTPCookie类的实例,做为一个规则,Cookie在所有应用 之间共享并在不同进程之间保持同步.Session Cookie(一个isSessionOnly方法返回YES的Cookie)只能在单一进程中使用. UIWebView Cookie 同一个应用,不同UIWebView之间的Cookie是自动同步的.

&lt;转&gt;iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!

原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新   获取"产品付费数量等于0这个问题"的原因 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 ItunesConnect 里 “Contracts, Tax, and