2013-04-05 2 views
1

я следующий вывод, генерируемый машине UNIX с 1996 года ... Мы модернизируем программное обеспечение для Windows, и мне нужно, чтобы создать этот точный вывод http://pastebin.com/YBHpSYDW из C#Старый текст принтер формата с #

Есть некоторые проблемы Я не могу справиться, потому что я не знаю, как ...

Как определить столбцы, установить aligment для столбца «IMPORTE» справа, если это открытый текст?

Я сделал этот вывод в Excel, который более читабельный, гибкий. Но они хотят этого жуткого старого материала , потому что по многим причинам и они я буду безумным, работающим для этих людей, они не хотят чтобы обновить что-нибудь, просто программное обеспечение, но сохранить все старые жуткие вещи @ вывода ...

Так что если кто-нибудь знает способ сделать это, это будет так полезно, спасибо.

EDIT Выход список данных из SQL Server, старые данные хранятся в MultiValue .DAT и .idx файлы, но теперь они в SQL Server ... Так что в принципе, код который генерирует значения состоит в следующем

var Query = getRows(sel.DataTable).Select(row => 
{ 
    return new 
    { 
     banco = row["banco"].ToString(), 
     emisora = row["emisora"].ToString(), 
     sucursal = row["sucursal"].ToString(), 
     fecha = row["fecha"].ToString(), 
     identificacion = row["identificacion"].ToString(), 
     importe = row["importe"].ToString(), 
     importe_dec = row["importe_dec"].ToString(), 
     provincia = row["provincia"].ToString(), 
     referencia = row["referencia"].ToString(), 
    }; 
}); 

Тогда я сделать некоторые Еогеасп сделать магию ... Например

foreach (var banco in Query.GroupBy(l => l.banco)) 

Таким образом, проблема заключается в выходной файл для печати ...

EDIT 2 Понял работать, вот код

private void generarFicheroPrt() 
{ 
    try 
    { 
     SelectBD sel = new SelectBD(Program.ConexBD, "SELECT * FROM Seguros"); 
     var Query = getRows(sel.DataTable).Select(row => 
     { 
      return new 
      { 
       banco = row["banco"].ToString(), 
       emisora = row["emisora"].ToString(), 
       sucursal = row["sucursal"].ToString(), 
       fecha = row["fecha"].ToString(), 
       identificacion = row["identificacion"].ToString(), 
       importe = row["importe"].ToString(), 
       importe_dec = row["importe_dec"].ToString(), 
       provincia = row["provincia"].ToString(), 
       referencia = row["referencia"].ToString(), 
      }; 
     }); 
     using (StreamWriter sw = new StreamWriter(Program.path + @"\CV9005.prt")) 
     { 
      int i = 1; 
      int pag = 0; 
      int linea = 1; 
      sw.WriteLine(); 
      sw.WriteLine("\x1b&l1O\x1b(s14H"); 
      decimal total = 0; 
      foreach (var valor in Query.OrderBy(l => l.emisora)) 
      { 
       if (linea == 48) linea = 1; 
       if (linea == 1) 
       { 
        pag++; 
        sw.WriteLine("\xc\t0125 BANCOFAR" + string.Empty.PadLeft(37, '\x20') + "COBRO POR VENTANILLA S. S. - CONTROL DE DOCUMENTOS  PAG.  "+ pag +"\n\n"); 
        sw.WriteLine("\t N.ORDEN NUMERO REFERENCIA   IMPORTE SUC. EMISORA"); 
        sw.WriteLine("\t ------- ----------------- ---------------- ---- -----------------------------------------------------------"); 
        sw.WriteLine(); 
       } 
       setSufijoEmisora(valor.emisora); 
       decimal importe = Convert.ToDecimal(Int32.Parse(valor.importe) + "," + valor.importe_dec); 
       string imp = importe.ToString("N2", Cultures.Spain); 
       sw.WriteLine("\t\t" + string.Format("{0, 4}\t{1, -13}\t\t{2, 13}{3,6} {4, -59}", i.ToString(), valor.referencia, imp, valor.sucursal, valor.emisora + " " + sufijoEmisora)); 
       i++; 
       linea++; 
       total = total + importe; 
      } 
      sw.WriteLine(); 
      sw.WriteLine("\t\t\t\t\t TOTAL .....\t" + string.Format("{0, 13}", total.ToString("N2", Cultures.Spain))); 
     }; 
    } 
    catch (Exception ex) 
    { 
     Logger.log(ex); 
    } 
} 
+0

Может у просьба пояснить немного больше похоже, как вы генерировать вывод? Используете ли вы таблицы для создания этого вывода? Соответствующий фрагмент кода будет очень полезен, чтобы дать какое-либо предложение. – Raman

+0

обновлен кодом, который генерирует результат. –

+1

Где вы выводите это на консоль? В текстовый файл? непосредственно на принтер? Если вы выводите текстовый файл, вы можете использовать инструмент «PrintDocument» из окна инструмента и форматировать документ по своему усмотрению; или если вы хотите создать текстовый документ, используйте библиотеку «Microsoft.Office.Core». Эта библиотека имеет свойство документа, в котором вы редактируете много вещей, как вы делаете в словах.http://msdn.microsoft.com/en-us/library/microsoft.office.core.aspx – Jegan

ответ

1

Используйте "PrintDocument" инструмент из панели инструментов.

http://msdn.microsoft.com/en-gb/library/system.drawing.printing.printdocument%28v=vs.110%29.aspx

Это поможет вам с базовым форматированием.

Редактировать

Для более богатого форматирования и сохранения в файл в пространстве имен Microsoft.Office.Core,

http://msdn.microsoft.com/en-us/library/microsoft.office.core.aspx

Если вы хотите ноны кодировки ASCII, убедитесь, что установить кодировку согласно вашему требованию, и сохраните файл с требуемой кодировкой.

http://msdn.microsoft.com/en-us/library/microsoft.office.core.msoencoding.aspx

using(StreamWriter writer = new StreamWriter("a.txt", false, Encoding.UTF8)) 
{ 
    writer.WriteLine(s); 
} 
+0

Это фактически отправит на принтер, мне нужно создать простой текстовый файл, чтобы мы могли его распечатать, а также отправить по электронной почте, например, или просто сохранить на нашем компьютере ... –

+0

См. Мое изменение в ссылках на свойства документа и сохранение файлов в Юникоде. – Jegan

Смежные вопросы