程序员的日常

我们所熟悉的文档是由什么组成的?是如何实现排版的?

2020-06-08  本文已影响0人  鱼香土豆丝

背景

这段时间对一些文档的标准做了一些研究,今天呢做一个简单的总结,这里给大家做个简单的介绍

文档的组成

如果问一个人,一个文档由是由什么做成的,收到的答案可能是千奇百怪的:

但是仅仅对于显示来说,其实只要由三种类型就够了,他们分别是

为什么 说可以分为这三类呢?那艺术字、表格、批注呢?其实这些元素都是可以由这三类元素组合而成的。
比如说表格,表格是由一条一条线段组合而成,或者是一个一个的矩形组合而成,只要设置好这些框的一些属性(颜色,宽度)就可以组合出一个表格。


在这里插入图片描述

你可能会问线段好理解,那么这种带颜色的怎么做到的呢?这里就可以尝试用svg 中的填充,填充可以是颜色,可以时渐变色,也可以是图片。
批注是这样的:


在这里插入图片描述
线段是图形,小头像是图片,下划线,标注框是图形。批注内容是文字。

所以说,无论多复杂的元素都是由这三个base元素构成的。

文档元素的定位

上一节介绍了文档的基础元素,这一节则重点介绍元素的定位,在笛卡尔坐标系中,我们是如何定位一个元素的?


在这里插入图片描述

我们需要知道一个元素的坐标,也就是通常我们所说的(x,y)。一般来说,一种文档协议有一套自己的坐标系,比如说PDF是以左下角为坐标原点(0,0),而OFD则是以左上角为原点。了解坐标原点之后,我们就可以按照元素的坐标进行画图了。

不过这时候又出现一个问题。如果你在文档中贴了一个原大小是1000 * 1000的图片,然后你对这个图片进行了大小调整,比如说调整到了200 * 200,并对这个元素进行了平移。那么文档客户端会对图片进程处理和重新设置它的坐标吗?如果是每次都进行这样处理的话客户端的负载会有多大啊?

这里不得不引入仿射变换,这里我们不需要对原元素进行修改,只需要把它的变换过程给记录到一个矩阵中就可以,在做显示的时候把它的坐标变换到合适的位置就可以。仿射变化接下来讲解一下

同时可以对元素设置一个边框,让它在边框内可以显示,边框外则自动裁剪。

仿射变换

仿射变换就是对坐标进行线性变换和平移。

我们先以一个矢量来演示下什么是线性变换:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jnHtRDDn-1591510321346)(http://bed.thunisoft.com:9000/ibed/2020/04/18/9kZNPOYJl.png)]

这种线性变换可以把一个图像扭曲到你怀疑人生,但是不管它怎么扭曲,它的坐标原点还是它的原点,并没有发生改变。

这时候就需要引入平移操作,在一个二维坐标系里,只用2*2的矩阵是不能表示平移操作,只能在变换矩阵中引入一个表示平移的分量,矩阵就变成了这样:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2QBLeWRj-1591510321348)(http://bed.thunisoft.com:9000/ibed/2020/04/18/9kZXSdM6D.png)]

这就是仿射变换。简单的说就是一个线性变换加上平移。

总结

一个文档是由

上一篇 下一篇

猜你喜欢

热点阅读