iOS 与 pdf 交互

关于objective—c如何让JPG文件转化成PDF形式 这个是一页纸有时候会有两个图。也可以一张图,一张图相对就非常简单了,就不用写了,也可以加我的 QQ :1342438493 //// ViewController.m// PDF//// Created by lixi on 15/6/29.// Copyright (c) 2015年 lx. All rights reserved.// #import "ViewControl 阅读详情

iOS读取和显示PDF文档

在iOS创建PDF文件中简单介绍了如何生成pdf文件。现在有需求要显示PDF文档。看了一下Apple的API,大概有两种方法:

  • 使用WebView,可以直接读取PDF,这个比较简单,可参见:最简单的WebView应用,缺点是自定义的能力较弱,优点是简单,像读取网页一样;
  • 使用自定义的UIView,需要继承UIView,自定义效果很好,问题是需要了解和使用的API较多。

本文只说明自定义UIView的方法。实现的在iPad模拟器上的效果:

image

本文方法参考了:官方文档。见A function that draw a PDF page的代码部分:

void MyDisplayPDFPage (CGContextRef myContext,
                    size_t pageNumber,
                    const char *filename)
{
    CGPDFDocumentRef document;
    CGPDFPageRef page;
    CGRect box;
 
    document = MyGetPDFDocumentRef (filename);// 1
    page = CGPDFDocumentGetPage (document, pageNumber);// 2
    CGContextDrawPDFPage (myContext, page);// 3
    CGPDFDocumentRelease (document);// 4
}

可见,编写读取的代码很简单,只需给定三个参数即可。后两个很容易,pageNumber是int型的数字,表示第几页,filename是肯定知道的。问题是如何获取CGContextRef,这个类型对象是用于绘图的上下文对象引用,没有它就没法绘制到屏幕界面上。

查了一下文档,特别是这个帖子:

http://stackoverflow.com/questions/3287635/how-to-parse-pdf-in-objective-c-for-ipad

看来要继承UIView,才能得到当前视图的Context。基本思路是覆盖UIView的drawRect方法,在该方法中:

- (void)drawRect:(CGRect)rect {
    [self drawInContext:UIGraphicsGetCurrentContext()];
}

调用UIGraphicsGetCurrentContext方法,将当前的图形上下文设置给调用PDF的代码。drawRect方法会在iOS系统绘制界面的时候调用。

下面来说说编写代码的步骤,首先创建一个view-based application,然后,通过IB,设置控制器到view的关联。

以下不再用IB了,PDF的UIView是通过程序生成的。

创建PdfView类,是UIView的子类。头文件:

#import <Foundation/Foundation.h>

@interface PdfView : UIView {
    CGPDFDocumentRef pdf;
}

-(void)drawInContext:(CGContextRef)context;

@end

 

里面带一个成员,pdf,代表pdf文档对象的引用。一个方法,用于根据图形上下文在视图中绘制制定的pdf页面。

m文件:

#import "PdfView.h"

@implementation PdfView
- (id)initWithFrame:(CGRect)frame{
   
    if ((self = [super initWithFrame:frame]))
    {
        // Initialization code
        if(self != nil)
        {
            CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("test.pdf"), NULL, NULL);
            pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
            CFRelease(pdfURL);
        }
    }
    return self;
}

-(void)drawInContext:(CGContextRef)context
{
    // PDF page drawing expects a Lower-Left coordinate system, so we flip the coordinate system
    // before we start drawing.
    CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
   
    // Grab the first PDF page
    CGPDFPageRef page = CGPDFDocumentGetPage(pdf, 1);
    // We’re about to modify the context CTM to draw the PDF page where we want it, so save the graphics state in case we want to do more drawing
    CGContextSaveGState(context);
    // CGPDFPageGetDrawingTransform provides an easy way to get the transform for a PDF page. It will scale down to fit, including any
    // base rotations necessary to display the PDF page correctly.
    CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, self.bounds, 0, true);
    // And apply the transform.
    CGContextConcatCTM(context, pdfTransform);
    // Finally, we draw the page and restore the graphics state for further manipulations!
    CGContextDrawPDFPage(context, page);
    CGContextRestoreGState(context);
}

- (void)drawRect:(CGRect)rect {
    [self drawInContext:UIGraphicsGetCurrentContext()];
}

在这里使用的pdf文档,是放在项目的Resources目录下的。

