以前写了一篇文章:读取PDF,这篇文章实现了同样的功能,在原来的基础上增加了上一页和下一页的功能。
pdfViewController.h
#import <UIKit/UIKit.h>
#import "PDFView.h"
@interface pdfViewController : UIViewController {
IBOutlet PDFView *pdfview;
}
- (IBAction)goNextPage:(id)sender;
- (IBAction)goPrePage:(id)sender;
@end
pdfViewController.m
#import "pdfViewController.h"
@implementation pdfViewController
- (void)viewDidLoad {
pdfview = [[PDFView alloc] initWithFrame:pdfview.frame andFileName:@"metro.pdf"];
[self.view addSubview:pdfview];
[pdfview release];
[super viewDidLoad];
}
- (IBAction)goNextPage:(id)sender{
[pdfview goDownPage];
}
- (IBAction)goPrePage:(id)sender{
[pdfview goUpPage];
}
@end
PDFView.h
#import <UIKit/UIKit.h>
@interface PDFView : UIView {
//这个类封装了PDF画图的所有信息
CGPDFDocumentRef pdf;
//PDFDocument中的一页
CGPDFPageRef page;
//总共页数
int totalPages;
//当前的页面
int currentPage;
}
//当前视图初始化类,在该方法中会创建一个CGPDFDocuemntRef对象,传递一个PDF文件的名字和所需要页面的大小
- (id)initWithFrame:(CGRect)frame andFileName:(NSString *)fileName;
//创建一个PDF对象,此方法在初始化方法中被调用
- (CGPDFDocumentRef)createPDFFromExistFile:(NSString *)aFilePath;
- (void)reloadView;
//页面之间的跳转
- (void)goUpPage;
- (void)goDownPage;
@end
PDFView.m
#import "PDFView.h"
@implementation PDFView
- (id)initWithFrame:(CGRect)frame andFileName:(NSString *)fileName {
if (self = [super initWithFrame:frame]) {
NSString *dataPathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];
pdf = [self createPDFFromExistFile:dataPathFromApp];
self.backgroundColor = [UIColor clearColor];
}
return self;
}
- (CGPDFDocumentRef)createPDFFromExistFile:(NSString *)aFilePath {
CFStringRef path;
CFURLRef url;
CGPDFDocumentRef document;
path = CFStringCreateWithCString(NULL, [aFilePath UTF8String], kCFStringEncodingUTF8);
url = CFURLCreateWithFileSystemPath(NULL, path, kCFURLPOSIXPathStyle, NO);
CFRelease(path);
document = CGPDFDocumentCreateWithURL(url);
CFRelease(url);
totalPages = CGPDFDocumentGetNumberOfPages(document);
currentPage = 1;
if (totalPages == 0) {
return NULL;
}
return document;
}
- (void)drawRect:(CGRect)rect {
//得到绘图上下文环境
CGContextRef context = UIGraphicsGetCurrentContext();
//得到一个PDF页面
page = CGPDFDocumentGetPage(pdf, currentPage);
//进行坐标转换,这是因为Quartz的坐标系统是以左下角为起始点,但iPhone视图是以左上角为起始点
CGContextTranslateCTM(context, 0.0,self.bounds.size.height);
//转变坐标系
CGContextScaleCTM(context, 1.0, -1);
CGContextDrawPDFPage(context, page);
}
- (void)dealloc {
[super dealloc];
}
- (void)reloadView {
[self setNeedsDisplay];
}
- (void)goUpPage {
if(currentPage < 2)
return;
--currentPage;
[self reloadView];
}
- (void)goDownPage {
if(currentPage >= totalPages)
return;
++currentPage;
[self reloadView];
}
@end
分享到:
相关推荐
在“pdf.js读取pdf文档”的场景中,我们主要会涉及到以下几个关键知识点: 1. PDF.js库的使用: PDF.js提供了API来加载、解析和显示PDF文件。开发者可以通过调用`PDFJS.getDocument(url)`方法来加载PDF文档,然后...
在IT领域,特别是Java编程中,读取PDF文件的元数据是一项常见的需求,尤其是在文档管理、内容管理系统或任何需要处理大量文档的应用场景中。本文将深入探讨如何使用Java读取PDF文件的属性,如作者、标题等元数据,...
在.NET开发环境中,生成PDF、读取PDF文本内容以及获取PDF内的图片是常见的需求,尤其在文档处理和报告生成的应用中。本文将详细介绍如何利用C#进行这些操作,并提供相关库和技术的概述。 首先,生成PDF文件在.NET中...
在Java编程环境中,读取PDF文件是一项常见的任务,特别是在开发桌面应用或需要处理PDF文档内容时。本篇文章将深入探讨如何使用Java来读取PDF文件,并将其内容展示在一个由JFrame和JPanel构建的GUI窗口中。 首先,...
在C# Winform环境下,开发一个能够高效读取PDF文件的应用是常见的需求。通常,我们可能会选择使用WebBrowser控件来展示PDF,但这并非最佳方案,因为它依赖于系统中的Adobe Acrobat Reader,且性能可能不尽人意。本...
本主题聚焦于利用C#处理PDF文档,包括生成PDF、读取PDF文本内容以及获取PDF内的图片。以下是对这些知识点的详细阐述: ### 1. C#生成PDF 生成PDF文件通常需要借助第三方库,因为.NET Framework的标准库并不直接...
本篇文章将围绕“C#读取PDF中文本内容”这一主题,详细介绍如何使用Spire.Pdf插件来解决这个问题。 首先,Spire.Pdf是一款强大的.NET PDF组件,它提供了全面的PDF创建、编辑和阅读功能,包括读取PDF中的文本内容。...
在.NET环境中,C#开发人员经常需要处理PDF文档,包括生成PDF、读取PDF文本以及提取PDF中的图像。为了实现这些功能,通常会借助于第三方库或DLL,因为.NET框架本身并不内置完整的PDF处理能力。本教程将详细介绍如何...
本主题聚焦于利用C#处理PDF文档,包括生成PDF、读取PDF文本内容以及提取PDF内的图片。以下是对这些知识点的详细阐述: 1. **C# 生成PDF**: 在C#中生成PDF文档,可以借助多种第三方库,如iTextSharp、PDFsharp、...
本主题聚焦于利用C#处理PDF文档,包括生成PDF文档、读取PDF文本内容以及提取PDF内的图片。以下将详细介绍这些知识点。 1. **生成PDF**: 在C#中生成PDF文档,我们可以使用开源库如iTextSharp或PDFsharp。...
PDFLIB库是一个强大的PDF处理库,它为程序员提供了在各种编程环境中创建、修改和读取PDF文件的功能。在这个场景中,我们关注的是如何在Visual Studio 2010(VS2010)中利用PDFLIB TET库来读取PDF文件。TET是PDFLIB的...
Java作为一种强大的编程语言,提供了多种库来处理PDF文档,其中一个关键任务是读取PDF中的数据。本篇文章将详细介绍如何使用Java进行PDF数据的读取,并围绕`PdfReader`这个概念展开。 首先,`PdfReader`通常指的是...
Qt使用mupdf库读取pdf文件,并且显示到界面上,只是一个简单的Demo,介绍了库的使用。 Qt使用mupdf库读取pdf文件,并且显示到界面上,只是一个简单的Demo,介绍了库的使用。 Qt使用mupdf库读取pdf文件,并且显示到...
本篇文章将详细探讨如何使用C#编程语言结合Spire.Pdf库来读取PDF文件的内容,并将其转换为JSON文本对象,特别针对那些仅包含可编辑文字的PDF文件。 首先,Spire.Pdf是一款强大的.NET PDF组件,它提供了丰富的API,...
下面我们将深入探讨如何使用C#和PDFBox的IKVM版本来读取PDF文件: 1. **安装IKVM**: 首先,你需要获取PDFBox的Java库,并且下载IKVM的.NET版本。将IKVM的dll文件添加到你的C#项目引用中,同时也要包含PDFBox的Java...
Adobe提供了免费的PDF iFilter,它允许程序以文本格式读取PDF内容。然而,对于更复杂的操作,如渲染PDF页面,我们需要使用专门的库,如iTextSharp或PDFsharp。这些库提供了API,可以读取、修改和创建PDF文件。 **1....
C++程序读取PDF中的文本。Adobe允许你提交PDF文件,提取成文本或HTML后再通过邮件发送给你。但是假如你需要自己提取文本或在程序中加入这个功能的话,需要花费很多时间。也许你还需要对文本应用某些特殊格式(如,...
在Windows Forms(Winform)应用开发中,读取PDF文件是一项常见的需求,特别是在需要提供用户交互界面以查看、操作PDF文档的场景下。本篇将详细介绍如何使用C#语言在Visual Studio 2012环境下实现窗体在线读取PDF,...
在Android平台上,生成和读取PDF文件是一项常见的需求,特别是在数据导出、报告生成或文档共享等场景。iText是一个强大的开源库,它允许开发者在Java和.NET环境中创建、编辑和处理PDF文档。在这个场景中,我们将探讨...