почему эти текстовые данные не печатались на принтере?

#c# #.net #winforms #file #printdocument

#c# #.net #winforms #файл #printdocument

Вопрос:

когда я пытаюсь выполнить printdocument1.print(); система показывала небольшую всплывающую модель в качестве имени файла, и система получала молчание, не выдавая никаких ошибок введите описание изображения здесь

вот мой код на c # за кодом:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
using System.IO;
using System.Management;
using System.Diagnostics;

 namespace csvform
{
public partial class Form3 : Form
{

      private PrintDocument printDocument1 = new PrintDocument();
    private string stringToPrint;
    public Form3()
    {
        InitializeComponent();


        printDocument1.PrintPage  =
           new PrintPageEventHandler(printDocument1_PrintPage);

    }


     private void ReadFile()
   {
       string docName = "testPage.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();
       }
   }

   private void printDocument1_PrintPage(object sender,
    PrintPageEventArgs e)
   {
       int charactersOnPage = 0;
       int linesPerPage = 0;
       Font nf = new Font(new FontFamily("Arial"), 10,
       System.Drawing.FontStyle.Bold);
       // 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,nf,
           e.MarginBounds.Size, StringFormat.GenericTypographic,
           out charactersOnPage, out linesPerPage);

       // Draws the string within the bounds of the page
       e.Graphics.DrawString(stringToPrint,nf, 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);
   }

    private void button1_Click(object sender, EventArgs e)
    {


        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT *           FROM Win32_Printer");
        string printerName = "";
        foreach (ManagementObject printer in searcher.Get())
        {
            printerName = printer["Name"].ToString().ToLower();
            if (printerName.Equals(@"\chenraqdc2.raqmiyat.localhp color laserjet cp1510"))
            {                                            
                   // printDocument1.Print();
                    try
                    {
                        // Assumes the default printer.
                        ReadFile();
                        printDocument1.Print();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("An error occurred while printing", ex.ToString());
                    }                      

            }
        }       
    }
 }
}
  

Комментарии:

1. Вы не можете контролировать, что делает драйвер принтера, как только вы передали ему задание на печать.

2. @oded: donmine это не печаталось! теперь я отредактировал свой вопрос

3. ЕСЛИ Я УСТАНОВИЛ ЭТО В СВОЕМ КОДЕ, ЭТО ОЗНАЧАЕТ, ЧТО ОН ПОКАЗЫВАЛ ДИАЛОГОВОЕ ОКНО НАСТРОЙКИ ПРИНТЕРА, ЕСЛИ Я ВЫБИРАЮ СООТВЕТСТВУЮЩИЙ ПРИНТЕР, ЗНАЧИТ, ПЕЧАТЬ ПРОИСХОДИЛА, НО МОЕ ТРЕБОВАНИЕ АВТОМАТИЧЕСКИ ДОЛЖНО ОПРЕДЕЛЯТЬ ПЕЧАТЬ ПО УМОЛЧАНИЮ, ТАК И ДОЛЖНО БЫТЬ, И ДЛЯ ЭТОГО ДОЛЖНА ВЫПОЛНЯТЬСЯ ПЕЧАТЬ КАК ИЗБЕЖАТЬ ПОЯВЛЕНИЯ ДИАЛОГОВОГО ОКНА ПРИНТЕРА, МОЖЕТ КТО-НИБУДЬ, ПОЖАЛУЙСТА, если(printDialog1. ShowDialog() == DialogResult . OK) { printDocument1. PrintController = printcontrol; printDocument1. Print(); }

4. Похоже, ваш caps-lock сломан. Пожалуйста, не размещайте ВСЕ ЗАГЛАВНЫЕ буквы. Это считается грубым.

5. Я повторю — диалоговое окно исходит от драйвера — вы не можете это контролировать.#

Ответ №1:

Для исторических целей:

 // namespace declaration
using System.Management;

// code sample for setting default printer

ManagementObjectCollection objManagementColl;
// class used to invoke the query for specified management collection
ManagementObjectSearcher objManagementSearch = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");

// invokes the specified query and returns the resulting collection
objManagementColl = objManagementSearch.Get();

foreach(ManagementObject objManage in objManagementColl)
    {
       if (objManage["Name"].ToString() == "RequiredPrinterName")  // compares the name of printers
          {
             objManage.InvokeMethod("SetDefaultPrinter", null); // invoke [SetDefaultPrinter] method 
             break;
           }
      }