再往下,就是在Controller中通过程序创建PdfView实例,并将它关联为Controller根视图的子视图:

- (void)viewDidLoad {
    [super viewDidLoad];
    CGRect frame = CGRectMake(0, 0, 768, 1000);
   
    PdfView *pdfView = [[PdfView alloc] initWithFrame:frame];
    pdfView.backgroundColor=[UIColor whiteColor];
    [self.view addSubview:pdfView];
   
}

 

这里因为是使用iPad,因此长宽是1000(上面留点空间)和768。另外,需要设置底色,默认情况下底色是黑色的,和黑体的文字在一起就显示不出文字了,我设置的是白色:

pdfView.backgroundColor=[UIColor whiteColor];

这样就可以了,而且中文啥的都没问题。

IOS webview vue h5 vue-pdf 预览 <template> <div class="main"> <!-- <header-back></header-back> --> <!-- <van-nav-bar left-text="返回" title="pdf查看" left-arrow @click-left="onClickLeft" /> --> <header-back>&lt.. 阅读详情

相关推荐

uniapp集成pdf.js实现移动端PDF高效预览与交互优化

本文详细介绍了在UniApp中集成pdf.js实现移动端PDF高效预览与交互优化的完整方案。通过web-view组件嵌入开源库pdf.js,构建了可深度定制的内置PDF阅读器,解决了依赖外部应用、界面割裂等问题。文章重点阐述了如何打通UniApp与pdf.js的双向通信、处理PDF文件加载、进行性能优化(如启用Web Worker)以及实现阅读进度同步等高级功能,为开发者提供了一套兼顾功能与体验的移动端PDF预览实践指南。

weixin_29255731的博客 626

NSData to pdf //CGContextRef相关的操作 // iOS读取和显示PDF文档

使用下面函数创建一个pdf CGPDFDocumentRef CGPDFDocumentCreateWithProvider ( CGDataProviderRef provider ); 复制代码 创建provider使用下面函数 CGDataProviderRef CGDataProviderCreateWithCFData ( CFDataRef data ); ...

weixin_34071713的博客 330

iOS应用中PDF文件渲染与交互技术详解

在开始深入探讨如何在iOS应用中渲染PDF文档之前,让我们先了解一下Core Graphics框架。Core Graphics是iOS和macOS中用于2D渲染的低级API,它允许开发者直接与图形上下文进行交互,执行基本的图形任务,如绘制形状、处理图像以及渲染PDF文档等。它是基于Quartz图形引擎,提供了一套丰富的API来创建和操作图形,图形上下文是其核心概念之一。使用Core Graphics框架进行PDF渲染时,可以控制渲染过程中的许多细节,比如页面的缩放、裁剪、文本解析等。

weixin_33812391的博客 752

Convert PDF to Word in Objective-C, Kotlin, and C#

PDFs and Word documents are widely used in everyday business. When you need to make a PDF file editable or text searchable, you may want to convert it to a Word document. In this article, I'll provide a solution for how to convert PDF to Word using Com

weixin_66974439的博客 408

iOS平台PDF阅读器开发指南

本文还有配套的精品资源,点击获取 简介:开发iOS平台的PDF阅读器是常见的开发需求,特别是使用Xcode 4.4及以上版本提供的WebKit框架和UIWebView组件。本文介绍了如何利用这些工具实现PDF加载、交互功能和自定义阅读器,并讨论了性能优化与安全性。文章强调了WKWebView作为UIWebView的替代方案,以及PDFKit和其他第三方库在实现高级PDF功能...

weixin_36047538的博客 1340

IOS开发 读取PDF文件

使用UIView的方式,读取本地的PDF文档

iOS-后台返回pdf的NSData,写入pdf

该项目是下载转化后的pdf文件,当请求后发现后台返回的是处理过的psf的NSData文件流,很棘手。NSData *doubi = responseObject; // 二进制流写入文件 NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDom

征战无悔人生 4037

python 编程 安卓脚本_详解基于Android的Appium+Python自动化脚本编写

1.AppiumAppium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试, 它使用WebDriver协议驱动iOS,Android和Windows应用程序。通过Appium,我们可以模拟点击和屏幕的滑动,可以获取元素的id和classname,还可以根据操作生成相关的脚本代码。下面开始Appium的配置。appPackage和APPActivity的获取任意下载一个app解压...

weixin_39523625的博客 2928

