当前位置: 首页 > 知识库问答 >
问题:

使用空格/缩进的C#打印

阎祖鹤
2023-03-14

嗨,我正在尝试使用C#应用程序的收据打印机打印一张账单/收据。

预期输出是这样的:

ITEM NAME                 QTY     PRICE
Banana Large Yellow        1       2.00
Brie Cheese 6 pack round   3      30.00
Indian Mango Box          10     246.00

我一直在使用string.format函数,但是输出常常不对齐,并且GET的间距取决于项目名称长度等。

ITEM NAME                 QTY     PRICE
Banana Large Yellow        1       2.00
Brie Cheese 6 pack round     3      30.00
Indian Mango Box        10    246.00

怎样才能解决这个问题?

我使用的代码

test_string = "-------------------------------\r\n";
        test_string += "First Name | Last Name  |   Age\r\n";
        test_string += String.Format("{0,-10} | {1,-10} | {2,5}", "Bill", "Gates", 51) + "\r\n";
        test_string += String.Format("{0,-10} | {1,-10} | {2,5}", "Edna", "Parker", 114) + "\r\n";
        test_string += String.Format("{0,-10} | {1,-10} | {2,5}", "Johnny", "Depp", 44) + "\r\n";
StringFormat format = new StringFormat();
        format.Alignment = StringAlignment.Center;      // Horizontal Alignment 

        StringFormat right = new StringFormat();
        right.Alignment = StringAlignment.Far; 

        // Measure string.
        SizeF stringSize = new SizeF();
        pd.PrintPage += delegate(object sender, PrintPageEventArgs e)
            {
                string measureString = data;
                Font stringFont = new Font("Arial", 16);


                stringSize = e.Graphics.MeasureString(measureString, stringFont);

                RectangleF rect = new RectangleF(0, height_value, pd.DefaultPageSettings.PrintableArea.Width, pd.DefaultPageSettings.PrintableArea.Height);                   
                if (weight == "bold")
                {
                    if (alignment == "center")
                    {
                        e.Graphics.DrawString(data, new Font(font, 11, System.Drawing.FontStyle.Bold), new SolidBrush(System.Drawing.Color.Black), rect, format);
                    }
                    else
                    {
                        e.Graphics.DrawString(data, new Font(font, 11, System.Drawing.FontStyle.Bold), new SolidBrush(System.Drawing.Color.Black), rect);
                    }
                }
                else
                {
                    if (alignment == "center")
                    {
                        e.Graphics.DrawString(data, new Font(font, 11), new SolidBrush(System.Drawing.Color.Black), rect, format);
                    }
                    else if (alignment == "right")
                    {
                        e.Graphics.DrawString(data, new Font(font, 11), new SolidBrush(System.Drawing.Color.Black), rect, right);                           
                    }
                    else
                    {
                        e.Graphics.DrawString(data, new Font(font, 11), new SolidBrush(System.Drawing.Color.Black), rect);
                    }

                }
                height_value = Convert.ToInt32(stringSize.Height) + height_value;
            };
public string Test()
    {
        string[] names = { "Banana Large Yellow", "Brie Cheese", "Indian Mango Box" };
        int[] quantities = { 1, 3, 10 };
        decimal[] prices = { 2.00m, 30.00m, 246.00m };

        string format = "{0,-25} {1,-10} {2,5}" + Environment.NewLine;
        var stringBuilder = new StringBuilder().AppendFormat(format, "Item Name", "QTY", "Price");
        for (int i = 0; i < names.Length; i++)
        {
            stringBuilder.AppendFormat(format, names[i], quantities[i], prices[i]);
        }

     PrintFormat(stringBuilder.ToString(), "Arial", "normal", "left", 20);
    }

共有1个答案

金烨华
2023-03-14

为了以表格式结构打印数据,可以使用string.format使用带宽度和对齐方式的格式项。

一起来看看它的工作原理:

// in comments underscores mean spaces
Console.WriteLine("Res:{0,6}.", 12345); //   Res:_12345.
Console.WriteLine("Res:{0,-6}.", 12345); //  Res:12345_.

但如果生成的字符串长度大于指定的宽度怎么办?然后打印结果,就好像根本没有对齐和宽度一样。

Console.WriteLine("Res:{0,-6}", 123456789); //  Res:123456789.
Console.WriteLine("Res:{0,6}.", 123456789); //  Res:123456789.

您应该更好地使用StringBuilder.AppendFormat。它与格式项一起工作,就像string.formatconsole.writeline一样。

 类似资料:
  • 对不起,我知道以前有人问过这个问题,但其他答案对我没有任何帮助。 PhpStorm一直使用4个空格来缩进,这让我抓狂。该文件是一个. php文件,我所知道的所有设置都设置正确。我已经检查了这些东西: 1.)编辑器|代码样式|“检测并使用现有文件缩进”未选中(文件仍使用2个空格) 2.)编辑器|代码样式|PHP|“选项卡大小” 3.)我已重新启动PhpStorm 4.)我已经关闭并重新打开了文件。

  • 问题内容: 在编码python时,我仅使用2个空格进行缩进,请确保PEP-8确实建议使用4个空格,但从历史上看,这是不寻常的。 那么,谁能说服我使用4个空格而不是2个空格?有什么优缺点? PS最后,将所有现有代码库从2个空间转换为4个空间的简单方法是什么? PPS PEP-8也强烈建议不要使用制表符进行缩进。在这里阅读 因此,总结一下: 优点: 包裹长度超过80行的字符串时,要安排更多空间。 可以

  • 问题内容: 我是Python的新手。上面粘贴的程序特别在“ if temp == dna2:”行给我一个错误“缩进中的制表符和空格的不一致使用”。有人可以帮我找出缩进不正确的地方吗? 问题答案: 这意味着您在缩进中混合了空格和制表符。您必须解决此问题,使其与制表符或空格保持一致。

  • 问题内容: 我试图在Python 3.2中创建应用程序,并且一直使用制表符进行缩进,但是即使编辑器也将其中的一些更改为空格,然后在尝试运行时打印出“不一致使用制表符和空格”该程序。 如何将空格更改为制表符?这让我疯狂。(我是编程的初学者)。如果我能在代码中获得一些总体提示,我会很高兴,如果我犯了很多错误,我会很高兴听到。 问题答案: 不要使用标签。 将你的编辑器设置为使用4个空格进行缩进。 搜索并

  • 本文向大家介绍浅谈Vim中的Tab与空格缩进,包括了浅谈Vim中的Tab与空格缩进的使用技巧和注意事项,需要的朋友参考一下 vim缩进参数解析 缩进用 tab 制表符还是空格,个人爱好问题。但是在大多项目中,习惯使用空格。关于缩进,vim中可以通过如下四个参数进行配置 解析: tabstop 表示按一个tab之后,显示出来的相当于几个空格,默认的是8个。 softtabstop 表示在编辑模式的时

  • 我正在配置eslint并使用AirBNB样式指南。 我想覆盖缩进(应该是2个空格)为4个空格。但是无论我在我的. eslintrc中做什么,我都不能抑制这个错误,这样我就可以使用4个空格的缩进。 我的代码库中到处都有这样一条消息:“预期缩进2个空格,但发现4个。(react/jsx indent)”。 我正在使用eslint 4.9.0。我如何解决这个问题?谢谢