======================================================
注:本文源代码点此下载
======================================================
因为这两块内容很相关,所以我在这里把它们一块写了。
html的标准标签有很多,但是事实上分析一下,除了表单的那些标签外,其它的标签都是用来布局和显示内容的。所以只要很熟悉html的各个标签,那么就可以很容易知道这个标签的默认样式。同时对显示的内容分析,显示的内容有三种:
1、文本,这是最复杂的一个显示内容。总结了一下,我定义了这样的结构来描述文本的显示样式:
public struct fontstyle
{
public string fontname;//字体的名称
public uint fontsize;//文字大小
public color fontcolor;// 字体的颜色
public bool isunderline; //是否下划线
public bool isitalic;//是否斜体
public bool isbold;//是否粗体
public alignment align;//对齐方式
public object bgcolor;//背景颜色
public string link;//字体关联的链接
public raisetype raise;//文字的水平位置(普通,上标,下标)
}
public enum raisetype
{
normal,
sub,
sup
}
对于html的dom模型,是一种树型结构,所以找到一根结点,不断去遍历下面的子结点,就可以得到相应的字体样式。在遍历一层的时候,只要复制一下字体显示的结构,就可以很容易解决样式表里面,样式继承的问题。
2、水平线
对于水平线,样式就简单多了,只有宽,粗,连颜色都没有,所以我就不多说什么了。
3、图片
图片也比较简单,只是可能会带上链接,这里要注意。
对于布局的标签,真正难于处理的就是表格布局,特别是表格里面的各单元格不指定宽高的时候,要根据里面的内容来定,这个在做pdf的生成的时候,远比正真用gdi/gdi+在画布上画出来难。现在我的办法只好是先粗画一下,然后再做一次调整。整个的效率和效果都不是很好,很希望得到大家的指正。
再说postscript,pdf里面显示的内容都是由postscript来实现的,如果用记事本打开pdf的时候,经常会看到里面大段的乱码,这里面很可能就是压缩后的postscript了。和所有的语言一样,它也是遵守:操作码,操作数这样规则的。具体的大家还是去看说明吧,如果真讲起来写上几十篇都写不完。因为只关联到显示,所以现在初步我只关心定位,显示大小,画图片等几个常用的。
用postscript画图的时候,感觉很痛苦。因为它的坐标系统的原点在左下角,而不是平常所用的左上角,所以想写下第一行,必须要知道整个的高度。同时,感觉它原始到了极点,第一行文字的换行都要手工来换(不知道是不是还有其它的方法可以实现,如果有,一定要告诉我噢),也就是说我们要根据当前字体的宽度来算出来这串字符会有多宽,然后把它折成两行,其它的就和画画一样了,定坐标,选画笔颜色和类型,画上所要的内容。
还要说明一点是,在pdf里面字体是没有下划线这个样式的,所以下划线的实现就是写上文字后,在下面再画上一条线。pdf里面的链接的实现,也是要在pdf文档里面显示说明它所有效的区域。
写得很粗糙,因为我喜欢从整体去抽象一个东西。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/