2015-02-17 4 views
1

Я использую следующий метод для создания txt-файла, и теперь я не знаю, как отправить этот файл прямо на принтер. Я хочу, когда пользователь нажимает на событие button_click, txt-файл для печати без предварительного просмотра печати ... etc.application является веб-развертыванияprint txt файл прямо на принтер aspx.net

public void Print() 
    { 

    string path = @"c:\Restaurant\kitchen.txt"; 


    if (!File.Exists(path)) 
    { 
     using (StreamWriter sw = File.CreateText(path)) 
     { 



       if (Label53.Text == "4") 
       { 
        String s = Label47.Text; 

        s = String.Format(s.Replace("S", "С").Replace("U", "У").Replace("P", "П").Replace("A", "А")); 


        sw.WriteLine(s); 



       } 
      } 
      } 
     } 
+0

Ваш 'String.Format' кажется ненужным, так как вы не форматируете _anything_. –

+0

Да, я забыл удалить это – buba

+0

@Soner Gönül Возможно ли распечатать этот .txt-файл прямо на принтер? – buba

ответ

2

Да, это возможно ...

Сначала вы добавить Reference System.Drawing к project.After, что вам нужно использовать:

using System.Drawing; 
using System.Drawing.Printing; 

Я покажу его для консольного приложения, вы можете легко конвертировать его в asp.net.

[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] 
    private static extern IntPtr GetStockObject(int fnObject); 

    private static string stringToPrint; 

    static void Main(string[] args) 
    { 
     PrintDocument doc = new PrintDocument(); 
     ReadFile(doc); 
     doc.PrintPage += doc_PrintPage; 
     doc.Print(); 
    } 

    private static void ReadFile(PrintDocument printDocument1) 
    { 
     string docName = "Test.txt"; 
     string docPath = @"c:\"; 
     printDocument1.DocumentName = docName; 
     using (FileStream stream = new FileStream(docPath + docName, FileMode.Open)) 
     using (StreamReader reader = new StreamReader(stream)) 
     { 
      stringToPrint = reader.ReadToEnd(); 
     } 
    } 

    static void doc_PrintPage(object sender, PrintPageEventArgs e) 
    { 
     int charactersOnPage = 0; 
     int linesPerPage = 0; 

     // Sets the value of charactersOnPage to the number of characters 
     // of stringToPrint that will fit within the bounds of the page. 
     e.Graphics.MeasureString(stringToPrint, Font.FromHfont(GetStockObject(0)), 
      e.MarginBounds.Size, StringFormat.GenericTypographic, 
      out charactersOnPage, out linesPerPage); 

     // Draws the string within the bounds of the page 
     e.Graphics.DrawString(stringToPrint, Font.FromHfont(GetStockObject(0)), Brushes.Black, 
      e.MarginBounds, StringFormat.GenericTypographic); 

     // Remove the portion of the string that has been printed. 
     stringToPrint = stringToPrint.Substring(charactersOnPage); 

     // Check to see if more pages are to be printed. 
     e.HasMorePages = (stringToPrint.Length > 0); 
    } 

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

+0

спасибо, это мне очень помогло! – buba

+0

@buba, добро пожаловать, удачи в решении! – mybirthname

+0

@birthname, еще один вопрос, мое приложение развернуто в сети, приложение создано для планшета, может ли этот метод каким-то образом с помощью планшета читать термопринтер, у этого принтера нет IP-адреса. и печатать на нем? - \t - это возможность продолжить поиск решения или нет. – buba

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