Swift 显示浏览 pdf 文件

本文介绍如何在Swift中利用CoreGraphics框架实现PDF文件的页面渲染,并提供了具体的代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

webView显示pdf文件

在开发中,我们可以用webview加载pdf文件,这个直接加载文件绝对路径就可以了。

使用CoreGraphics绘制pdf内容

import UIKit
import CoreGraphics


class PDFView: UIView {

    var document:CGPDFDocument!
    var pageNum:NSInteger = 1;

     /// 初始化加载pdf视图
     ///
     /// - Parameters:
     ///   - frame:frame
     ///   - document: CGPDFDocument
     ///   - pageNum: 页码
     init(frame: CGRect,document:CGPDFDocument,pageNum:NSInteger) {
        super.init(frame: frame);
        self.document = document;
        self.pageNum = pageNum;
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func draw(_ rect: CGRect) {
        super.draw(rect)
        self.drawInContext(context: UIGraphicsGetCurrentContext()!);
    }

    func drawInContext(context:CGContext){

        //第一句是调整图形的位置,如不执行绘制的图形会不在视图可见范围内
        context.translateBy(x: 0.0, y: self.frame.size.height);
        //第二句的作用是使图形呈正立显示
        context.scaleBy(x: 1.0, y: -1.0);


        ////获取需要绘制的页码的数据。
        let pageRef:CGPDFPage = self.document!.page(at: self.pageNum)!;

        ////记录当前绘制环境,防止多次绘画
        context.saveGState();


        /*
         返回一个变换映射的盒子矩形作为指定的盒子
         通过交叉相关计算的正确有效的矩形和MediaBox页面的入口。

         旋转的有效直接根据网页/旋转进入。

         中心的矩形在`矩形”。如果“旋转”是非零的,那么

         rect将顺时针旋转`旋转度。`旋转”

         必须是90的倍数。

         大型的矩形,如果必要的话,那么,它与

         对`矩形边缘。如果` preserveaspectratio”是真的,那么最后

         直接将与边缘`矩形”只有在更多的限制性维度。
       */
        let pdfTransForm = pageRef.getDrawingTransform(CGPDFBox.cropBox, rect: self.bounds, rotate: 0, preserveAspectRatio: true);

        context.concatenate(pdfTransForm);//把创建的仿射变换参数和上下文环境联系起来
        context.drawPDFPage(pageRef);//把得到的指定页的PDF数据绘制到视图上
        context.restoreGState();


    }


}
调用示例
/*
 这里只是加载了第一页的内容,具体需求可以自定制。
*/

let pdfURL =   CFBundleCopyResourceURL(CFBundleGetMainBundle(), "Swift" as CFString, "pdf" as CFString, "" as CFString);

        let  document = CGPDFDocument(pdfURL!);
        let totalPage = document!.numberOfPages;
        LLog(totalPage)

        let pdf_view = PDFView(frame: M_RECT(0, y: 20, w: self.view.width, h: self.view.height-100),document:document!,pageNum:1);

        pdf_view.backgroundColor = UIColor.white
        self.view.addSubview(pdf_view)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值