# OFD 布局设计文档
## 原始OFD结构分析
文档主要构成如下:
![文档主要构成](文档主要构成.jpg)
- *Document*: 定义了一个文档,包括文档内容、权限、文档数据等。
- *Pages*: 定义了一系列的页面,包括页面的顺序、页面描述文件所在的位置,相当于我们书本中书签一样的作用。
- *Page*: 定义一页页面,包括页面的大小,页面含有的内容。
- *Layer*: 页面中的内容之一,用于容纳页面中不同图层的内容。
- *PageBlock*: 页面中实际的元素的父类。
- *GraphicUnit*: 定义了页面元素一些基本表现。
### 页面(Page)
页面边界如下: (来自于《GBT_33190-2016_电子文件存储与交换格式版式文档.pdf》 图 8)
![页面边界层次](页面边界层次.jpg)
- 物理区域: 页面物理区域,左上角的坐标为页面空间坐标系的原点。
- 显示区域: 页面内容实际显示或打印输出的区域,位于物理区域内,包含页眉、页脚、版心等内容。
- 版心区域: 文件的正文区域,位于显示区域内。左上角坐标决定了在显示区域内的位置。
- 出血区域: 超出设备性能限制的额外出血区域,位于物理区域外。不出现时默认值为物理区域。
页面的层次结构可以通过在Document中定义并描述,也可以在每个页面中独立出现,当页面中不含页面结构层次描述时,默认从使用Document中的页面层次结构。
页面可以用下面结构进行理解:
![Page](Page.jpg)
页面主要功能:
1. 页面的大小。
2. 容纳图层。
页面本身是不容纳实际的图元,页面只是一个容器了一系列的图层,在图层中容纳各个图元。页面按照一定的图层顺序,依次渲染。
我们所有看的一个OFD页面都是页面中一系列图层按照一定顺序,渲染得到。
### 图层(Layer)
图层处于页面中用于容纳图形图像元素,也就是图元。
阅读器来解析文档时,会根据下面图层顺序进行页面的渲染。
![图层渲染顺序](图层渲染顺序.jpg)
渲染时,自下而上,依次渲染。位于上层的图层可以覆盖位于它所出图层下方的图层内容。
### 图元(GraphicUnit)
图元是OFD中页面上呈现内容的最基本单元,所有页面显示内容,包括文字、图形、图像等,都属于图元,或是图元对象的组合。
图元在图层中如下所示:
![图元](图元.jpg)
> 图层本身是只是一个逻辑概念,是不可见的,可以把它想象成一个与页面等大且透明的层。
图元主要功能是定义元素的位置,以及大小。它还可以通过变换矩阵对元素本身就进行变换,通过裁减区域对元素进行裁减。
## 布局分析
根据不同的方式,图元在页面中的布局方式可分为下面2种:
1. 通过固定坐标和大小确定图元在页面中位置的 **固定布局**。
2. 位置通过一定的规则计算得到,图元大小根据内容而变化或手动指定的方式得到的 **流式布局**。
图元定义了内容的在页面中的位置(坐标)和大小(宽高),但是无法进行更加细致的调整和布局。
在参考了HTML的盒式模型后,OFD R&W 也将采取盒式模型进行布局,而图元没有这样的能力,所以
此处采取抽象出一个盒式模型对象Div,该对象在最终通过渲染引擎的分析和调整之后,采用图元的
方式显示内容。
### 盒式模型
参考HTML的盒式模型结构如下:
![盒式模型](box-model.png)
- Content box: 这个区域是用来显示内容,大小可以通过设置 width 和 height.
- Padding box: 包围在内容区域外部的空白区域; 大小通过 padding 相关属性设置。
- Border box: 边框盒包裹内容和内边距。大小通过 border 相关属性设置。
- Margin box: 这是最外面的区域,是盒子和其他元素之间的空白区域。大小通过 margin 相关属性设置。
> 以上均出自于 [The_box_model](https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Building_blocks/The_box_model)
在OFD R&W 中默认情况设置`Margin`、`Border`和`Padding`都为0,仅在需要时进行设置。
> 注意: 与HTML不同OFD是板式文档,由于实现方式采用逻辑上的盒式模型,该模型仅
> 在渲染时候有效。在文档生成完成之后所有模型都会被渲染器翻译为图元,从图元中
> 仅能知道位置和大小,无法再还原回盒式模型。
盒式模型应有下面参数:
| 参数名 | 意义 |
| --- | --- |
| *Content width* | 内容宽度。 |
| *Content height* | 内容高度。 |
| *Padding* | 内边距。 |
| *Border* | 边框宽度。 |
| *Margin* | 外边距。 |
| *X* | 固定布局时表示盒式模型在页面中左上角X坐标。 |
| *Y* | 固定布局时表示盒式模型在页面中左上角Y坐标。 |
| *clear* | 对段的占用情况:none 表示共享,both 表示独占,默认值为none |
| *float* | 在段中的浮动方向:left、right、center。默认值为left |
| *left* | 相对于段的左边界距离。 |
| *right* | 相对于段的右边界距离。 |
| *top* | 相对于段的顶边的距离。 |
| *integrity* | 当渲染空间不足时可能会拆分元素,true为不拆分,false为拆分。默认值为false |
### 固定布局
固定布局即针对于某个确定页面空间的布局。固定布局和OFD的图元基本一致,但是为此处
通过逻辑实现了Padding、Border、Margin。
简单来说就是把盒式模型放置在某个固定大小的空间中,如下所示:
![固定布局](固定布局.jpg)
如果Padding、Border、Margin分别在上、右、下、左四个方向的值都一致,那么图元的宽度为:
```
Height = Content height + 2 * (Padding + Border + Margin)
Width = Content Width + 2 * (Padding + Border + Margin)
```
如果不一致则需要分别计算。
> 盒式模型最终会被翻译成图元并放置在页面中的图层内。
### 流式布局
流的定义: 在指定宽度下,高度为无穷大的区域。就好像水流一样永无止境。
![流式模型](流式模型.jpg)
在流式布局中没有页面的概念,所有Div均在流中,他们的位置由渲染引擎通过计算分析后得到。
那么如何划分和使用流?
这里将流在逻辑上按照一定规则计算分成很多的段(Segment)每个段具有一定的高度,如下所示:
![分段](分段.jpg)
由于段是逻辑上的概念,他是为盒式模型的定位而服务的,因此段应该由盒式模型来确定。
因此给出以下定义:
宽度与页面版心区域宽度相同,高度与段中最大盒式模型高度相同的区域,称为段。
在段中不允许出现宽度大于段宽度的盒式模型出现。
![段定义](段定义.jpg)
这里也就产生了两个问题:
1. 盒式模型如何在流中划分出段。
2. 盒式模型在段中如何定位。
#### 段与盒式模型
在段中的盒式模型可以分为下面两种情况:
1. *both*: 每个盒式模型独自占有一个段,段独占。
2. *none*: 多个盒式模型共享一个段,段共享(默认)。
通过Div中的`clear`属性控制。
##### 独占
在独占的情况下,段中可以有下面几种情况。
盒式模型占满整个段:
![占满整个段](占满整个段.jpg)
> 占满整个段的情况无论是段独占或是段共享都是一致的。
无法占满整个,整个段时应可以通过设置一定的属性来控制盒式模型在段中的位置。
根据控制方式的不同可分为:
1. 浮动位置。
2. 相对位置。
浮动位置
![浮动位置](浮动位置.jpg)
根据浮动的位置可以有三种浮动方式: 左(left)、右(right)、居中(center)。
通过Div中的`float`参数控制。
相对位置
![相对定位情况.jpg](相对定位情况.jpg)
**相对定位的对象是�
没有合适的资源?快使用搜索试试~ 我知道了~
实现ofd签章的demo及ofd使用说明
共606个文件
java:462个
jpg:40个
ofd:31个
需积分: 5 1 下载量 36 浏览量
2023-08-16
18:31:40
上传
评论 1
收藏 76.61MB RAR 举报
温馨提示
实现ofd签章的demo及ofd使用说明
资源推荐
资源详情
资源评论
收起资源包目录
实现ofd签章的demo及ofd使用说明 (606个子文件)
SignedValueV4.dat 17KB
deploy 44B
SESealData.DER 8KB
UserV4.esl 17KB
UserV4.esl 17KB
UserV1.esl 17KB
UserV1.esl 17KB
.gitignore 480B
.gitignore 303B
.gitignore 184B
ASCII字体宽度测量.html 1KB
ItextMaker.java 35KB
AWTMaker.java 34KB
DrawContext.java 33KB
KeywordExtractor.java 32KB
OFDDocTest.java 31KB
PdfboxMaker.java 30KB
DrawContextTest.java 29KB
OFDReader.java 23KB
PointUtil.java 22KB
ResourceManage.java 22KB
Div.java 20KB
OFDSigner.java 19KB
OFDDoc.java 17KB
FontLoader.java 17KB
DefaultElementProxy.java 16KB
CommonUtil.java 16KB
VirtualContainer.java 16KB
CT_GraphicUnit.java 14KB
Paragraph.java 13KB
ResourceLocator.java 13KB
CT_Text.java 12KB
RidingStampPosTest.java 12KB
Annot.java 12KB
CT_DrawParam.java 12KB
SVGAlphaComposite.java 11KB
DLOFDReader.java 11KB
AbbreviatedData.java 11KB
Annotation.java 10KB
OFDValidator.java 10KB
CT_RadialShd.java 10KB
RidingStampPos.java 10KB
DivRender.java 10KB
ResManager.java 9KB
OFDDir.java 9KB
Arc.java 9KB
OFDDocStreamTest.java 9KB
CT_PageArea.java 9KB
LayoutTest.java 9KB
TextCode.java 9KB
CT_Color.java 9KB
ConvertHelper.java 9KB
CT_DocInfo.java 8KB
Span.java 8KB
OFDElement.java 8KB
PKCGenerate.java 8KB
CT_Pattern.java 8KB
StreamingLayoutAnalyzer.java 8KB
Document.java 7KB
CT_Permission.java 7KB
CT_Font.java 7KB
FontSetting.java 7KB
CT_Attachment.java 7KB
CT_VPreferences.java 7KB
ParagraphRender.java 7KB
CuttingRideStampPos.java 7KB
OFDReaderTest.java 7KB
DocDir.java 7KB
ST_Array.java 7KB
OFDSignerStreamTest.java 7KB
CT_Extension.java 6KB
VPageParseEngine.java 6KB
CT_Path.java 6KB
Segment.java 6KB
Img.java 6KB
TextMeasureTool.java 6KB
Border.java 6KB
OFDSignerTest.java 6KB
SESV4Container.java 6KB
Page.java 6KB
ResourceLocatorTest.java 6KB
KeywordPosSignTest.java 6KB
SignedInfo.java 6KB
CT_CommonData.java 6KB
CT_AxialShd.java 5KB
AnnotationRender.java 5KB
CT_VectorG.java 5KB
CT_Dest.java 5KB
SESealTest.java 5KB
SESealTest.java 5KB
DrawParamCache.java 5KB
VirtualContainerTest.java 5KB
DocVersion.java 5KB
OptVal.java 5KB
PageDir.java 5KB
SESV1Container.java 5KB
PageLayout.java 5KB
SES_ESPropertyInfo.java 4KB
CT_CGTransform.java 4KB
PKCS12Tools.java 4KB
共 606 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
fengloveyun
- 粉丝: 30
- 资源: 55
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 上市公司-人工智能的采纳程度面板数据(2003-2021年).xlsx
- 第5章spring-mvc请求映射处理
- 2023-04-06-项目笔记 - 第一百十六阶段 - 4.4.2.114全局变量的作用域-114 -2024.04.27
- app-release.apk.1
- soap json 等系列化方式
- c++的五子棋代码,在vs6.0上完美运行
- 基于Javaee的影视创作论坛的设计与实现.rar
- Python导出Mysql数据字典(部分表或全表)
- Java工具类实现输入一个路径,强创建路径、并且鉴权目标路径是否具备修改权限,用于增强程序的健壮性与稳定性,快速开发!
- 资源【STM32+HAL】三轴按键PS2摇杆
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功