2017-04-26 66 views
0

你好stackoverflow社區,我正在開發一個簡單的Windows窗體應用程序,它有一個偵聽器在特定目錄偵聽一個txt文件,如果偵聽器檢測到一個新文件,它會自動將txt文件發送到本地默認打印機,但它也會顯示「保存打印輸出爲」對話框,我需要打印過程是即時的,無需與任何對話框交互。如何刪除「保存打印輸出爲」對話框時打印一個txt文件#

爲此,我使用當前命名空間「using System.Drawing.Printing; using 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); 
    } 
} 
+0

我不能看到你指定打印到的實際打印機。 –

+0

嘗試此鏈接的想法或做一個谷歌搜索 - http://stackoverflow.com/questions/10572420/how-to-skip-the-dialog-of-printing-in-printdocument-print-and-print-page- direc – MethodMan

+0

'printDocument1'在哪裏定義?我只是複製並粘貼了你的代碼,但我不得不添加'var printDocument1 = new PrintDocument();'來編譯它,並且在沒有對話框的情況下,它在我的默認打印機上正常打印。 –

回答

1

那個時候正在使用的打印機出現的對話框是文檔編輯器,像Microsoft XPS Document WriterMicrosoft 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]; 
+0

謝謝,我會嘗試你的解決方案,如果它的工作,我會選擇你的答案作爲最好的答案;) –

+0

它的工作!非常感謝! –

+0

所以如果我明白這一點,你需要指定打印機? –

相關問題