




已阅读5页,还剩70页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文)任务书 第1页毕业设计(论文)题目:Linux环境下电子阅读器的设计与实现毕业设计(论文)要求及原始数据(资料):1查看并了解电子阅读器的编码和解码;2深入了解专用电子阅读器文件格式的解读以及转码;3熟练掌握电子阅读器阅读器的设计原理,训练编写程序的能力;4学会在Linux环境下应用qt编程,开发;5深入分析电子阅读器编码解码的关键技术与语言;6训练检索文献资料和利用文献资料的能力; 7训练撰写技术文档与学位论文的能力。第2页毕业设计(论文)主要内容:1综述电子阅读器在日常生活和社交层面的应用;2了解设计电子阅读器的相关技术;3熟悉了解电子阅读器的qt开发环境; 4深入分析电子阅读器的关键技术与程序设计流程;5. 熟练掌握电子阅读器的制作和测试;学生应交出的设计文件(论文):1内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;2包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。 第3页主要参考文献(资料):1 相洁. 软件开发环境与工具. 太原理工大学出版社, 20122 庞丽萍,郑然. 操作系统原理与linux系统实验. 机械工业出版社,2011 3 严蔚敏. 数据结构. 清华大学出版社,20024 陈洁. Linux窗口程序设计Qt4精彩实例分析. 清华大学, 20085 宫虎波. Linux编程从入门到精通. 化学工业出版社, 20096 Kennetha Reek. Pointers On C M. ADDISON WESLEY Publishing Company Incorporated, 19987 Andrew Koenig. C Trap and Pitfalls M. Pearson Education, 19898 Jasmin Blanchett, Mark Summerfield. C.plus.plus.GUI.Programming.with.Qt.4 M. Prentice Hall, 20089 Robert Love. Linux Kernel Development M. Pearson Education, 201010 W. Richard Stevens, Stephen A. Rago. Advanced Programming in the UNIX Environment. Prentice Hall, 1998专业班级学生要求设计(论文)工作起止日期2014年3月17日2014年6月10日指导教师签字日期2014年3月17日教研室主任审查签字日期系主任批准签字日期基于Linux电子阅读器的实现摘 要近年来,Linux嵌入式技术得到迅速的发展并已经成为计算机产业的一个技术热点。促成嵌入式高速发展的因素之一就是模拟器技术。模拟器技术的发展无论是对于软件开发人员还是软件学员来说是一笔巨大的财富和福利,原因在于各大公司利益导致的平台独占问题,导致一些平台(如某家公司的手机和掌机)的文件(如UMD移动文档格式)以及程序只能在其对应的平台使用,而不能在PC端甚至我们熟知的Linux环境下浏览,查看以及开发。于是就出现各种各样的模拟器,这些模拟器的作用就是模拟那些平台的运行环境,以便于达到浏览,运行甚至开发这些平台文件的目的。在数据和资源共享的时代,虽然我们要支持产品版权,但是我们也要反对垄断,这样,许多虚拟机包括转码程序就应运而生。基于它们本身的作用以及属性,它们现阶段或许不能够正式地面向一些大批量产品市场,但是,这些小程序能够提供足够的范例以教学使用并促进嵌入式软件的开发。其中包括本次项目中解决UMD移动格式独占问题的Linux下电子阅读器的模拟器程序。关键词:嵌入式,Linux,模拟器,UMD格式,平台独占The Realization of electronicreaderbased on LinuxAbstract In recent years,the embedded Linuxtechnology is developing rapidlyandhas become ahot technology point in the computer industry. One reason forthe rapid development oftechnologyis embeddedsimulator. The development ofsimulator technologybothfor softwaredevelopersor softwarestudentsisa great wealthand welfare. The reasonis thateach big companyinterests causeplatformmonopoly,leading someplatform(such asa companysmobile phone and handheld) file (such as UMD mobile document format) and program can only be used on the platform, but not in the PC end and the Linux we know environment to browse, view and development. Hence a variety of simulator, the simulator is the role of the platform running environment, in order to browse, operation and development of these platform file purpose. In the data and resource sharing time, although we have to support product copyright, but we also want to oppose monopoly, so, many virtual machine includes a transcoding will emerge as the times require. Their role and attribute based on the stage, they may not be able to formally ground to some large quantities of products to the market, however, these small program can provide enough examples in teaching and promote the development of embedded software. Including the simulator program electronic reader UMD mobile format exclusive problem of Linux under the project. Key words: embedded system, Linux, simulator, UMD format, Platform exclusiveii目 录摘 要iAbstractii1引 言12 环境工具介绍32.1 Linux系统介绍32.2 QTcreator环境介绍42.3 GCC编译环境介绍52.3.1 前端接口62.3.2 中介接口62.3.3 后端接口62.3.4 基本用法72.4 文件架构依赖包的使用简介72.4.1 zlib的简介以及作用72.4.2 qmake介绍以及特点83 系统分析93.1 格式介绍93.1.1 PC格式93.1.2 手机格式103.2 技术需求分析103.2.1 UMD格式解码技术103.2.2 C语言开发依据以及执行过程123.3 可行性分析124 概要设计134.1 总体功能134.2 功能展示以及UI界面描述134.3 代码框架以及程序总流程144.3.1 代码框架144.3.2 程序总流程155 详细设计以及实现175.1 后台设计175.1.1 UMD命名空间175.1.2 Umdparser195.1.3 bookmarkwidget书签插件设计205.1.4 主界面的设计215.2 主要功能设计235.2.1 UMD文件的打开235.2.2 UMD文件的阅览265.2.3 转码功能的实现425.2.4 书签功能的设计与实现466 程序测试和调试546.1 程序调试546.2 程序测试546.2.1 测试重要性以及目的546.2.2 测试主要步骤以及思想556.2.3 测试内容556.2.4 测试用例557 结术语577.1 软件总体评价577.2 文件格式兼容性以及功能扩展评估577.2.1 关于对PDF格式的开发决议577.2.2 操作系统兼容性577.2.3 apk文件扩展57参考文献58致 谢59外文文献60中文翻译6531 引 言说到本项目我们需要简单了解以下技术背景。 嵌入式 Linux是以Linux为基础的嵌入式作业系统,它被广泛应用在移动电话、个人数字助理(PDA)、媒体播放器、消费性电子产品以及航空航天等领域中。它的目的是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。嵌入式linux既继承了Internet上无限的开放源代码资源,又具有嵌入式操作系统的特性。嵌入式Linux的特点是版权费免费;购买费用媒介成本技术支持全世界的自由软件开发者提供支持网络特性免费,而且性能优异,软件移植容易,代码开放,有许多应用软件支持,应用产品开发周期短,新产品上市迅速,因为有许多公开的代码可以参考和移植,实时性能RT_Linux Hardhat Linux 等嵌入式Linux支持,实时性能稳定性好安全性好。而作为计算机发展最迅速的领域之一的嵌入式技术,已经形成了一整套独有的理论,并广泛地应用于人们的生产和生活中。但是,为了将这样的技术进行教学普及以便于社会生产和使用,于是就诞生了其逆向技术虚拟机技术。虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机软件或系统,而虚拟机技术,顾名思义,就是将特有硬件功能以某种特定而对应的软件环境中得到实现,并非在硬件本身里面实现的过程。它作为嵌入式技术的子技术以及逆向技术是当今嵌入式发展的不可或缺的技术。有了它,我们可以方便地了解使用及开发那些独占平台文件,甚至可以做到反技术垄断。因此,作为嵌入式软件开发者,虚拟机技术是很广泛的,但是同时又是很严苛的,掌握它既是一项艰巨的任务,又是一项必不可少的个人技术提升之路。虚拟机技术的特点在于:(1) 低成本甚至完全免费。不需要购买对应的硬件来实现,只需要安装一个模拟器即可实现专用平台的功能(2) 便于教学和技术扩展研究。在对应平台上你对专用文件格式只具有读取权限,不具有写权限以及执行权限,这给开发人员造成非常不必要的麻烦。也让技术的发展和提升被严重限制。而对应的虚拟机诞生之后,工作以及研发人员就可以对其进行改造和升级。(3) 可维护性大大提高。如果你读取专有格式文件的硬件出现问题,作为使用者你几乎无法维修硬件,这个时候你就需要这样一个虚拟软件环境能够帮助你读取对应格式文件,而如果这个软件出现问题,你可以卸载并重新安装随着信息时代的来临,很多垄断技术和文件均被分享,但是仍然有一些公司仗着平台文件大肆垄断,同时,也有很多平台文件我们普通PC无法读取,这不仅造成资源得不到共享,垄断中的技术得不到更新,同时造成一家独大的局面。要打破这种局面,虚拟机技术就是王牌,但是熟练掌握到运用自如这是一段艰难的路。另外,用惯了windows的大家都知道,windows上面的软件总数要远远大于Linux的软件总数,这使得很多能够在windows下面运行的软件放到Linux下面就形成了空缺,甚至都没有专门的项目。就如本作者编写的这个虚拟机程序,它对应的UMD只在windows下面有专门的软件,而且同样是官方程序加载非官方插件的版本,而非独立软件版本,这使得对于开发者和阅读人员造成了许多程序上的麻烦之处。所以,本作者所做的就是解决平台独占中其中的某一项:诺基亚手机专用文档UMD格式的文件在PC端特别是LINUX系统环境下运行,并实现PDF,PS文件以及可写文件TXT的转码。当然,为了防止文件修改所带来的版权纠纷,我刻意去掉了编辑功能,另软件只有读取功能而没有写功能,只有大家转码成txt,才具有可写功能,希望大家谅解。本作者是一个学生党,在这方面的技术有待于提高,如果大家使用过程中有问题,尽可以提供宝贵意见,我们将衷心致力于软件的改进。2 环境工具介绍2.1 Linux系统介绍本软件编译,运行在Linux操作系统环境下,这里我选用了库函数非常齐全的Ubuntu kylin 14.04版本。首先来说一下Ubuntu:Ubuntu(乌班图)是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu基于Debian发行版和GNOME桌面环境,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。2013年1月3日,Ubuntu正式发布面向智能手机的移动操作系统。Ubuntu 是基于Debian GNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的开源GNU/Linux操作系统。为桌面虚拟化提供支持平台。Ubuntu对GNU/Linux的普及特别是桌面普及作出了巨大贡献,由此使更多人共享开源的成果与精彩。Ubuntu是一个南非的民族观念,该词来自于祖鲁语和科萨语,意为人们之间的忠诚和联系。被视为非洲人的传统理念,也是建立新南非共和国的基本原则之一,与非洲复兴的理想密切相关。Ubuntu精神的大意是“人道待人”。另一种翻译可以是:“天下共享的信念,连接起每个人”。具有 Ubuntu 精神的人心胸开阔,乐于助人,见贤思齐而不忌妒贤能,因为他/她拥有适度的自信。而这源自如下认识:“自己乃是属于一个更大的整体,当他人受到伤害或死去时,当他人受到折磨或压迫时,这个整体就会消失。” 大主教Desmond Tutu。下面是Ubuntu kylin 14.04简介。2014 年 4 月 22 日,由工业和信息化部软件与集成电路促进中心(CSIP)携手国防科技大学(NUDT)和 Canonical 公司合作成立的 CCN 开源软件创新联合实验室在北京召开新产品发布会,宣布 Ubuntu Kylin 14.04 LTS 版本正式发布并确定中文名为“优麒麟”。Ubuntu Kylin 14.04 LTS 是 Ubuntu Kylin 操作系统的第三个正式发行版,也是首个长期支持(LTS)版,提供了最新的功能和工具,以确保直观而舒适的用户体验。Ubuntu Kylin 14.04 版本主要特性有:内核采用 Linux Kernel 3.13.0,相对于 Ubuntu 12.04 所采用内核,3.13 版本内核在网络、调度、电源管理、虚拟化、文件系统、安全以及硬件支持等方面均有大幅改进;搭载 Ubuntu Kylin 软件中心:支持 Ubuntu 和 Ubuntu Kylin软件仓库;中文化方面,与Ubuntu Loco Team社区合作,对主要软件界面、软件中心描述以及系统帮助文档进行了全面中文化工作;系统桌面主题定制:提供了定制的开机动画和从壁纸大赛中挑选的系统壁纸,也默认搭载了定制的系统主题 Ubuntu Kylin。系统应用方面:默认搭载优客助手,可为 Ubuntu Kylin 用户提供系统管理和配置工具;基于小企鹅输入法框架定制推出搜狗输入法的 Linux 版本,并为输入法定制开发了操作面板;默认安装了 Ubuntu Kylin 团队与金山联合开发的 Linux 版本金山网盘客户端;提供了 WPS for Linux 版本办公套件。与此同时,Ubuntu Kylin 14.04 LTS版本还针对最新的台式计算机和笔记本电脑以及多种触控设备,如触控板和触摸屏、高像素密度(DPI)屏幕键盘和鼠标等,进行了优化。Ubuntu Kylin 13.10 用户如果要升级到 Ubuntu Kylin 14.04 的话,可按下快捷键 Alt+F2,输入“update manager”,在弹出的更新管理器窗口中选择可用的 Ubuntu Kylin 14.04 LTS 版本并按照屏幕提示升级即可。2.2 QTcreator环境介绍Qt Creator是跨平台的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集成开发环境(IDE)。此 IDE 能够跨平台运行,支持的系统包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。根据官方描述,Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务。Qt Creator 包括项目生成向导、高级的 C+ 代码编辑器、浏览文件及类的工具、集成了 Qt Designer、Qt Assistant、Qt Linguist、图形化的 GDB 调试前端,集成 qmake 构建工具等。QtCreator 主要是为了帮助新 Qt 用户更快速入门并运行项目,还可提高有经验的 Qt 开发人员的工作效率。特点:使用强大的 C+ 代码编辑器可快速编写代码语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能。使用浏览工具管理源代码。集成了领先的版本控制软件,包括 Git、Perforce 和 Subversion开放式文件,无须知晓确切的名称或位置搜索类和文件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之间切换为Qt跨平台开发人员的需求而量身定制。集成了特定于 Qt 的功能,如信号与槽 (Signals & Slots)图示调试器, 对 Qt 类结构可一目了然集成了 Qt Designer 可视化布局和格式构建器只需单击一下就可生成和运行 Qt 项目。这里面用到的底层语言是C语言,编译工具是Linux操作系统下主流软件gcc控制台以及类库,具体介绍一下类似windows下的vs2010的编程软件QTcreator而qt本身则是一个1991年由奇趣科技开发的跨平台C+图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C+代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP。Qt因为4.x版本和5.x版本其类库有较大的变动,这里,我们采用旧版的qt即qt4.8.6进行编写。如图2所示的QTcreator使用范例。图2 qt使用范例2.3 GCC编译环境介绍GCC(GNU Compiler Collection,GNU编译器套装)是一套由GNU工程开发的支持多种编程语言的编译器。GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布。GCC是大多数类Unix操作系统(如Linux、BSD、Mac OS X等)的标准的编译器,GCC同样适用于微软的Windows。GCC支持多种计算机体系芯片,如x86、ARM,并已移植到其他多种硬件平台。GCC原名为GNU C编译器(GNU C Compiler),因为它原本只能处理C语言。GCC很快地扩展,并支持处理C+。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go等。GCC(GNU Compiler Collection,GNU编译器套装),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C+。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。关于他的结构:GCC的外部接口长得像一个标准的Unix编译器。使用者在命令列下键入gcc之程序名,以及一些命令参数,以便决定每个输入档案使用的个别语言编译器,并为输出程序码使用适合此硬件平台的组合语言编译器,并且选择性地执行连结器以制造可执行的程序。每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为GCC的暂存器转换语言RTL的后端。编译器最佳化与静态程序码解析技术(例如FORTIFY_SOURCE,一个试图发现缓冲区溢位buffer overflow的编译器)在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以Jack Davidson与Chris Fraser发明的算法产出。2.3.1 前端接口前端的功能在于产生一个可让后端处理之语法树。此语法解析器是手写之递回语法解析器。直到最近,程序的语法树结构尚无法与欲产出的处理器架构脱钩。而语法树的规则有时在不同的语言前端也不一样,有些前端会提供它们特别的语法树规则。在2005年,两种与语言脱钩的新型态语法树纳入GCC中。它们称为GENERIC与GIMPLE。语法解析变成产生与语言相关的暂时语法树,再将它们转成GENERIC。之后再使用gimplifier技术降低GENERIC的复杂结构,成为一较简单的静态唯一形式(Static Single Assignment form,SSA)基础的GIMPLE形式。此形式是一个与语言和处理器架构脱钩的全域最佳化通用语言,适用于大多数的现代编程语言。2.3.2 中介接口一般编译器作者会将语法树的最佳化放在前端,但其实此步骤并不看语言的种类而有不同,且不需要用到语法解析器。因此GCC作者们将此步骤归入通称为中介阶段的部分里。此类的最佳化包括消解死码、消解重复运算与全域数值重编码等。许多最佳化技巧也正在实作中。2.3.3 后端接口GCC后端的行为因不同的前处理器宏和特定架构的功能而不同,例如不同的字符尺寸、呼叫方式与大小尾序等。后端接口的前半部利用这些讯息决定其RTL的生成形式,因此虽然GCC的RTL理论上不受处理器影响,但在此阶段其抽象指令已被转换成目标架构的格式。GCC的最佳化技巧依其释出版本而有很大不同,但都包含了标准的最佳化算法,例如循环最佳化、执行绪跳跃、共通程序子句消减、指令排程等等。而RTL的最佳化由于可用的情形较少,且缺乏较高阶的资讯,因此比较起近来增加的GIMPLE语法树形式,便显得比较不重要。后端经由一重读取步骤后,利用描述目标处理器的指令集时所取得的资讯,将抽象暂存器替换成处理器的真实暂存器。此阶段非常复杂,因为它必须关照所有GCC可移植平台的处理器指令集的规格与技术细节。后端的最后步骤相当公式化,仅仅将前一阶段得到的组合语言码藉由简单的副函式转换其暂存器与内存位置成相对应的机械码。2.3.4 基本用法在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。GCC最基本的用法是gcc options filenames其中options就是编译器所需要的参数,filenames给出相关的文件名称。-c,只编译,不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。-O,对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、链接的速度就相应地要慢一些。-O2,比-O更好的优化编译、链接,当然整个编译、链接过程会更慢。-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况A)#include B)#include “myinc.h”其中,A类使用尖括号(),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹内搜索相应文件。2.4 文件架构依赖包的使用简介2.4.1 zlib的简介以及作用zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。截至2007年3月,zlib是包含在Coverity的美国国土安全部赞助者选择继续审查的开源项目。Zlib具有以下特性:(1) 数据头(header)zlib能使用一个gzip数据头,zlib数据头或者不使用数据头压缩数据。通常情况下,数据压缩使用zlib数据头,因为这提供错误数据检测。当数据不使用数据头写入时,结果是没有任何错误检测的原始DEFLATE数据,那么解压缩软件的调用者不知道压缩数据在什么地方结束。gzip数据头比zlib数据头要大,因为它保存了文件名和其他文件系统信息,事实上这是广泛使用的gzip文件的数据头格式。注意zlib函式库本身不能创建一个gzip文件,但是它相当轻松的通过把压缩数据写入到一个有gzip文件头的文件中。(2) 算法目前zlib仅支持一个LZ77的变种算法,DEFLATE的算法。这个算法使用很少的系统资源,对各种数据提供很好的压缩效果。这也是在ZIP档案中无一例外的使用这个算法。(尽管zip文件格式也支持几种其他的算法)。看起来zlib格式将不会被扩展使用任何其他算法,尽管数据头可以有这种可能性。(3) 使用资源函数库提供了对处理器和内存使用控制的能力,不同的压缩级别数值可以指示不同的压缩执行速度。还有内存控制管理的功能。这在一些诸如嵌入式系统这样内存有限制的环境中是有用的。(4) 策略压缩可以针对特定类型的数据进行优化。如果你总是使用zlib库压缩压缩特定类型的数据,那么可以使用有针对性的策略可以提高压缩效率和性能。例如,如果你的数据包含很长的重复数据,那么可以用RLE(运行长度编码)策略,可能会有更好的结果。对于一般的数据,默认的策略是首选。(5) 错误处理错误可以被发现和跳过数据混乱可以被检测(只要数据和zlib或者gzip数据头一起被写入参见上面)此外,如果全刷新点(full-flush points)被写入到压缩后的数据流中,那么错误数据是可以被跳过的,并且解压缩将重新同步到下个全刷新点。(错误数据的无错恢复被提供)。全刷新点技术对于在不可靠的通道上的大数据流是很有用的,一些过去的数据丢失是不重要的,但是建立太多的全刷新点会极大的影响速度和压缩。(6) 数据长度对于压缩和解压缩,没有数据长度的限制。重复调用库函数允许处理无限的数据块。一些辅助代码(计数变量)可能会溢出,但是不影响实际的压缩和解压缩。当压缩一个长(无限)数据流时,最好写入全刷新点。2.4.2 qmake介绍以及特点qmake是一个协助简化跨平台进行专案开发的构建过程的工具程式,Qt附带的工具之一 。qmake能够自动生成Makefile、Microsoft Visual Studio专案文件 和 xcode 专案文件。不管源代码是否是用Qt写的,都能使用qmake,因此qmake能用于很多软件的构建过程。1特点:手写Makefile是比较困难而且容易出错,尤其在进行跨平台开发时必须针对不同平台分别撰写Makefile,会增加跨平台开发复杂性与困难度。qmake会根据专案文件(.pro)里面的信息自动生成适合平台的 Makefile。开发者能够自行撰写专案文件或是由qmake本身产生。qmake包含额外的功能来方便 Qt 开发,如自动的包含moc 和 uic 的编译规则。3 系统分析3.1 格式介绍3.1.1 PC格式(1) EXE不需要安装专门的阅读器,下载后就可以直接打开。单击目录可直接打开所需内容。(2) TXT它在电脑上是记事本的扩展名,这种现在普遍应该到电子产品中,现在最常见的就是TXT小说,不仅方便的在电脑上打开,还可以下载到的MP3和手机中,现在网上TXT小说网站也很多,比如著名的飘零书社就是专业的TXT格式小说下载网站,可以很方便的下载自己的手机或MP3中,省去很多购买书的费用;(3) HTML网页格式,可用网页浏览器直接打开;(4) HLP帮助文件格式,在Windows上可直接打开;一般在程序中按F1可以打开。(5) CHM同HLP文件格式一样,也是帮助文件,但其支持多种视音频格式,让电子书显得更加生动美观。(6) LIT微软的文件格式,需下载Microsoft Reader软件来阅读。(7) PDFPDF是ADOBE公司开发的电子读物文件格式,是目前使用最普及的电子书格式,它可以真实地反映出原文档中的格式、字体、版式和图片,并能确保文档打印出来的效果不失真。(8) WDL这是北京华康公司的文件格式,使用也很普遍。用DynaDoc免费阅读软件即可打开WDL和WDF格式。(9) CEB此格式是由北大方正公司独立开发的电子书格式,由于在文档转换过程中采用了“高保真”技术,从而可以使CEB格式的电子书最大限度地保持原来的样式。(10) ABM一种全新的数码出版物格式,这种格式最大的优点就是能把文字内容与图片、音频甚至是视频动画结合为一个有机的整体。在阅读时,能带来视觉、听觉全方位享受。(11) PDG超星公司把书籍经过扫描后存储为PDG数字格式,存放在超星数字图书馆中。如果你要想阅读这些图书,则必须使用超星阅览器(Superstar Reader)。(12) EPUBEPUB 是可重排版(reflowable直译可回流)的基于XML格式的电子书或其它数字出版物,是数字出版业商业和标准协会International Digital Publishing Forum (IDPF) 制定的标准。有各种开放源代码或者商业的阅读软件支持几乎所有的主流操作系统。(13) CAJCAJ 为中国学术期刊全文数据库英文缩写( China Academic Journals);CAJ是中国学术期刊全文数据库中文件的一种格式。可以使用CAJ全文浏览器来阅读。3.1.2 手机格式(1) UMD该格式原先为诺基亚手机操作系统支持的一种电子书的格式,阅读该格式的电子书需要在手机上安装相关的软件。不过现在的很多java手机下载阅读软件后也可以看。(2) JARJAR文件格式以流行的ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。3.2 技术需求分析3.2.1 UMD格式解码技术使用这项技术之前我们先来了解一下UMD文件格式:UMD文件有三种格式类型,一种叫纯文本格式,一种叫漫画&写真集格式,以及连环画(文字+图画)。本文只涉及纯文本格式的UMD,后面将直接使用UMD指代这类格式的文件。UMD文件总体上是由一组连续的块组成的,每一块按照约定的顺序先后排列在一起构成了UMD文件的结构。根据块的职责,我将其分成两类:功能块和数据块。有的功能块自身就可以完全的描述信息,而有的一些由于信息量大,特别地将数据放在别处(即数据块),如正文、章节偏移和章节标题,它们使用一个功能块和若干个数据块,通常数据块都紧接在相应的功能块之后出现。如表3-1所示的解码代码块的原理。表3-1 UMD块标识块标识描述参数定义0 x01UMD文件头DCTS_CMD_ID_VERSION0 x02文件标题DCTS_CMD_ID_VERSION0 x03作者DCTS_CMD_ID_VERSION0 x04年DCTS_CMD_ID_VERSION0 x05月DCTS_CMD_ID_VERSION0 x06日DCTS_CMD_ID_VERSION0 x07小说类型DCTS_CMD_ID_VERSION0 x08出版商DCTS_CMD_ID_VERSION0 x09零售商DCTS_CMD_ID_VERSION表3-1(续)块标识描述参数定义0 x0B内容长度DCTS_CMD_ID_VERSION0 x0C文件结束DCTS_CMD_ID_VERSION0 x81正文DCTS_CMD_ID_VERSION0 x82封面DCTS_CMD_ID_VERSION0 x83章节偏移DCTS_CMD_ID_VERSION0 x84章节标题正文DCTS_CMD_ID_VERSION0 x87页面偏移DCTS_CMD_ID_VERSION0 x0AContent IDDCTS_CMD_ID_VERSION0 xF0CDS KEYDCTS_CMD_ID_VERSION0 xF1许可证DCTS_CMD_ID_VERSION0 x05月DCTS_CMD_ID_VERSION以上数据块标识中,在本程序中我们仅用到8个左右。如表3-2所示的功能块结构以及表3-3所示的数据块结构。表3-2 UMD功能块结构格式大小描述#1这是一个功能块0 x23category2见表1unknown1未知Length1功能块长度contentn功能块的内容。一般是字符型的数据,并且以UNICODE编码存储,不带字符串结尾符0。Content所占用的字节数加上前面各字段的大小(前面共有5字节)即为Length。如果此功能块后接一个数据块的话,Content存放的不是实际的内容,而是一个4字节的数,它引用着一个数据块,该数据块头部也会包含同样的4个字节来标识自己。表3-3 UMD数据块结构格式大小描述$1数据块0 x24Randval4一个数据块标识,与对应功能块中的Content相同。注意正文数据块有所不同,后面将提到。Length4整个数据块的长度(字节数)contentn实际的数据,一般都很大。如正文的内容实际上划分为了很多块,分别放入了不同的数据块中。如上表3-3所示,功能块与数据块都有着各自的格式,UMD中的块都遵循这两种格式之一。尽管大体上简单明了,由于Content中实际存储的数据不同,其Content中的结构也有所不同。3.2.2 C语言开发依据以及执行过程通过表3-1到表3-3我们不难得出,这里的C语言开发主要是进行系统编程的接口和解压缩编程,并且需要用到ZLIB压缩与解压缩函数类包虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。3.3 可行性分析从“格式介绍”一栏中我们看出UMD原先为诺基亚手机开发,现在虽然有Java等程序,但是绝大多数是windows下面的,这是一方面,另一方面,UMD编程非常简单,只要掌握了其数据结构,就不难对其进行设计和开发,我认为此项目的特色以及针对性很强,可行性很高,值得重视并执行,总体来讲,这个项目具有经济可行性,操作可行性,技术可行性。4 概要设计4.1 总体功能实现UMD的浏览,归档功能,PDF,PS格式转码,可写文件txt另存为功能鉴于以上对UMD文件的软件支持甚少,我们对此作出如下目的性分析,即本系统需要具有以下功能:(1)拥有简单干净易上手的操作界面(2)能够实现文件路径的打开关闭功能。(3)能够实现UMD文件浏览,章节归类,书签管理功能(4)能够实现转码打印功能(5)能够实现PDF,PS转码打印和另存为txt可写文件功能。4.2 功能展示以及UI界面描述由于这套软件属于功能集成类型的软件,而非系统类型,功能之间不需要复杂的等级划分,层级结构比较单一,只有两层,打开和关闭是最上层,而文件的浏览,转码,文档章节的归类以及放大缩小等功能属于第二层。所以这里只列出功能规划图以及界面的设计范例,不做详细的规划,只需要简单的集成即可。打开兼浏览UMD文档,章节自动归档书签管理放缩查找查看转码成为其他格式的文件如ps,txt,PDF图4-1 功能规划图由图4-1我们知道,这六种功能之间的制约关系非常小,耦合度低。因而是功能集成的类型。(而我们众所周知的“某某管理系统”“某某网站”这类型的项目,其功能间制约关系非常严重,进而等级划分要求非常之高,所以是系统类型)图4-2 功能的UI界面设计由图4-2我们可以得知,界面中包含标题栏,菜单栏,工具栏,书目栏,章节列表,书签管理表(位于章节列表垂直下方),标题栏是我的名称,菜单栏包括“文件,编辑,查看,帮助”选项。工具栏包括“打开,另存为,打印,查找,放大,缩小”功能,其中,另存为和打印的作用实质即是转码。4.3 代码框架以及程序总流程4.3.1 代码框架图4-3 代码全局图如图4-3的代码全局图。Aboutdialog是程序介绍以及编写的作者,UmdReader是文档大小计算,字体初始化等基础设置。Main.cpp是文件运行环境以及安装包封装。资源里面包含了按钮的样式,这里不做详细介绍。最主要的3个是addition,mainwindow以及bookmarket。下面在“5详细设计以及实现”会详细介绍。4.3.2 程序总流程开始动作否是否响应成功是响应后的互动操作,并执行对应一个或多个功能提示无法执行对应功能结束图4-4 总体编程思想 如图4-4所示,这即是程序总体流程设计图,又是编程思想的框架图。在正式详细介绍代码和对应的实现之前,首先我在这里介绍我对功能实现的编程框架,即是:动作响应触发响应后的互动操作。任何功能的实现,即不能离开又不会偏离这个框架。先来介绍动作部分,这里的“动作”是指你用输入设备对程序作出一项操作指令,这个过程称之为动作。举个例子,你用鼠标点击软件的某项功能按钮,这个过程即是动作的一种。或者你用键盘输入字符到程序中,也是一个动作。这个动作在QT里面是用QAction类实现,这个类的作用就是用于负责将你的动作转换成信号发送给程序端。这个部分是功能的介绍,属于静态部分,因此可以用图片进行简介。之后介绍响应部分,响应,顾名思义就是接受对方的操作指令信息,但是整个过程的实质是响应一方和被响应一方之间的指令信息连接。若连接异常,响应一方因为无法接受指令,是无法进行后续互动操作的。即响应的作用就是动作和互动操作之间的桥梁。用connect方法进行实现。最关键的是,操作的触发过程是动态过程只能用实机演示证明,因此无法用图片进行介绍。最后介绍响应后的互动操作部分,这个互动操作的意思就是你用输入设备对程序作出一项操作指令,程序响应你的指令后,对你的要求进行执行的操作。举个例子,你用鼠标点击了放大功能,程序响应你的指令之后,对文档进行放大操作。这个互动操作实质跟你的设计界面相关,即是对你界面上的按钮等功能模块的设计和实现,具体的类与接口没有严格定义,但需要自己设计和实现。本操作属于伴随操作,也就是说整个过程的性质是动态且被动的,因此只能用实机演示,无法用图片介绍。本代码除了书签功能要用到bookmarketwidget.cpp之外,其余功能均包含在文件MainWindow.cpp代码中。5 详细设计以及实现5.1 后台设计在源代码中所用到的总后台,用于变量定义,所有方法定义,分别定义在addition.h以及umdparser.h里面,并对应着相应的cpp源文件,前者定义了UMD对象的属性(根据前面提到的块标识),后者定义了读取以及释放的操作5.1.1 UMD命名空间在下面名为addition的头文件代码中,我们不难发现,所有的定义,均围绕UMD块标识而进行。这是UMD解读程序编写的根本,它的作用类似于数学里面的定力定义的作用,是规范以及编写规则的代码实现。Addition.h:#ifndef ADDITIONS_H#define ADDITIONS_H#include#include#includenamespace UMD/在addition.h里面对UMD进行功能定义 int WideCharToMultiByte(char* des,unsigned char* sr,unsigned long in_byte,unsigned long out_byte);/对属性值“路径,源文件”等进行字符转换 void EnterFilter(unsigned char* p,unsigned int len); struct Head/用队列指针头部对书籍的属性进行总定义 enum Attribute/对书籍的属性进行枚举定义,定义中包含8项块标识 Title=0, Author, Year, Month, Day, Gender, Publisher, Vendor ; Head(); Head(Head& other); Head();/对头部属性数据进行释放 unsigned char *title; unsigned char *author; uns
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 逐步完善学习策略初级社会工作者试题及答案
- 施工线安全管理制度
- 文件传达归档管理制度
- 乡村饭店管理制度
- 机关单位收发管理制度
- 红外热成像管理制度
- 通过初级社会工作者考试的试题及答案
- 计算机二级考试MS Office完整试题及答案
- 2025年考试动态与试题及答案分析
- 构配件检验管理制度
- 璞泰来公司成本费用核算制度优化设计
- 麻醉科建设发展规划
- 木工工程分包合同模版
- 合作框架协议战略
- 设备工程师招聘笔试题及解答(某大型国企)2025年
- 国家职业技术技能标准 6-29-01-07 乡村建设工匠 2024年版
- 旧水泥混凝土路面碎石化技术规程(山东省标准DB37T-1160-2009)
- 四川省成都市2024年小升初英语试卷(含答案)
- 渠道衬砌施工方案(渠道预制混凝土块)
- 02S515排水检查井图集
- 《糖的变化(含练习)》参考课件
评论
0/150
提交评论