安卓简易PDF阅读器的研究与设计开发Word格式文档下载.docx
《安卓简易PDF阅读器的研究与设计开发Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《安卓简易PDF阅读器的研究与设计开发Word格式文档下载.docx(35页珍藏版)》请在冰点文库上搜索。
Keywords:
Android,PDF,SDK,PDFreader,readSDcard
第一章绪论
1.1概述
手机已经成为了生活中不可缺少的通讯设备,没有手机有时会让人觉得寸步难行。
手机不仅具备传统的打电话、发短信等基本的功能,而且具有强大的处理能力和可扩展能力,能进行电子图书的阅览、基于3G网络实现高速数据传输、第三方浏览软件的运用等,越来越多的功能和业务将被开发出来并大规模的应用。
正基于此,Google于2007年11月5日宣布推出基于Linux平台的开源手机操作系统,号称首个为移动终端打造的真正开放和完整的移动软件——Android。
二十世纪七十年代,著名软件工程师Andsan.Fandamu在美国布朗大学阐述通过计算机创建和阅读文件的时候首次提出了电子书[1](electronic
Book,eBook)这一术语。
电子书是利用现代信息技术创造的全新出版方式,将传统的书籍出版发行方式以数字的形式通过计算机网络实现。
阅读器指的是一个设备,是专门用来看电子书的。
随着数字化的不断兴起,电子阅读器市场的竞争变得越来越激烈。
电子阅读现在是国家和业内非常重视的一个新兴产业,它与国家提倡的“自主创新,增强核心竞争力”、开展低碳、节能环保的社会环境相吻合,很多厂商、科研院所都将目光放到了这个原本没有足够重视的领域上。
同时,手机电子书阅读器作为广大网民经常使用的一个工具,在手机阅读市场逐渐扩大的时候,人们对于阅读的方便性和各种功能设置都有了更高的要求。
虽然现在手机电子书阅读器功能己经比较完善,但是离人们的期望还存在较大的距离,比如改善人们的阅读环境,使人们读起来不感到疲倦而且充满乐趣,同时现在的阅读器多媒体性能还不够完善。
因此,手机电子书阅读器的应用研究还大有潜力可挖。
1.2课题研究的目的和意义
当今社会手机是已经成为了生活中不可缺少的通讯设备,随着科技的发展手机的功能也越来越强大,手机电子阅读器是手机中的一种重要软件,其真正意义上指的是一个可以阅读设备,是专门用来阅读电子书的,随着二十一世纪数字信息化的不断兴起,电子阅读器的市场竞争也变得越来越激烈。
时下社会的进步更是让人们的生活越来越忙碌,抱着厚厚的书本穿梭于大街小巷已经不再适应这个忙碌的时代。
当人们奔波于不同的城市、出没在不同的场所、搭乘不同的交通工具的时候,手机电子阅读器就可以为人们提供方便快捷的阅读平台,它的作用就像一座桥梁,在我们不方便利用书本或者网络的时候提供一个更快更方便的平台,让人们能随时的阅读自己喜欢的电子图书。
就是因为手机电子阅读器方便快捷的优点,使得人们把用手机电子阅读器阅读阅读电子书当做当科技时代的一种时尚。
这也让手机电子阅读器在人们的生活中扮演的角色越来越重要。
1.3本文的结构
本文介绍了作者从了解国内外发展现状,到配置开发环境以及需求分析之后完成工程并且调试成功的过程,展现了简易PDF阅读器的开发历程。
1.4本章小结
本章主要初步介绍了android技术的起源与发展,简易PDF阅读器开发的意义和目的,和电子阅读器这个行业的背景。
第2章研究现状
2.1国内外研究现状
最早出现在市场上的电子书阅读器是美国Soft
Book公司的Soft
Book和Nov.Media公司的RocketBook。
它们都具有美观的外型形状像一本古典的精装书,存储容量分别为8MB和32MB的内存,分别可以容纳5,000和32,000多个电子页的信息,与计算机串口相连,可以从Soft
Book和Nuvo
Media的网上售书连锁店,下载书籍和期刊。
2000年8月,
美国微软公司发布了一个可供人们阅读电子书的应用软件Microsoft
Reader,这种阅读器软件的核心技术是Clear
Type,微软称之为“对液晶显示屏具有革命性的变革”,它是一种能使文字在显示器上的显示效果像印在纸上一样平滑清晰的字符显示技术,这种技术大大提高了屏幕的分辨率和清晰度,使读者能够获得最接近传统书的阅读效果。
同时南开大学津科公司开发了一款阅读不耗电的电子书阅读器,该电子书阅读器已经面市并将投人大规模生产。
它采用了华人科学家吴葆刚博士发明的“多稳态液晶显示器”,并在国际上首次实现了“翻页不耗电”阅读显示。
除了上述几种电子书阅读器之外,EveryBook,Librius,Glass
Book等公司也都推出了自己的电子书阅读器和阅读软件,辽宁出版集团和美国秦通公司联手合作推出了中文电子“掌上书屋”。
随着这些阅读器的出现,使得电子图书、期刊这些原本只能在PC上阅读的东西突然变得可以移动,电子书籍与纸制书籍之间的距离缩短了一大步。
同时,电子书阅读器更方便和灵活的使用功能也在不断地研究推出,例如,可以在阅读的时候加批注、书签、字体可缩放、旋转和支持声音播放等等。
2.2本章小结
本章主要介绍了电子阅读器在国际国内上的发展现状,以及行业背景。
第3章可行性分析
为了开发出真正满足用户需求的软件产品,需要对开发产品做出需求分析。
对软件的需求的合理把握是软件开发周期中非常重要的一个环节,本章将对手机阅读器作较为全面的需求分析。
3.1需求分析
随着手机功能不断增强,手机阅读器已成为智能手机重要软件之一。
开发一款符合广大用户需求的手机阅读器有很好的市场前景和意义。
本软件的目标是开发一款基于Android平台符合用户使用需求的手机电子书阅读器。
本阅读器支持PDF格式的文件。
用户可以通过PDF阅读器从SDCARD选择自己想要观看的PDF文件。
本软件具有美观简洁便于用户使用的触摸界面,这也是Android操作系统不同于传统Windows
Mobile和Symbian系统上应用软件的优势之一。
3.2PDF阅读器功能需求
作为Android平台上开发的应用软件,它具有与用户交互的界面,界面简洁美观易于操作。
因此,对手机阅读器的功能规定可以从手机阅读器的界面来划分。
手机阅读器的用户操作界面分为一下四部分:
读取界面,阅读界面。
3.3运行环境
1.系统要求
Android系统2.2版本以上,对以后继续进行升级开发有可延续性。
2.灵活性
软件基于Android操作系统,是基于组件的开发方式。
3.时间特性的要求
软件的速度要在用户可接受的范围能扩展需求。
4.软件特性要求
软件运行速度要在用户可接受的范围之内,对流量、电量等消耗要在用户可接受范围之内。
3.4开发工具
作者运用Myeclipse软件搭配androidAPK进行软件开发,操作系统为WIN764位,使用虚拟机为android4.0480*800的虚拟机。
3.5本章小结
本章主要介绍了PDF阅读器的需求分析、PDF阅读器的功能需求和软件运行需要的环境和软件的开发环境。
第四章系统设计
4.1结构设计
Android的架构是Linux内核、C/C++函数库、Dalvik虚拟机、应用框架以及关键应用程序构成的,如图1所示,通过编译基于框架的应用程序可以降低开发负荷。
应用软件原则上是在DalvikVM上运行的。
图1Android的架构[1]
关键应用程序
Android平台内包含一些关键应用程序,如邮件收发客户端程序、短信收发程序、日历和网页浏览器等,开发者可以在其平台上开发更多有特色的应用程序。
开发语言是Java。
应用程序框架
Android应用程序的开发基于框架和组件。
Android本身已在其框架中提高了许多的组件供应用程序调用,当然开发者也开放新的组件,并将组件放入应用程序框架中,以供自己和其它应用程序调用。
C/C++函数库
Android应用程序框架之下是一套C/C++函数库,它们服务于Android应用程序组件,其功能通过组件间接提供给开发者。
这些函数库包括:
标准C函数库、媒体功能库、浏览器引擎、2D和3D图形库、基于WEB应用的的安全协议SSL、用于点阵和矢量字体渲染的FreeType以及SQLite引擎等。
Java程序运行环境
Android的Java程序运行环境包含一组Java核心函数库及Dalvik虚拟机,它们有效地优化了Java程序的运行过程。
所有的Android应用都运行在它自己的进程里,该进程是一个Dalvik虚拟机的实例,Dalvik被设计成能在一台设备上高效的运行多个虚拟机实例。
Dalvik虚拟机的可执行文件被封装成Dalvik可执行格式(.dex)。
这是被优化过的最小内存依赖的格式。
Java编译器(dx工具)将注册了的和运行时用到的类编译成.dex格式。
Dalvik虚拟机依赖于底层Linux内核提供的功能,如线程机制,和内存管理机制等。
Linux内核
Android系统平台是基于优化了的Linux内核,是其系统平台的核心。
它提供诸如内存管理、进程管理、设备驱动等服务,同时也是手机软硬件的连接层,提供了一个屏蔽层用于屏蔽硬件和上层软件。
4.2系统功能设计
应用平台层是位于Android操作系统与应用层之间的,HomeScreen是用来用用程序显示的,它是用来管理和开启应用程序的平台。
最上层的是应用程序,该层包含手机上安装的各种应用程序,只要包括:
日历,地图,联系人,短信,电话,闹钟等。
本文设计的手机电子说阅读器就是属于应用层。
图2-系统功能设计
4.3本章小结
本章介绍了系统设计的概要。
第五章系统实现
5.1界面设计
界面设计见图3、图4、图5、图6、图7。
本阅读器的界面简单明了,使用户在最短时间内打开自己想要查看的PDF,省略花哨的界面只保留最有用的功能。
图3-阅读器初始界面
图4阅读器打开PDF界面
、
图5-阅读器未找到PDF界面
图6-阅读器查找PDF界面
图7-阅读器在应用程序列表中的图标
5.2阅读PDF功能
本功能可以在android手机上将PDF文件以图片的形式打开,解决以往PDF文件在手机上无法查看的问题。
部分代码如下:
packagecom.sun.pdfview。
importjava.util.Iterator。
importjava.util.List。
importnet.sf.andpdf.utils.Utils。
importandroid.graphics.Matrix。
importandroid.graphics.PointF。
importandroid.graphics.RectF。
importandroid.util.Log。
importcom.sun.pdfview.font.PDFFont。
importcom.sun.pdfview.font.PDFGlyph。
publicclassPDFTextFormatimplementsCloneable{
/**characterspacing*/
privatefloattc=0。
/**wordspacing*/
privatefloattw=0。
/**horizontalscaling*/
privatefloatth=1。
/**leading*/
privatefloattl=0。
/**riseamount*/
privatefloattr=0。
/**textmode*/
privateinttm=PDFShapeCmd.FILL。
/**textknockout*/
privatefloattk=0。
/**currentmatrixtransform*/
privateMatrixcur。
/**matrixtransformatstartofline*/
privateMatrixline。
/**font*/
privatePDFFontfont。
/**fontsize*/
privatefloatfsize=1。
/**arewebetweenBTandET?
*/
privatebooleaninuse=false。
//privateObjectarray[]=newObject[1]。
/**buildtextrepofword*/
privateStringBufferword=newStringBuffer()。
//thisiswherewebuildandkeepthewordlistforthispage.
/**startlocationofthehunkoftext*/
privatePointFwordStart。
/**locationoftheendoftheprevioushunkoftext*/
privatePointFprevEnd。
/**
*createanewPDFTextFormat,withinitialvalues
publicPDFTextFormat(){
cur=newMatrix()。
line=newMatrix()。
wordStart=newPointF(-100,-100)。
prevEnd=newPointF(-100,-100)。
tc=tw=tr=tk=0。
tm=PDFShapeCmd.FILL。
th=1。
}
*resetthePDFTextFormatforanewrun
publicvoidreset(){
cur.reset()。
line.reset()。
inuse=true。
word.setLength(0)。
*endaspanoftext
publicvoidend(){
inuse=false。
/**getthecharspacing*/
publicfloatgetCharSpacing(){
returntc。
/**setthecharacterspacing*/
publicvoidsetCharSpacing(floatspc){
this.tc=spc。
/**getthewordspacing*/
publicfloatgetWordSpacing(){
returntw。
/**setthewordspacing*/
publicvoidsetWordSpacing(floatspc){
this.tw=spc。
*Getthehorizontalscale
*@returnthehorizontalscale,inpercent
publicfloatgetHorizontalScale(){
returnth*100。
*setthehorizontalscale.
*@paramsclthehorizontalscale,inpercent(100=normal)
publicvoidsetHorizontalScale(floatscl){
this.th=scl/100。
/**gettheleading*/
publicfloatgetLeading(){
returntl。
/**settheleading*/
publicvoidsetLeading(floatspc){
this.tl=spc。
/**getthefont*/
publicPDFFontgetFont(){
returnfont。
/**getthefontsize*/
publicfloatgetFontSize(){
returnfsize。
/**setthefontandsize*/
publicvoidsetFont(PDFFontf,floatsize){
this.font=f。
this.fsize=size。
*Getthemodeofthetext
publicintgetMode(){
returntm。
*setthemodeofthetext.Thecorrespondenceofmtomodeis
*showinthefollowingtable.misavaluefrom0-7inbinary:
*
*000Fill
*001Stroke
*010Fill+Stroke
*011Nothing
*100Fill+Clip
*101Stroke+Clip
*110Fill+Stroke+Clip
*111Clip
*
*Therefore:
Fillcorrespondstothelowbitbeing0。
Clip
*correspondstothehightbitbeing1。
andStrokecorresponds
*tothemiddlexorlowbitbeing1.
publicvoidsetMode(intm){
intmode=0。
if((m&
0x1)==0){
mode|=PDFShapeCmd.FILL。
0x