如何在 c# 中打印 txt 文件时删除"Save Print output as"对话框



hello stackoverflow社区,我正在开发一个简单的Windows form应用程序,该应用程序在特定目录中侦听txt文件中的侦听器,如果侦听器检测到新文件,它将自动发送TXT文件到本地默认打印机,但它也显示了"保存打印输出为"对话框,我需要即时打印proccess,而无需与任何对话框进行交互。

为此,我正在使用当前名称空间"使用System.Drawing.printing;使用System.io;"我已经看到了print((方法的定义,但似乎对代码受到保护,因此我无法访问"保存打印输出为"对话框。有什么想法吗?

这是我的代码...

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 WriterMicrosoft Print to PDF。由于您没有按名称指定打印机,因此问题可能是当前默认打印机。

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

printDocument1.PrinterSettings.PrinterName = 
    @"\printSrv.domain.corp.company.combldg1-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];

最新更新