PDF标准详解(一)——PDF文档结构

已经很久没有写博客记录自己学到的一些东西了。但是在过去一年的时间中自己确实又学到了一些东西。一直攒着没有系统化成一篇篇的文章,所以今年的博客打算也是以去年学到的一系列内容为主。通过之前Vim系列教程的启发,我发现还是写一些系列文章对自己的帮助最大。它能最大化自己的学习成果,并强迫自己深入了解一些内容。所以今年我想还是以系列文章为主,如果中间有需要穿插一些bug处理或者语言特性相关的,可能也会有这方面的内容吧。

好了,废话就到这里,下面开始正式介绍PDF相关的内容

PDF简介

PDF的全称是 Portable document format(可移植文档格式),是描述打印页面的世界领先语言。最早于1990年代由Adobe Systems创造。早期是Adobe专有格式,直到2008年作为开放标准发布。后续经过一系列的发展,目前已经发展到了2.0版本,由于PDF完全向后兼容,并且大部分都是向前兼容的,因此,这里不打算固定在某个具体的版本,而是介绍一些PDF通用的标准和规则。

PDF的文档结构

PDF主要由四个部分构成,文件头、文件体、交叉引用表以及文件尾
文件头将文件标识为PDF并给出它的版本号,例如

%PDF-1.0    % PDF 版本号为 1.0 的文件头

文件体是PDF文档的主体内容,主要由对象组成,它规定了页面信息和页面内容元素等信息

交叉引用表给出了每个对象距离文件首部的地址偏移,这样在解析PDF的时候就不用从头到尾解析每个对象,而是根据需要通过交叉引用表来寻址到具体的对象地址,只单独解析某个对象,提高了解析效率

文件尾给出交叉引用表的位置并且以

%%EOF

作为结尾

PDF文件的逻辑结构

一个标准的PDF文档需要在文件体中包含下列元素对象:

  1. 根节点元素,类似于xml的根节点,它是整个文档的根节点对象
  2. Pages对象,它包含了PDF文档的页面信息,一般通过它来定义整个PDF文档有多少页
  3. Page 页面对象,它用来描述每个具体的页
  4. Page Content 对象,它来描述每个具体页中都有哪些对象,一般是一个字节流用来表示将在页面中显示哪些内容
  5. Page Resource 对象,它是内容的资源字典,供Content对象引用,资源包括字体、画刷、画笔等等
  6. trailer 字典,可以将它看作pdf文档对象的入口,通过它我们可以知道当前PDF文档的一些具体信息,例如根节点的位置,交叉引用表的大小

它们之间的关系如下图:
在这里插入图片描述

PDF版的Hello World

说了这么多,我们来试试来自己编辑一个hello world文档,首先建立一个文本文件,将后缀改为.PDF
我们先写上文件头:

%PDF-1.0    % PDF 版本号为 1.0 的文件头

主要对象

我们按照之前的分析的PDF文档中需要包含的对象,来逐一定义
首先给出Pages节点的定义

1 0 obj % 对象1
<< /Type /Pages     % 这是一个页面列表
   /Count 1         % 只有一页
   /Kids [2 0 R]    % 页面对象编号列表。这里只是对象2
>>
endobj  % 对象1结束

对象的内容我们在后续会专门介绍,所以这里不需要额外关注它的语法,这里只需要知道

1 0 obj

定义了一个对象1,后续通过1 这个编号可以找到这个对象。这个对象中定义了他的类型是 Pages表示它是一个pages对象,/Count表示整个PDF文档只有一页,Kids是一个数组,表示每一页的页面对象,这里它只有一个页面对象,就是对象2

接着我们定义页面对象

2 0 obj
<< /Type /Page              % 这是一个页面
   /MediaBox [0 0 612 792]  % 纸张尺寸为美国信肖像(612点x792点)
   /Resources 3 0 R         % 对象3的资源引用
   /Contents [4 0 R]        % 图形内容在对象4中
>>
endobj

页面对象中我们定义了页面纸张的大小,单位是磅。因为PDF是可移植文档,它需要在不同设备上显示同样的内容,这里不能使用像素,如果使用像素,在同样尺寸的显示器上如果显示器的像素分辨率不同,那么显示的结果将会不同。所以这里一般使用磅作为单位。

同时在页面对象中定义了页面中将要使用的资源以及将要显示的内容

接着我们来定义资源对象

3 0 obj
<< /Font  % 字体字典
     << /F0  % 只有一种字体,称为/F0
          << /Type /Font  % 这三行引用了内置字体Times Italic
            /BaseFont /Times-Italic
            /Subtype /Type1 >>
     >>
>>
endobj

