fastreport.net 竖排

几经考虑,终于从诚意比较足的 http://www.commuch.com 上购买了FASTREPORT.NET的源码,有了源码,自己想怎么改就怎么改。

FP没有竖排,毕竟是老毛子的东西。实现竖排有两种方式 :在每个字符后强制回车(这意味着,要么动态检测每个需要竖排的单元格内容,然后为了显示而修改其实际内容,最终会影响导出结果与原数据不一致。当时我想竖排的一般是标头,所以增中了一个属性叫READONLY,用于在自动绑定数据时跳过这些标头)。另一种方法就是在单元格里套一个LABEL,让LABEL变的只有一个字宽,这样渲染里就会自动换行了。但这种方法带来的工作量是很大的。我本来就是在写自动转换工具,没必要这样搞,于是买来源码。渲染的事情让渲染去做,增加了一个竖排属性,然后修改DRAWTEXT方法,很快就处理好了。



 if (TextOrientation) {
                    //竖排时强制宽度
                    float fontWidth = e.Graphics.MeasureString("我", font).Width;
                    textRect = new RectangleF(
                              (AbsLeft + Padding.Left) * e.ScaleX + ((Width - Padding.Horizontal) * e.ScaleX - fontWidth) / 2,
                             (AbsTop + Padding.Top) * e.ScaleY,
                             (fontWidth - 3),//* e.ScaleX, //-3,令中文前遇空格自动换行
                             (Height - Padding.Vertical) * e.ScaleY);
                }



设计界面看起来很好,但在预览与打印的时候还是没有实现 竖排,于是悲剧来了,因为不 明白设计思路,只能从预览开始一路追查,发现在预览时,后面追加的属性竟然丢失了,于是怀疑是在反射时丢失的,进而怀疑是在序列化与反序列化出问题了,追了一上午,证明不是这里的问题,也不是类型转换时丢失了。

又反复追,观察一切可能的问题,又追了一下午,终于发现了一个不起眼的代码,预览的组件不是原报表的组件,而是复制了一份,问题就出现这个克隆上,克隆时没有使用反射去复制原对象的一切属性,而是另外写了个方法来复制属性。在其中追加我要属性。预览正常。



public override void Assign(Base source)
        {
            base.Assign(source);

            TextObject src = source as TextObject;
            AutoWidth = src.AutoWidth;
            HorzAlign = src.HorzAlign;
            VertAlign = src.VertAlign;
            Angle = src.Angle;
            RightToLeft = src.RightToLeft;
            WordWrap = src.WordWrap;
            Underlines = src.Underlines;
            Font = src.Font;
            TextFill = src.TextFill.Clone();
            Trimming = src.Trimming;
            FontWidthRatio = src.FontWidthRatio;
            FirstTabOffset = src.FirstTabOffset;
            TabWidth = src.TabWidth;
            Clip = src.Clip;
            Highlight.Assign(src.Highlight);
            Wysiwyg = src.Wysiwyg;
            LineHeight = src.LineHeight;
            HtmlTags = src.HtmlTags;
            AutoShrink = src.AutoShrink;
            AutoShrinkMinSize = src.AutoShrinkMinSize;
            ParagraphOffset = src.ParagraphOffset;

            ReadOnly = src.ReadOnly;
            TextOrientation = src.TextOrientation;
        }


打印不正常,修改缩放比例,完成。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值