C# 如何删除;将打印输出另存为";在c中打印txt文件时的对话框#

C# 如何删除;将打印输出另存为";在c中打印txt文件时的对话框#,c#,winforms,printing,file-watcher,C#,Winforms,Printing,File Watcher,你好,stackoverflow社区,我正在开发一个简单的windows窗体应用程序,在特定目录中有一个侦听器侦听txt文件,如果侦听器检测到一个新文件,它会自动将txt文件发送到本地默认打印机,但它也会显示“将打印输出另存为”对话框,我需要打印过程是即时的,而不必与任何对话框交互 为此,我使用当前名称空间“using System.Drawing.Printing;using System.IO;”,并且我已经看到Print()方法的定义,但代码似乎受到保护,因此我无法删除“save Prin

你好,stackoverflow社区,我正在开发一个简单的windows窗体应用程序,在特定目录中有一个侦听器侦听txt文件,如果侦听器检测到一个新文件,它会自动将txt文件发送到本地默认打印机,但它也会显示“将打印输出另存为”对话框,我需要打印过程是即时的,而不必与任何对话框交互

为此,我使用当前名称空间“using System.Drawing.Printing;using System.IO;”,并且我已经看到Print()方法的定义,但代码似乎受到保护,因此我无法删除“save Print output as”对话框。有什么想法吗

这是我的密码

fileWatcher:

private void fileSystemWatcher1_Created(object sender, FileSystemEventArgs e)
{
    try
    {
        MyPrintMethod(e.FullPath);
    }
    catch (IOException)
    {
    }
}
我的打印方法:

private void MyPrintMethod(string path)
{
    string s = File.ReadAllText(path);
    printDocument1.PrintController = new StandardPrintController();
    printDocument1.PrintPage += delegate (object sender1, PrintPageEventArgs e1)
    {
        e1.Graphics.DrawString(s, new Font("Times New Roman", 12), new SolidBrush(Color.Black), new RectangleF(0, 0, printDocument1.DefaultPageSettings.PrintableArea.Width, printDocument1.DefaultPageSettings.PrintableArea.Height));

    };
    try
    {
        printDocument1.Print();
    }
    catch (Exception ex)
    {
        throw new Exception("Exception Occured While Printing", ex);
    }
}

当使用的打印机是文档编写器时,会出现该对话框,如
Microsoft XPS document writer
Microsoft Print to PDF
。由于未按名称指定打印机,因此问题可能是这是当前的默认打印机

如果您知道要使用的打印机的名称,则可以这样指定:

printDocument1.PrinterSettings.PrinterName = 
    @"\\printSrv.domain.corp.company.com\bldg1-floor2-clr";
如果您不知道该名称,那么最好的方法可能是询问用户希望打印到哪一个。您可以获得已安装打印机的列表,如下所示:

var installedPrinters = PrinterSettings.InstalledPrinters;
然后,当选择一个时,可以指定第一个代码示例中的名称。以下是一些代码,可用于提示用户选择打印机,并将打印机设置为用户选择的打印机:

Console.WriteLine("Please select one of the following printers:");
for (int i = 0; i < installedPrinters.Count; i++)
{
    Console.WriteLine($" - {i + 1}: {installedPrinters[i]}");
}

int printerIndex;
do
{
    Console.Write("Enter printer number (1 - {0}): ", installedPrinters.Count);
} while (!int.TryParse(Console.ReadLine(), out printerIndex)
         || printerIndex < 1 
         || printerIndex > installedPrinters.Count);

printDocument1.PrinterSettings.PrinterName = installedPrinters[printerIndex - 1];
Console.WriteLine(“请选择以下打印机之一:”);
对于(int i=0;iinstalledPrinters.Count);
printDocument1.PrinterSettings.PrinterName=已安装的打印机[printerIndex-1];

当使用的打印机是文档编写器时,如
Microsoft XPS document writer
Microsoft Print to PDF
会出现该对话框。由于未按名称指定打印机,因此问题可能是这是当前的默认打印机

如果您知道要使用的打印机的名称,则可以这样指定:

printDocument1.PrinterSettings.PrinterName = 
    @"\\printSrv.domain.corp.company.com\bldg1-floor2-clr";
如果您不知道该名称,那么最好的方法可能是询问用户希望打印到哪一个。您可以获得已安装打印机的列表,如下所示:

var installedPrinters = PrinterSettings.InstalledPrinters;
然后,当选择一个时,可以指定第一个代码示例中的名称。以下是一些代码,可用于提示用户选择打印机,并将打印机设置为用户选择的打印机:

Console.WriteLine("Please select one of the following printers:");
for (int i = 0; i < installedPrinters.Count; i++)
{
    Console.WriteLine($" - {i + 1}: {installedPrinters[i]}");
}

int printerIndex;
do
{
    Console.Write("Enter printer number (1 - {0}): ", installedPrinters.Count);
} while (!int.TryParse(Console.ReadLine(), out printerIndex)
         || printerIndex < 1 
         || printerIndex > installedPrinters.Count);

printDocument1.PrinterSettings.PrinterName = installedPrinters[printerIndex - 1];
Console.WriteLine(“请选择以下打印机之一:”);
对于(int i=0;iinstalledPrinters.Count);
printDocument1.PrinterSettings.PrinterName=已安装的打印机[printerIndex-1];

我看不到您指定了要打印到的实际打印机。请尝试此链接以获取想法或进行谷歌搜索-哪里定义了
printDocument1
?我刚刚复制并粘贴了您的代码,但我必须添加
var printDocument1=new PrintDocument()
用于编译,并且可以在这里的默认打印机上打印,没有对话框。@RufusL我从打印工具箱中拖动了对象,如果这样做,您不需要用代码定义它,visual studio会为您这样做。在您的例子中,添加var来定义它是正确的。它真的是在没有对话框的情况下打印的吗?@MethodMan实际上我使用了他的解决方案,你可以在“MyPrintMethod”中看到它,将printController定义为StandarPrintController,但是仍然会弹出一个“保存打印输出”对话框。我看不到您指定要打印到的实际打印机。请尝试此链接以获取想法或进行谷歌搜索-哪里定义了
printDocument1
?我刚刚复制并粘贴了您的代码,但我必须添加
var printDocument1=new PrintDocument()
用于编译,并且可以在这里的默认打印机上打印,没有对话框。@RufusL我从打印工具箱中拖动了对象,如果这样做,您不需要用代码定义它,visual studio会为您这样做。在您的例子中,添加var来定义它是正确的。它是否真的在没有对话框的情况下打印?@MethodMan实际上我使用了他的解决方案,您可以在“MyPrintMethod”中看到它,将printController定义为StandarPrintController,但仍然会弹出一个保存打印输出对话框。谢谢,我将尝试您的解决方案,如果它有效,我将选择您的答案作为最佳答案;)因此,如果我理解这一点,您需要指定打印机?Hellow Andrew,我的问题是,在我的计算机中,我没有安装任何打印机,因此windows选择以下“Microsoft XPS Document Writer或Microsoft Print to PDF”中的一个。因此,这些选项会提示用户保存打印输出。我在另一台安装了物理打印机的电脑上试过了,效果非常好!谢谢,我将尝试您的解决方案,如果有效,我将选择您的答案作为最佳答案;)因此,如果我理解这一点,您需要指定打印机?Hellow Andrew,我的问题是,在我的计算机中,我没有安装任何打印机,因此windows选择以下“Microsoft XPS Document Writer或Microsoft Print to PDF”中的一个。因此,这些选项会提示用户保存打印输出。我在另一台安装了物理打印机的电脑上试过了,效果非常好!