资源对象中,我们定义了一个字体资源,字体为 Times Italic,并且定义了这种字体资源的名称为 F0, 后面可以通过F0 这个名称来直接引用这个字体

然后我们来定义页面内容对象

4 0 obj     % 页面内容流
<< >>
stream      % 流的开始
1. 0. 0. 1. 50. 700. cm % 位置在(50,700)
BT  % 开始文本块
 /F0 36. Tf         % 在36pt选择/F0字体
 (Hello, World!) Tj % 放置文本字符串
ET  % 结束文本块
endstream   % 流结束
endobj

通过stream来定义一个流对象,在这个流对象中,我们定义它在页面的 (50, 700) 坐标位置显示字符,显示字符内容通过后面的 (Hello, World!) Tj来定义,并且定义了字符采用F0 字体,也就是上面定义的Times-Italic字体

页面相关的内容我们已经定义完了,接着我们需要定义一些结构相关的对象,方便PDF解析器找到并解析页面内容。

我们来定义根节点

5 0 obj
<< /Type /Catalog %文件目录
   /Pages 1 0 R   %参考页面列表
>>
endobj

根节点包含了一个Pages定义,通过根节点就可以找到Pages节点

接着我们来定义交叉引用表

xref %这里我们跳过了交叉引用表的开始
0 6

交叉引用表包含一些偏移地址信息,我们单纯的通过文本文档很难计算各个对象的偏移,所以这里我们只给出文档中对象数量为6,具体的地址我们先不给出,这样PDF解析器也能解析出各个对象

之前我们给出了5个对象的定义,但是交叉引用表的条目却是6,这是因为交叉引用表的第一条一般是一个没有什么用处的,有效的对象从第二条定义开始。

下面给出 Trailer 字典的定义

trailer
<< /Size 6 %交叉引用表的行数
   /Root 5 0 R % 参考文档目录
>>

Trailer 字典以 trailer关键字开始。条目下面包括了交叉引用表的行数以及根节点的对象

最后我们给出交叉引用表在PDF文档中的偏移,由于交叉引用表的内容为空,所以这里我们直接给0

startxref
0			%xref表开始的字节偏移量,这里设置成0

最后我们以

%%EOF

结尾来表示整个PDF文档结束

到这里我们已经得到了一个PDF阅读器可以打开的PDF文档。我们使用PDF阅读器可以得到如下的页面
在这里插入图片描述

PDF文档一般的读取过程

不知道各位小伙伴们是否能看懂上面 Hello World 文档的定义。下面我们通过一个完整的 PDF文档来将上面所有定义的对象串起来,希望各位能对PDF文档有一个完整的认识。我们不用纠结各个部分的写法,以及为什么要这么写,只需要明白各个对象的功能即可。具体对象定义相关的语法和每个对象的详细解释将会在后面一系列文章中给出,相信那个时候再来看这个 Hello Word 文档一定会有一个更清晰的认识。

再说明文档读取的过程前,我们先使用一些工具来补全这个文档,这里使用 pdftk 工具。可以在这里 进行下载,完成之后,使用如下命令进行补全

pdftk hello.pdf output hello-full.pdf

成功后会得到如下内容

%PDF-1.0
%忏嫌
1 0 obj 
<<
/Kids [2 0 R]
/Count 1
/Type /Pages
>>
endobj 
2 0 obj 
<<
/Resources 3 0 R
/MediaBox [0 0 612 792]
/Contents [4 0 R]
/Type /Page
>>
endobj 
3 0 obj 
<<
/Font 
<<
/F0 
<<
/BaseFont /Times-Italic
/Subtype /Type1
/Type /Font
>>
>>
>>
endobj 
4 0 obj 
<<
/Length 202
>>
stream
% 娴佺殑寮€濮?
1. 0. 0. 1. 50. 700. cm % 浣嶇疆鍦紙50,700锛?
BT  % 寮€濮嬫枃鏈潡
 /F0 36. Tf         % 鍦?6pt閫夋嫨/F0瀛椾綋
 (Hello, World!) Tj % 鏀剧疆鏂囨湰瀛楃涓?
ET  % 缁撴潫鏂囨湰鍧?

endstream 
endobj 
5 0 obj 
<<
/Pages 1 0 R
/Type /Catalog
>>
endobj xref
0 6
0000000000 65535 f 
0000000015 00000 n 
0000000074 00000 n 
0000000168 00000 n 
0000000267 00000 n 
0000000523 00000 n 
trailer

<<
/Root 5 0 R
/Size 6
>>
startxref
573
%%EOF

