【问题标题】:System.Drawing.Printing Drawing String vertically fromRight to Left in rectangle center alignmentSystem.Drawing.Printing 在矩形中心对齐中从右到左垂直绘制字符串
【发布时间】:2013-01-07 04:12:42
【问题描述】:

我想在指定的矩形(垂直方向)中绘制一个字符串,下面的代码给了我我想要的,但文本流是从左到右,我想要的是从右到左。就像 1 号线在右侧,2 号线在左侧。我也做了转型,但没有运气。

 RectangleF tabbor = new RectangleF(0, 0,borHeight, 44.35F);
        StringFormat sf = new StringFormat();
        //if (cmbDir.SelectedItem.Equals("Vertical"))
        //    sf.FormatFlags = StringFormatFlags.DirectionVertical;
        sf.LineAlignment = StringAlignment.Center;
        sf.Alignment = StringAlignment.Center;
        SolidBrush drawBrush = new SolidBrush(Color.Black);
        //Do 180 degree Rotatation Transformation
        ev.Graphics.RotateTransform(90, MatrixOrder.Append);                   
        ev.Graphics.TranslateTransform(xPos+44.35F, yPos, MatrixOrder.Append);                    
        ev.Graphics.DrawString("T", printFont, Brushes.Black, tabbor, sf);
        if (cbPreview.Checked)
            ev.Graphics.DrawRectangle(Pens.Black, Rectangle.Round(tabbor));

我正在寻找从上到下的文本(现在它是反向的),从右到左的行位置(这是有效的)

【问题讨论】:

    标签: c# winforms printing system.drawing


    【解决方案1】:

    您可以通过 180 度旋转变换来实现此目的。检查以下代码

            RectangleF tabbor = new RectangleF(0, 0, 44.35F,150.0F);         
            StringFormat sf = new StringFormat();
            sf.FormatFlags = StringFormatFlags.DirectionVertical;            
            String drawString = "First Line Second Line";
            Font drawFont = new Font("Arial", 16);
            SolidBrush drawBrush = new SolidBrush(Color.Black);
            float x = 0F;
            float y = 0F;
            StringFormat drawFormat = new StringFormat();
            drawFormat.FormatFlags = StringFormatFlags.DirectionVertical;
            //Do 180 degree Rotatation Transformation
            ev.Graphics.RotateTransform(180,MatrixOrder.Append);
            ev.Graphics.TranslateTransform(50, 150,MatrixOrder.Append);
            ev.Graphics.DrawString(drawString, drawFont, Brushes.Black, tabbor,sf);               
            ev.Graphics.DrawRectangle(Pens.Black, Rectangle.Round(tabbor)); 
    

    【讨论】:

    • 感谢您的关注,我可以从您的代码中看到我的期望,但是,我必须连续循环在每个页面的特定位置(X,Y)打印,因为我没有得到这里坐标为负,用我的代码实现。请让我知道更多信息。
    • 仅供参考,我正在尝试打印 TAB 分隔符。页高/编号分隔线,然后在垂直方向的中心绘制矩形和绘制字符串。我必须严格依赖这些点,正如我在您的逻辑中看到的,将矩形移动到 X,Y 中的负坐标并对其进行转换。解决方案不接触我正在查看的矩形坐标,矩形内的文本应该转换。
    • 将字符串位置设置为坐标(0,0)然后进行旋转。旋转后做一个变换(你的X+矩形宽度,你的Y)。检查编辑的代码
    • 我完全按照你的建议做了,但没有运气,不确定我在哪里失踪。我按照你说的进行了变换和旋转,文本缺纸,看不到任何东西,坐标在页面内,可能是变换和旋转没有纸。检查我编辑的代码。 strtab[0] 是文本。
    • 在了解了旋转变换之后,我现在就明白了。我已经编辑了我的代码,现在正在运行。坐标应该是 (X+width,Y+Height).. 非常感谢
    猜你喜欢
    • 2014-10-18
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2020-04-03
    相关资源
    最近更新 更多