【问题标题】:String alignment on receipt收据上的字符串对齐
【发布时间】:2020-02-16 04:24:24
【问题描述】:

如何将字符串上的文本对齐到右边?

这是我生成字符串的代码

for (int i = 0; i <= qtd_itens - 1; i++)
{                                        
    String adicionais = dados_msg[i].addon;

    //A soma do pedido + os pontos devem dar 63 caracteres 80mm
    int qtd_pontos = 0;    

    int qtdLinhaPedido = 0;
    String LinhaPedido = Quantidade + "x " + item + " - " + preco + "\n";
    qtdLinhaPedido = LinhaPedido.Length;
    qtd_pontos = 80 - qtdLinhaPedido;                                  

    DadosPedido = String.Format("{0,-10}{1,"+qtd_pontos+"}", DadosPedido + Quantidade + "x " + item + "  ", preco + "\n");

    if (adicionais.Length > 10)
    {

    }
    else {
        DadosPedido = DadosPedido + "\n";
    }

    // using the method 
    String[] strlist = adicionais.Split('}');

    foreach (String s in strlist)
    {
        String Addon = s.Replace("[", "").Replace("]", "").Replace("{", "").Replace("}","").Replace(",\"addon_name","\"addon_name");
        Addon = "{" + Addon + "}";                                        
        if (Addon.Length > 15)
        {
            dynamic JsonAddon = JObject.Parse(Addon);
            String Item = JsonAddon.addon_name;
            String Qtd = JsonAddon.addon_qty;
            double Preco_AddonF = JsonAddon.addon_price;
            Preco_AddonF = Double.Parse(Qtd) * Preco_AddonF;
            string preco_addon = Preco_AddonF.ToString("C", CultureInfo.CurrentCulture);

            int qtdLinhaPedido = 0;
            String LinhaPedido = Qtd + "x " + Item + " " + preco_addon + "\n";
            qtdLinhaPedido = LinhaPedido.Length;
            qtd_pontos = 80 - qtdLinhaPedido;

            DadosPedido = String.Format("{0,-10}{1," + qtd_pontos + "}", DadosPedido + "  - " + Qtd + "x " + Item + " ", preco_addon+ "\n");
        }          
    }
    DadosPedido = DadosPedido + "\n";
    if (Instrucao_item.Length > 5)
    {
        DadosPedido = DadosPedido+"Obs: " + Instrucao_item+ "\n\n";
    }

其实我用String.Format("{0,-10}{1," + qtd_pontos + "}",DadosPedido + Quantidade + "x " + item + " ("+ tamanho + ") ", preco + "\n");来格式化字符串,但是价格没有对齐, 我希望整个价格部分正确对齐,并且值始终从同一位置开始。

【问题讨论】:

  • 收据是否显示在屏幕上?还是发送到打印机?还是两者兼而有之?
  • 第 1 步 - 考虑使用等宽字体。
  • 这张收据被发送到打印机,我使用 font_normal = new Font("Microsoft Sans Serif Monospace", 8); //字体正常
  • 如果你能分享minimal reproducible example,那就太棒了。并告诉我们有关收据如何发送到打印机的更多信息。

标签: c# receipt


【解决方案1】:

只有在使用monospaced font 时才能使用String.Format

【讨论】:

  • 我使用 font_normal = new Font("Microsoft Sans Serif Monospace", 8);
  • @MatheusArruda 鉴于i 太窄了,它看起来不像等宽。
  • 作为测试显示string.Format("{0,-10} |", "iiii")并在下一行string.Format("{0,-10} |", "wwww")
  • 我更改了新字体("Microsoft Sans Serif Monospace", 8);到新字体(FontFamily.GenericMonospace,8);谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
相关资源
最近更新 更多