这个我将整个PDF文档都粘贴了出来,从这里我们可以看到,它已经为我们补全了交叉引用表。下面通过整个文档来说明一般读取过程

  1. PDF解析程序,先通过文件头来确定是否是PDF文件,并且得到PDF文件的版本
  2. 在文件末尾找到%%EOF 关键子,确定文件尾。接着向上查找到 startxref 关键字,该关键字后面将会给出交叉引用表的偏移,通过这个偏移地址可以找到交叉引用表
  3. 接着查找trailer关键字,通过trailer关键字可以得到文档的一些信息,这里关键的是得到 Root 节点的对象。
  4. 根据交叉引用表可以很块定位到Root 节点对象,也就是对象5
  5. 根据Root 对象中的 Pages属性可以找到Pages对象,也就是PDF页面信息对象
  6. 根据Pages对象中的Kids 数组,可以找到PDF包含的所有页面对象,这个文档只有一个页面对象
  7. 找到Page 对象后可以根据 Resources 和Contents属性可以找到页面内容和页面引用的资源。例如该文档就可以使用Times-Italic字体显示 hello world字符串
  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
《CSS网站布局实录:基于Web标准的网站设计指南(第2版)》内容提要: 本书是一本讲述基于Web标准的应用CSS进行网站布局设计与重构的典范之作。 本书以实例为主,一步步地告诉大家如何进行符合Web 2.0标准的CSS布局设计。具备了知识全面、完美应用(CSS选择器、样式继承、层叠、格式化、XML标签、CSS滤镜等。文本、图像、超链接、列表、菜单、网站导航、表单、数据表格、浮动布局等CSS布局控制。),智能、创造型布局思维(智慧、完美视觉艺术效果之CSS布局技巧、CSS Hack实践战略),Web技术团队倾情奉献(来自CSS布局与Web标准应用之先驱——闪客帝国... [显示全部] 《CSS网站布局实录:基于Web标准的网站设计指南(第2版)》图书目录: 第1章 Web标准与CSS布局概述 1.1 Web标准的历史及发展 1.1.1 什么是Web标准 1.1.2 Web表现层技术 1.1.3 Web标准的历史 1.2 Web标准的构成 1.2.1 结构(Structure) 1.2.2 表现(Presentation) 1.2.3 行为(Behavior) 1.3 Web标准有什么好处 1.4 CSS布局与table布局的区别 1.4.1 CSS 2.0的优势 1.4.2 传统的table布局与CSS布局 1.5 向Web标准过渡 1.5.1 从HTML转向XHTML 1.5.2 发挥CSS 2.0的作用 1.6 常见问题 1.6.1 什么样的网站才符合Web标准 1.6.2 使用Web标准之后表格还有用吗 1.6.3 可以继续使用HTML来设计网页吗 1.6.4 为什么不直接使用到XML 1.6.5 学习CSS布局比表格困难吗 1.6.6 CSS布局是否意味着必须手写代码 1.6.7 什么叫网站重构 1.6.8 使用Web标准之后就不再存在兼容性问题了吗 1.6.9 有没有Web标准方面的优秀图书或网站 1.6.10 使用CSS设计只能做出简单的网页吗 1.7 面向现在与未来的设计 1.7.1 Web标准与Web 2.0 1.7.2 用户体验技术 1.7.3 用户体验设计的发展趋势 第2章 XHTML与CSS基础 2.1 XHTML基础 2.2 选择合适的DTD 2.3 选择合适的标签 2.4 给CSS留下接口 2.5 良好的XHTML编写习惯 2.6 CSS语法结构 2.6.1 CSS属性与选择符 2.6.2 类型选择符 2.6.3 群组选择符 2.6.4 包含选择符 2.6.5 id及class选择符 2.6.6 标签指定式选择符 2.6.7 组合选择符 2.6.8 伪类及伪对象 2.6.9 通配选择符 2.7 CSS数据单位 2.8 应用CSS到网页中 2.8.1 行间样式表 2.8.2 内部样式表 2.8.3 外部样式表 2.9 样式优先权问题 2.9.1 写法优先权 2.9.2 选择符优先权 2.9.3 样式继承 2.9.4 !important语法 2.10 代码注释 2.11 CSS开发环境与调试环境 第3章 CSS网页布局与定位 3.1 认识div 3.1.1 div是什么 3.1.2 如何使用div 3.1.3 理解div 3.1.4 并列与嵌套div结构 3.1.5 使用合适对象来布局 3.2 一列固定宽度 3.3 一列宽度自适应 3.4 二列固定宽度 3.5 二列宽度自适应 3.6 两列右列宽度自适应 3.7 二列固定宽度居中 3.8 三列浮动中间列宽度自适应 3.9 高度自适应 3.10 盒模型详解(.Box Model) 3.10.1 什么是盒模型 3.10.2 盒模型的细节 3.10.3 上下margin叠加问题 3.10.4 左右margin加倍问题 3.11 深入浮动(Float) 3.11.1 文档流(Document Flow) 3.11.2 浮动定位 3.11.3 浮动的清理(Clear) 3.11.4 何时选用浮动定位 3.12 绝对定位与相对定位 3.12.1 绝对定位 3.12.2 相对定位 3.12.3 何时选用绝对与相对定位 第4章 CSS网站元素设计 4.1 用CSS设计网站导航 4.1.1 横向导航 4.1.2 纵向导航 4.1.3 下拉及多级弹出式菜单 4.1.4 门户网站的导航设计(闪客帝国) 4.2 背景控制 4.2.1 背景颜色 4.2.2 背景图片 4.2.3 背景定位 4.2.4 背景滚动 4.2.5 背景属性缩写 4.2.6 基于背景控制的导航优化 4.3 使用列表元素 4.3.1 ul无序列表 4.3.2 ol有序列表 4.3.3 改变项目符号样式 4.3.4 使用图片自定义项目符号 4.3.5 使列表变为段落 4.3.6 列表缩进排版 4.3.7 复杂列
第1篇 HTML基础   第1章 HTML基础 3   教学录像:22分钟   1.1 HTML的基本概念 4   1.2 HTML发展史 4   1.3 HTML的基本结构 5   1.3.1 HTML文件的编写方法 5   1.3.2 文件开始标签<html> 7   1.3.3 文件头部标签<head> 7   1.3.4 文件标题标签<title> 7   1.3.5 文件主体标签<body> 7   1.3.6 编写文件的注意事项 8   1.4 编写第一个HTML文件 8   1.4.1 HTML文件的编写方法 8   1.4.2 手工编写页面 9   1.4.3 使用可视化软件制作页面 10   1.4.4 使用浏览器浏览HTML文件 14   1.4.5 使用HTML开发的明日图书网 14   1.5 小结 15   1.6 习题 16   第2章 HTML文件基本标记 17   教学录像:44分钟   2.1 HTML头部标记 18   2.2 标题标记<title> 18   2.3 元信息标记<meta> 19   2.3.1 设置页面关键字 19   2.3.2 设置页面描述 20   2.3.3 设置编辑工具 20   2.3.4 设定作者信息 21   2.3.5 限制搜索方式 22   2.3.6 设置网页文字及语言 22   2.3.7 设置网页的定时跳转 23   2.3.8 设定有效期限 24   2.3.9 禁止从缓存中调用 24   2.3.10 删除过期的cookie 25   2.3.11 强制打开新窗口 25   2.3.12 设置网页的过渡效果 26   2.4 基底网址标记<base> 29   2.5 页面的主体标记<body> 30   2.5.1 设置文字颜色——text 31   2.5.2 背景颜色属性——bgcolor 32   2.5.3 背景图像属性——background 32   2.5.4 设置链接文字属性——link 35   2.5.5 设置边距——margin 37   2.6 页面的注释标记 38   2.7 实例演练——创建基本的HTML网页 38   2.8 小结 39   2.9 习题 40   第3章 设计网页文本内容 41   教学录像:29分钟   3.1 标题文字的建立 42   3.1.1 标题文字标记<h> 42   3.1.2 标题文字的对齐方式——align 43   3.2 设置文字格式 44   3.2.1 设置文字字体——face 44   3.2.2 设置字号——size 45   3.2.3 设置文字颜色——color 46   3.2.4 粗体、斜体、下划线——strong、em、u 46   3.2.5 上标与下标——sup、sub 47   3.2.6 设置删除线——strike 48   3.2.7 等宽文字标记——code 49   3.2.8 空格——&nbsp; 49   3.2.9 其他特殊符号 50   3.3 设置段落格式 51   3.3.1 段落标记——p 51   3.3.2 取消文字换行标记——nobr 52   3.3.3 换行标记——br 53   3.3.4 保留原始排版方式标记——pre 53   3.3.5 居中对齐标记——center 54   3.3.6 向右缩进标记——blockquote 55   3.4 水平线标记 56   3.4.1 添加水平线——hr 56   3.4.2 设置水平线的宽度与高度   ——width、height 57   3.4.3 设置水平线的颜色——color 58   3.4.4 设置水平线的对齐方式——align 59   3.4.5 去掉水平线阴影——noshade 60   3.5 其他文字标记 60   3.5.1 文字标注标记——ruby 60   3.5.2 声明变量标记——var 61   3.5.3 忽视HTML标记   ——plaintext、xmp 62   3.6 小结 63   3.7 习题 63   第4章 使用列表 65   教学录像:35分钟   4.1 列表的标记 66   4.2 使用无序列表 66   4.2.1 无序列表标记——ul 66   4.2.2 无序列表的符号类型——type 67   4.3 使用有序列表 69   4.3.1 有序列表标记——ol 69   4.3.2 有序列表的属性——type 70   4.3.3 有序列表的起始数值——start 72   4.4 定义列表标记——dl 73   4.5 菜单列表标记——menu 74   4.6 目录列表——dir 75   4.7 使用嵌套列表 76   4.7.1 定义列表的嵌套 77   4.7.2 无序列表和有序列表的嵌套 78   4.8 小结 79   4.9 习题 80   第5章 超链接 81   教学录像:22分钟   5.1 超链接的基本知识 82   5.1.1 超链接 82   5.1.2 绝对路径 82   5.1.3 相对路径 82   5.2 超链接的建立 83   5.2.1 超链接标记的基本语法 83   5.2.2 建立文本超链接 83   5.2.3 设置超链接的目标窗口 85   5.3 内部链接 87   5.4 书签链接 89   5.4.1 建立书签 89   5.4.2 链接到同一页面的书签 91   5.4.3 链接到不同页面的书签 92   5.5 外部链接 93   5.5.1 通过HTTP协议 94   5.5.2 通过FTP 94   5.5.3 发送E-mail 95   5.5.4 下载文件 96   5.6 其他链接 98   5.6.1 脚本链接 98   5.6.2 空链接 99   5.7 小结 99   5.8 习题 100   第6章 使用图像 101   教学录像:35分钟   6.1 图像的基本格式 102   6.2 添加图像——img 102   6.3 设置图像属性 103   6.3.1 图像高度——height 103   6.3.2 图像宽度——width 104   6.3.3 图像边框——border 105   6.3.4 图像水平间距——hspace 107   6.3.5 图像垂直间距——vspace 108   6.3.6 图像相对于文字基准线的对齐方式   ——align 108   6.3.7 图像的提示文字——alt 110   6.4 图像的超链接 111   6.4.1 设置图像的超链接 111   6.4.2 设置图像热区链接 112   6.5 小结 116   6.6 习题 116   第7章 表格的应用 118   教学录像:48分钟   7.1 创建表格 119   7.1.1 表格的基本构成——table、tr、td 119   7.1.2 表格的标题——caption 120   7.1.3 表格的表头——th 121   7.2 设置表格基本属性 123   7.2.1 表格的宽度——width 123   7.2.2 表格的高度——height 125   7.2.3 表格的对齐方式——align 126   7.3 设置表格的边框 127   7.3.1 表格边框的宽度——border 127   7.3.2 表格边框的颜色——bordercolor 128   7.3.3 表格内框的宽度——cellspacing 130   7.3.4 表格内文字与边框的间距   ——cellpadding 131   7.4 设置表格背景 132   7.4.1 表格的背景颜色——bgcolor 132   7.4.2 表格的背景图像——background 133   7.5 设置表格的行属性 134   7.5.1 高度的控制——height 134   7.5.2 行的边框颜色——bordercolor 135   7.5.3 行的背景颜色——bgcolor、background 136   7.5.4 行文字的水平对齐方式——align 137   7.5.5 行文字的垂直对齐方式——valign 139   7.5.6 表格标题的垂直对齐方式——align 140   7.6 调整单元格属性 141   7.6.1 单元格大小——width、height 141   7.6.2 单元格水平跨度——colspan 142   7.6.3 单元格垂直跨度——rowspan 143   7.6.4 单元格对齐方式——align、valign 144   7.6.5 单元格的背景色 146   7.6.6 单元格的边框颜色——bordercolor 147   7.6.7 单元格的亮边框——bordercolorlight 148   7.6.8 单元格的暗边框——bordercolordark 150   7.6.9 单元格的背景图像——background 151   7.7 表格的结构 152   7.7.1 表格的表头标记——thead 153   7.7.2 表格的表主体标记——tbody 154   7.7.3 表格的表尾标记——tfoot 156   7.8 表格的嵌套 157   7.9 小结 159   7.10 习题 159   第8章 层标记——div 161   教学录像:33分钟   8.1 层 162   8.1.1 层的分类 162   8.1.2 定义数据块 162   8.2 <div>标签 163   8.2.1 <div>标签的简介 163   8.2.2 <div>标签的属性 164   8.2.3 <span>标签与<div>标签 170   8.3 <iframe>标签 172   8.3.1 <iframe>标签的简介 172   8.3.2 <iframe>标签的属性 172   8.4 <layer>标签和<ilayer>标签 174   8.4.1 标签层的使用 175   8.4.2 <layer>标签和<ilayer>标签的区别 176   8.5 应用div制作下拉菜单导航条 176   8.6 小结 179   8.7 习题 179   第9章 编辑表单 181   教学录像:26分钟   9.1 使用表单标签——form 182   9.1.1 处理动作——action 182   9.1.2 表单名称——name 183   9.1.3 传送方法——method 183   9.1.4 编码方式——enctype 184   9.1.5 目标显示方式——target 185   9.2 添加控件 185   9.3 输入类的控件 186   9.3.1 文字字段——text 186   9.3.2 密码域——password 187   9.3.3 单选按钮——radio 188   9.3.4 复选框——checkbox 189   9.3.5 普通按钮——button 190   9.3.6 提交按钮——submit 191   9.3.7 重置按钮——reset 192   9.3.8 图像域——image 193   9.3.9 隐藏域——hidden 195   9.3.10 文件域——file 195   9.4 列表/菜单标记 197   9.5 文本域标记——textarea 198   9.6 id标记 199   9.7 小结 200   9.8 习题 200   第10章 多媒体页面 202   视频讲解:18分钟   10.1 设置滚动文字 203   10.1.1 滚动文字标签——marquee 203   10.1.2 滚动方向属性——direction 203   10.1.3 滚动方式属性——behavior 204   10.1.4 滚动速度属性——scrollamount 205   10.1.5 滚动延迟属性——scrolldelay 206   10.1.6 滚动循环属性——loop 207   10.1.7 滚动范围属性——width、height 208   10.1.8 滚动背景颜色属性——bgcolor 209   10.1.9 滚动空间属性——hspace、vspace 209   10.2 添加背景音乐 211   10.2.1 设置背景音乐——bgsound 211   10.2.2 设置循环播放次数——loop 212   10.3 添加多媒体文件 213   10.3.1 添加多媒体文件标记——embed 213   10.3.2 设置自动运行——autostart 214   10.3.3 设置媒体文件的循环播放——loop 215   10.3.4 隐藏面板——hidden 216   10.3.5 添加其他类型的媒体文件 217   10.4 小结 217   10.5 习题 218   第2篇 HTML 5高级应用   第11章 HTML 5的新特性 221   视频讲解:6分钟   11.1 谁在开发HTML 5 222   11.2 HTML 5的新认识 222   11.2.1 兼容性 222   11.2.2 实用性和用户优先 222   11.2.3 化繁为简 223   11.3 无插件范式 223   11.4 HTML 5的新特性 224   11.5 小结 224   第12章 HTML 5与HTML 4的区别 225   视频讲解:51分钟   12.1 语法的改变 226   12.1.1 HTML 5的语法变化 226   12.1.2 HTML 5中的标记方法 226   12.1.3 HTML 5语法中的3个要点 227   12.1.4 标签实例 228   12.2 新增的元素和废除的元素 228   12.2.1 新增的结构元素 228   12.2.2 新增的块级的语义元素 230   12.2.3 新增的行内的语义元素 231   12.2.4 新增的嵌入多媒体元素与交互性元素 231   12.2.5 新增的input元素的类型 232   12.2.6 废除的元素 233   12.3 新增的属性和废除的属性 234   12.3.1 新增的属性 234   12.3.2 废除的属性 236   12.4 全局属性 237   12.4.1 contentEditable属性 237   12.4.2 designMode属性 238   12.4.3 hidden属性 239   12.4.4 spellcheck属性 239   12.4.5 tabindex属性 240   12.5 小结 240   12.6 习题 240   第13章 HTML 5的结构 242   视频讲解:20分钟   13.1 新增的主体结构元素 243   13.1.1 article元素 243   13.1.2 section元素 245   13.1.3 nav元素 247   13.1.4 aside元素 248   13.1.5 time元素 250   13.1.6 pubdate属性 250   13.2 新增的非主体结构元素 251   13.2.1 header元素 251   13.2.2 hgroup元素 252   13.2.3 footer元素 252   13.2.4 address元素 253   13.3 小结 253   13.4 习题 254   第14章 HTML 5中的表单 255   视频讲解:50分钟   14.1 新增表单元素与属性 256   14.1.1 新增的属性 256   14.1.2 增加与改良的input元素的种类 259   14.1.3 output元素的添加 264   14.1.4 应用新增元素制作注册表单 264   14.2 对表单的验证 266   14.2.1 自动验证 266   14.2.2 checkValidity显式验证法 267   14.2.3 避免验证 268   14.2.4 使用setCustomValidity方法自定义   错误信息 268   14.3 增加的页面元素 269   14.3.1 新增的figure元素 270   14.3.2 新增的details元素 271   14.3.3 新增的mark元素 272   14.3.4 新增的progress元素 274   14.3.5 新增的meter元素 275   14.3.6 改良的ol列表 276   14.3.7 改良的dl列表 276   14.3.8 加以严格限制的cite元素 277   14.3.9 重新定义的small元素 278   14.4 小结 278   14.5 习题 279   第15章 HTML 5中的文件与拖放 280   视频讲解:40分钟   15.1 选择文件 281   15.1.1 通过file对象选择文件 281   15.1.2 使用blob接口获取文件的类型与大小 282   15.1.3 通过类型过滤选择的文件 283   15.2 使用FileReader接口读取文件 285   15.2.1 检测浏览器是否支持FileReader接口 285   15.2.2 FileReader接口的方法 285   15.2.3 使用readAsDataURL方法预览图片 286   15.2.4 使用readAsText方法读取文本文件 287   15.2.5 FileReader接口中的事件 288   15.3 拖放API 290   15.3.1 实现拖放的步骤 290   15.3.2 通过拖放显示欢迎信息 291   15.4 dataTransfer对象应用详解 293   15.4.1 使用effectAllowed和dropEffect属性   设置拖放效果 293   15.4.2 使用setDragImage方法设置拖放图标 294   15.5 小结 295   15.6 习题 295   第16章 多媒体播放 296   视频讲解:35分钟   16.1 HTML 5多媒体的简述 297   16.1.1 HTML 4中多媒体的应用 297   16.1.2 HTML 5页面中的多媒体 297   16.2 多媒体元素基本属性 298   16.3 多媒体元素常用方法 302   16.3.1 媒体播放时的方法 302   16.3.2 canPlayType(type)方法 304   16.4 多媒体元素重要事件 304   16.4.1 事件处理方式 304   16.4.2 事件介绍 305   16.4.3 事件实例 306   16.5 小结 308   16.6 习题 309   第17章 绘制图形 310   视频讲解:1小时32分钟   17.1 canvas的基础知识 311   17.1.1 canvas是什么 311   17.1.2 在页面中放置canvas元素 311   17.1.3 绘制带边框的矩形 312   17.2 在画布中使用路径 314   17.2.1 使用arc方法绘制圆形 314   17.2.2 使用moveTo与lineTo路径绘制火柴人 316   17.2.3 贝塞尔和二次方曲线 317   17.3 运用样式与颜色 319   17.3.1 fillStyle 和 strokeStyle属性 319   17.3.2 透明度 globalAlpha 321   17.3.3 线型 Line styles 323   17.4 绘制渐变图形 325   17.4.1 绘制线性渐变 325   17.4.2 绘制径向渐变 326   17.5 绘制变形图形 328   17.5.1 坐标的变换 328   17.5.2 矩阵变换 330   17.6 组合多个图形 333   17.7 给图形绘制阴影 335   17.8 应用图像 336   17.8.1 绘制图像 336   17.8.2 图像的局部放大 338   17.8.3 图像平铺 339   17.8.4 图像裁剪 341   17.8.5 像素的处理 342   17.9 绘制文字 344   17.10 保存与恢复状态 345   17.11 文件的保存 346   17.12 对画布绘制实现动画 347   17.13 综合实例——桌面时钟 348   17.14 小结 350   17.15 习题 351   第18章 数据存储 352   视频讲解:50分钟   18.1 初识Web Storage 353   18.1.1 什么是Web Storage 353   18.1.2 使用Web Storage中的API 353   18.1.3 sessionStorage和localStorage的实例   ——计数器 355   18.1.4 Web Storage综合实例——留言本 357   18.1.5 JSON对象的存数实例——用户信息卡 359   18.2 本地数据库 361   18.2.1 Web SQL数据库简介 361   18.2.2 使用Web SQL Database API 362   18.2.3 本地数据库实例——用户登录 363   18.3 小结 367   18.4 习题 367   第19章 离线应用程序 368   视频讲解:13分钟   19.1 HTML 5离线Web应用概述 369   19.1.1 离线Web应用概述 369   19.1.2 本地缓存与浏览器网页缓存的区别 370   19.2 创建HTML 5离线应用 370   19.2.1 缓存清单(manifest) 370   19.2.2 配置IIS服务器 372   19.2.3 浏览缓存清单 372   19.3 浏览器与服务器的交互过程 373   19.4 applicationCache对象 374   19.4.1 swapCache方法 375   19.4.2 applicationCache对象的事件 376   19.5 小结 379   19.6 习题 379   第20章 使用Web Worker处理线程 380   视频讲解:25分钟   20.1 Web Worker概述 381   20.1.1 创建和使用Worker 381   20.1.2 Web Worker应用实例——求和运算 382   20.2 在Worker内部能做什么 383   20.3 多个JavaScript文件的加载与执行 384   20.4 线程嵌套 384   20.4.1 单层嵌套 385   20.4.2 在多个子线程中进行数据的交互 387   20.5 小结 390   20.6 习题 390   第21章 通信API 391   视频讲解:4分钟   21.1 跨文档消息通信 392   21.1.1 使用postMessageAPI 392   21.1.2 跨文档消息传输 392   21.2 小结 394   第22章 获取地理位置信息 395   视频讲解:12分钟   22.1 Geolocation API的概述 396   22.1.1 使用getCurrentPosition方法获取   当前地理位置 396   22.1.2 持续监视当前地理位置的信息 398   22.1.3 停止获取当前用户的地理位置信息 398   22.2 position对象 398   22.3 在google地图上显示“我在这里” 399   22.4 小结 401   22.5 习题 401   第3篇 HTML 5项目实战   第23章 旅游信息网前台页面 405   视频讲解:20分钟   23.1 概述 406   23.2 网站预览 406   23.3 关键技术 410   23.3.1 网站主体结构设计 410   23.3.2 HTML 5结构元素的使用 410   23.4 网站公共部分设计 411   23.4.1 设计网站公共header 411   23.4.2 设计网站公共footer 418   23.5 网站主页设计 419   23.5.1 显示网站介绍及相关图片 419   23.5.2 主页左侧导航的实现 421   23.6 留下足迹页面设计 424   23.6.1 播放音乐 424   23.6.2 添加留言功能的实现 425   23.7 小结 426   附录 习题参考答案 427   HTML 5从入门到精通   目 录   X   XI
前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 Android开发准备工作 2.2 开发包及其工具的安装和 配置 2.2.1 安装JDK和配置Java开发 环境 2.2.2 Eclipse的安装与汉化 2.2.3 SDK和ADT的安装和 配置 2.3 创建第一个Android项目——HeUoAndroid 2.3.1 创建HelloAndroid项目 2.3.2 运行HelloAndroid及模拟器的使用 2.3.3 调试HelloAndroid 2.4 小结 第二部分 基础篇 第3章 Android程序设计基础 3.1 Android程序框架 3.1.1 Android项目目录结构 3.1.2 Android应用解析 3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4章 用户界面开发 4.1 用户界面开发详解 4.1.1 用户界面简介 4.1.2 事件处理 4.2 常用控件应用 4.2.1 文本框(Textiew) 4.2.2 列表(ListView) 4.2.3 提示(T0ast) 4.2.4 编辑框(EditText) 4.2.5 单项选择(RadioGroup、RadioButton 4.2.6 多项选择(CheckBox) 4.2.7 下拉列表(Spinner) 4.2.8 自动提示(AutoComplete.TextⅥew) 4.2.9 日期和时间(DatePicker、TimePicker) 4.2.10 按钮(Button) 4.2.1l 菜单(Menu) 4.2.12 对话框(Dialog) 4.2.13 图片视图(ImageView) 4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 状态栏提示(Notification、NotificationManager) 4.2.22 对话框中的进度条(ProgressDialog) 4.3 界面布局 4.3.1 垂直线性布局 4.3.2 水平线性布局 4.3.3.相对布局(RelativeLayout) 4.3.4 表单布局(TableLayout) 4.3.5 切换卡(TabWidget) 4,4 小结 第5章 Android游戏开发 5.1 Android游戏开发框架 5.1.1 View类开发框架 5.1.2 SurfaceView类开发框架 5.2 Graphics类开发 5.5.1 Paint和Color类介绍 5.2.2 Canvas类介绍 5.2.3 几何图形绘制 5.2.4 字符串绘制 5.2.5 图像绘制 5.2.6 图像旋转 5.2.7 图像缩放 5.2.8 图像像素操作 5.2.9 Shader类介绍 5.2.10 双缓冲技术 5.2.11 全屏显示 5.2.12 获得屏幕属性 5.3 动画实现 5.3.1 Tween动画 5.3.2 Frame动画 5.3.3 GIF动画播放 5.4 小结 第6章 Android数据存储 6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享(ContentProviders) 6.7 小结 第7 章多媒体开发 7.1 多媒体开发详解 7.1.1 Open Core 7.1.2 MediaPlayer 7.1.3 MediaRecorder 7.2 播放音乐 7.3 播放视频 7.4 录制歌曲 7.5 相机设置 7.6 闹钟设置 7.7 铃声设置 7.8 小结 第8章 网络与通信 8.1 网络通信基础 8.1.1 无线网络技术 8.1.2 Android网络基础 8.2 HTTP通信 8.2.1 HttpURLConnection接口 8.2.2 HttpClient接口 8.2.3 实时更新 8.3 Socket通信 8.3.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值