2013-11-30 3 views
1

Я разрабатываю модуль в биллинговой системе для национальной утилиты. Модуль должен выбрать всех успешно выставленных клиентов и распечатать свои счета. Записи записываются в виде текстовых файлов и сохраняются в локальной папке, и программа должна их подбирать и печатать по одному. Я использую DFX-9000 принтер и предварительно отформатированная рулонная бумага, однако каждый раз, когда приходит новый счет, принтер пропускает некоторое пространство перед тем, как распечатает его, что искажает второй и последующие счета. Я попытался поместить все счета в один текстовый файл, который хорошо печатается при открытии в блокноте, но не в моем коде. Вот часть моего кодаПечать нескольких счетов в C#

Font printFont = new Font("Lucida Console", 10); 
    //static string filename; 
    StreamReader reader = new StreamReader(Filename); 
    public void Print() 
    { 
     try 
     { 
      PrintDocument pd = new PrintDocument(); 
      pd.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("myPaper", 826, 1169); 
      pd.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0); 
      //pd.DefaultPageSettings.PrinterSettings.IsPlotter = true; 
      pd.DefaultPageSettings.PrinterResolution.Kind = PrinterResolutionKind.Custom; 
      pd.PrintPage += new PrintPageEventHandler(this.PrintTextFileHandler); 
      pd.Print(); 
      if (reader != null) 
       reader.Close(); 
      Console.WriteLine("Printout Complete"); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
    private void PrintTextFileHandler(object sender, PrintPageEventArgs pe) 
    { 
     StringFormat sf = new StringFormat(); 
     Graphics g = pe.Graphics; 
     float linesPerPage = 0; 
     float yPos = 0; 
     int count = 0; 
     float leftMargin = 40;//pe.MarginBounds.Left; 
     float topMargin = pe.MarginBounds.Top; 
     string line = null; 
     linesPerPage = 500;// pe.MarginBounds.Height/printFont.GetHeight(g); 
     while (count <= linesPerPage &&((line = reader.ReadLine()) != null)) 
     { 
      yPos = topMargin + (count * printFont.GetHeight(g)); 
      g.DrawString(line, printFont, Brushes.Black, leftMargin, yPos); 
      count++; 
     } 

     if (line != null) 
     { 
      pe.HasMorePages = true; 
     } 
     else 
     { 
      pe.HasMorePages = false; 
     } 

ответ

0

Может ли ваша printing.papersize быть не так? Я замечаю, что это 1169, не стандартная остановка бумаги в 1100?

+0

Дело в том, что если я распечатаю один счет, он выглядит нормально, но проблема возникает, когда я пытаюсь напечатать более 1. Я думаю, мне нужно создать один файл с бесконечной высотой с правильным интервалом после каждого конкретного счета, чтобы принтер видит его как одну страницу –

+0

Итак, если вы уменьшаете размер до 1100, делаете ли строки обрезаны? – FolksymAndrew

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