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 Writer
或Microsoft 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];