阅读:1878回复:4
关于如何得知,打印时,text的打印方式的问题。
以下主要针对TrueType font
先解释一下,一般来说,打印一个text,可以竖着打vertical,横着打horinal,还有一种是确定打印方向的reverse...当然也有其他很多,这里暂不考虑。 拿vertical为例,每个字符又都可以是横的或竖的,除了vertical font以外。一般来说,向下打,就把字符转负90度(也就是向右转),向上打(reverse),就把字符转正90度。在打印时我使用的是pclxl语言,所以主要通过setcharangle ,setcharscale。来解决问题。 好了,问题来了。 如何在drvtextout中得知一个glyph的正确方向或者说角度呢? 先列出我使用过的失败的方法: gdi提供的参数(STROBJ)pstro->flAccel进行判断,发现此参数没有msdn的描述的那么有用。 通过计算pstro->pgp(注意此参数可能为null有时要先处理以下),获得glyph坐标,通过加减同一个string中的坐标来判断打印方向。可是致命伤是如果只有一个glyph....就没办法。。 实际上在对图形中的文字进行打印时也有问题,就是字根据图形横向和纵向扩缩的扩缩(powerpoint里比较明显)比例计算。不过小人不贪心,请大大们先解决上面的吧。。。 |
|
沙发#
发布于:2005-04-21 08:39
问题没有描述清楚,
好像是要得到打印时字符串的角度和方向吧? |
|
|
板凳#
发布于:2005-04-21 09:22
简单的说就是字符串的角度和方向(这个可以回避,我有替代方案了
),以及字符串中的单个字符的角度和放缩。 你可以试着用word,powerpoint打一竖排字,英文字符从上往下打时和从下往上时角度不一样(从下往上的情况估计图形里比较多见)。简而言之,如何解决可能没有规律的字符旋转打印,也就是说如果我给你任意一个被旋转过的字符(单纯的旋转不包含象italic那样的字体变形),如何判断它相对于y轴旋转的角度。 然后是字符放缩问题,在powerpoint里将一个图形横向缩小,图形里的字也会横向变窄,但字体的大小也就是我们以前讨论过的size是不会改变的(这一点和word里的位图放缩不一样)。这个时候我需要知道,横向缩小的比例怎么办。 |
|
地板#
发布于:2005-04-21 18:10
也就是longfont里面的
LONG lfEscapement; LONG lfOrientation; 你是怎么得到或计算出来的? |
|
|
地下室#
发布于:2005-04-22 15:15
longfont??
这个我没查到过,logfont到见过。但是DrvTextOut里只提供FONTOBJ 和STROBJ,这个东西怎么获得阿。。。 我现在用的是: 先用FONTOBJ_pvTrueTypeFontFile读取文件,在根据文件格式找到glyph的AdvanceWidth.然后用 AdvanceWidth*size/pifi->fwdUnitsPerEm(size就是我们讨论过的字体大小,pixel值),获得原始宽度。在用STROBJ获取现在的实际宽度 这样两者一比就是横向放缩比例了。 对于纵向的,我试了几种方法,都不够准确,主要是当前的实际高度取得不准。该死的mic也没提供什么高度值。。。只有一个 pstro->rclBkGround,可是对于century 这类字体,这个rectl的竖边 太长了。。 另外角度问题,现在一筹莫展,用bitmap方式先代替了。。 |
|