iOS - UIDocumentInteractionController 打开pdf

添加代理,  UIDocumentInteractionControllerDelegate @property (strong, nonatomic) UIDocumentInteractionController *documentInteractionController; -(void)seePDF{ // 查看 // NSString *filename =...

iotjin的专栏 612

用户消费行为分析(MapReduce实现,Hive分析)

一、题目要求 数据来自CDNow网站的一份用户购买CD明细,本数据集共有 6 万条 左右数据,数据为 CDNow 网站 1997年1月至1998年6月的用户行为 数据

紫烟的博客 3013

微信小程序-如何根据缩放屏幕大小自适应icon图标更改marker

微信小程序如何根据用户的缩放屏幕来改变marker图标icon的大小,实现icon自适应屏幕缩放的效果

Bartender_VA11的博客 3980

展示PDF文件——Android/IOS

年后到现在,公司的项目紧,导致年初的计划并没有很好的执行。 最近熬夜越熬越晚,希望6月前能如期完成第一个目标。今天谈谈直接在代码中加载PDF文件(公司的新需求,就地取材)。我的需求背景: 1.首先,随着移动端继续侵占PC的场景,手机上阅读越来越普遍,而一些既有的PDF文本也就被希望加载到手机端做友好展示 2.其次,公司新项目的思路是展示型,尽可能减少网络交互(即尽可能少的调用接口获取数据),除

LeBang的博客 4626

库卡C4控制柜首次上电

本文详细介绍了如何使新购的库卡机器人(以KRC4为例)达到正常运行状态。首先,必须正确连接机器人尾部和控制柜底部的各种线缆,包括动力线缆、编码器线、SmartPad线和安全回路线缆等。特别强调,电源线和蓄电池线的正确连接至关重要,避免硬插以防损坏。此外,机器人与控制柜之间需连接地线以防止漏电。文章还提到,开机前需检查电机保护器开关,并确保所有线路连接正确。开机后,需提升用户权限至安全维护员级别,通过系统配置激活安全相关通讯参数。最后,文章详细解释了X11安全回路的接线方式,强调双通道信号的重要性,并提醒不同

2202_75959322的博客 1836

如何快速为iOS应用集成专业级PDF阅读功能:终极指南

想在您的iOS应用中添加流畅的PDF阅读功能吗?今天为您介绍一个强大的开源解决方案——Reader,这是一个专为iOS开发者设计的PDF阅读器核心框架。无论您正在开发教育应用、文档管理工具,还是企业级办公软件,这个框架都能帮助您快速实现高质量的PDF阅读体验。 [![Reader应用图标](https://raw.gitcode.com/gh_mirrors/read/Reader/raw/a4

gitblog_01076的博客 373

RK3568—基于GM8775C的MIPI转双通道LVDS屏幕调试

Rockchip RK3568 原生显示接口不支持双通道LVDS屏幕的数据输出,因此需要借助显示转换芯片才能实现双通道LVDS屏幕的驱动。本文介绍使用GM8775C芯片方案,在 RK3568 平台实现单路 MIPI DSI 信号输出来驱动双通道LVDS显示屏。 关于GM8775C GM8775C 型 DSI 转双通道 LVDS 发送器产品主要实现将 MIPI DSI 转单/双通道 LVDS功能,MIPI 支持 1/2/3/4 通道可选,每通道最高支持 1Gbps 速率,最大支持 4Gbps 速率。LV.

Industio_优快云的博客 1万+

最全中文停用词表(可直接复制)

最全的停用此表整理 词表名 词表文件 中文停用词表 cn_stopwords.txt 哈工大停用词表 hit_stopwords.txt 百度停用词表 baidu_stopwords.txt 机器智能实验室停用词库 scu_stopwords.txt 以上停用词表链接:https://github.com/goto456/stopwords 以下是我常用的1893个停用词,可直接复制 ! " # $ % & ' ( ) * + , - -- . .. ... ....

dilifish的博客 12万+

如何使用FastPdfKit:iOS高性能PDF处理库的完整指南

FastPdfKit是一款专为iOS应用设计的高性能PDF处理库,能够帮助开发者轻松实现在应用中显示PDF文档的功能,解决了QuickLook框架存在的性能问题和功能缺失。它支持侧边滚动、带高亮结果的搜索、预览和缩略图、文本提取、叠加视图、嵌入式多媒体等多种强大功能,是iOS开发中处理PDF文件的理想选择。 ## FastPdfKit的核心优势 FastPdfKit作为一款专业的PDF处理库,

gitblog_00031的博客 661

ShardingSphere分库分表教程,java后端开发面试题

???? 简介:Java领域优质创作者????、优快云哪吒公众号作者✌ 、Java架构师奋斗者???? ???? 扫描主页左侧二维码,加入群聊,一起学习、一起进步 ???? 欢迎点赞 ???? 收藏 ⭐留言 ???? 目录 一、分库分表 二、分库分表的方式 1、垂直分表 2、垂直分库 3、水平分表 4、水平分库 三、分库分表带来的问题 1、学习成本问题 2、事务问题 3、跨节点join问题 4、跨节点的count、order by、group by以及聚合函数问题 5、数据迁移、容量规划、扩

m0_64205716的博客 3015

iOS pdf的显示和浏览

方法一:利用webview -(void)loadDocument:(NSString *)documentName inView:(UIWebView *)webView   {       NSString *path = [[NSBundle mainBundle] pathForResource:documentName ofType:nil];       N

有木有啊的专栏 5858

Openclaw第4章:本地文件管理

OpenClaw本地文件管理功能摘要: OpenClaw提供强大的本地文件管理能力,主要功能包括: 智能文件搜索:支持内容搜索、自然语言描述、跨文件夹搜索和智能过滤排序,比传统文件名搜索效率提升10倍以上 批量文件处理:可自动整理发票、提取PDF内容、识别名片信息,批量处理数百文件仅需几分钟 文件自动整理:支持智能重命名、自动分类和文件夹优化,如将1000+照片按日期地点自动分类 典型应用场景: 30秒找到忘记名称的重要文件 5分钟完成原本需要1小时的发票整理工作 1句话指令完成数百文件的批量重命名 优势:

Maynor的博客 1694

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

view转image

#import "ViewController.h" @interface ViewController ()<UIDocumentInteractionControllerDelegate> @property(nonatomic,strong)UIDocumentInteractionController *documentInteractionController; @property (nonatomic ,assign) BOOL isAppear; ...

鱼儿的博客 298

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

PDFKitten:iOS平台上的PDF数据提取框架

PDFKitten:iOS平台上的PDF数据提取框架 项目基础介绍及编程语言 PDFKitten 是一个基于Objective-C编写的开源框架,专门用于在iOS设备上从PDF文档中提取数据。它旨在提供一个实验性的解决方案来展示如何在第三方应用内部实现PDF文档的搜索和高亮功能,填补了iOS系统本身不提供PDF文档搜索公共API的空白。 核心功能 PDFKitten的核心功能集中于搜索PDF文档中...

gitblog_00838的博客 461

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

探索iOS 11的无限可能:PDFKit实例解析与应用

探索iOS 11的无限可能:PDFKit实例解析与应用 在当今这个数字化阅读盛行的时代,处理PDF文件几乎成为每个平台不可或缺的功能之一。苹果在iOS 11中引入了强大的PDFKit框架,为开发者们打开了新的篇章。今天,我们要推荐的是一个基于iOS 11的PDFKit-Example项目,这不仅是一个技术示例,更是一扇通往高效PDF操作的大门。 项目介绍 iOS11-PDFKit-Example是...

gitblog_00005的博客 564

YYText打印功能终极指南:iOS富文本导出PDF完整教程

YYText是一个功能强大的iOS富文本框架,专门用于显示和编辑丰富的文本内容。本指南将详细介绍如何使用YYText框架实现富文本的打印功能,特别是将复杂富文本内容导出为PDF文档的完整流程。 YYText不仅支持基本的文本显示,还提供了完整的富文本渲染能力,包括图片附件、自定义视图、链接高亮等高级功能,让您能够轻松创建专业级别的文档输出。 ## YYText架构解析:理解核心组件 [![Y

gitblog_00675的博客 633

iOS一些实用的技巧

获取触摸的点 - (CGPoint)locationInView:(UIView *)view; - (CGPoint)previousLocationInView:(UIView *)view; 自动适应父视图大小self.view.autoresizesSubviews = YES; self.view.autoresizingMask = UIViewAutoresizing

silence_0313的博客 350
上一篇: UIWebView与JavaScript 交互
下一篇: 解决OBJC_CLASS_$_MBProgressHUD无法引用的问题
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值