HTML转PDF之HTML内容解析和PostScript的生成

来源:互联网 发布:js 为false 编辑:程序博客网 时间:2024/06/11 12:15

======================================================
注:本文源代码点此下载
======================================================

因为这两块内容很相关,所以我在这里把它们一块写了。

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^)/
原创粉丝点击