2017-04-26 6 views
0

Bonjour la communauté stackoverflow, je développe une application Windows simple formulaire qui a un écouteur dans un répertoire spécifique à l'écoute d'un fichier txt, si l'auditeur détecte un nouveau fichier, il envoie automatiquement le fichier txt à une imprimante par défaut locale, mais il affiche également une boîte de dialogue "Enregistrer l'impression sous" et j'ai besoin que le processus d'impression soit instantané, sans avoir à interagir avec une boîte de dialogue. Pour cela, j'utilise l'espace de noms courant "using System.Drawing.Printing; using System.IO;" et j'ai vu la définition de la méthode Print(), mais il semble que le code est protégé, donc je ne peux pas avoir accès à la boîte de dialogue "save print output as". Des idées?Comment faire pour supprimer la boîte de dialogue "Enregistrer l'impression sous" lors de l'impression d'un fichier txt dans C#

Voici mon code ...

Le Filewatcher:

private void fileSystemWatcher1_Created(object sender, FileSystemEventArgs e) 
{ 
    try 
    { 
     MyPrintMethod(e.FullPath); 
    } 
    catch (IOException) 
    { 
    } 
} 

Ma méthode d'impression:

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

Je ne peux pas vous voir en spécifiant l'imprimante à imprimer. –

+0

essayez ce lien pour des idées ou faire une recherche google - http://stackoverflow.com/questions/10572420/how-to-skip-the-dialog-of-printing-in-printdocument-print-and-print-page- direc – MethodMan

+0

Où 'printDocument1' est-il défini? J'ai simplement copié et collé votre code, mais j'ai dû ajouter 'var printDocument1 = new PrintDocument();' pour qu'il compile, et il a bien imprimé sur mon imprimante par défaut ici au travail sans dialogues. –

Répondre

1

Ce dialogue apparaît lorsque l'imprimante utilisée est un écrivain de documents, comme Microsoft XPS Document Writer ou Microsoft Print to PDF. Puisque vous ne spécifiez pas une imprimante par son nom, le problème est probablement que c'est l'imprimante par défaut actuelle.

Si vous connaissez le nom de l'imprimante que vous souhaitez utiliser, vous pouvez le spécifier ainsi:

printDocument1.PrinterSettings.PrinterName = 
    @"\\printSrv.domain.corp.company.com\bldg1-floor2-clr"; 

Si vous ne connaissez pas le nom, alors probablement le meilleur que vous pouvez faire est de demander l'utilisateur auquel il veut imprimer. Vous pouvez obtenir une liste des imprimantes installées comme ceci:

var installedPrinters = PrinterSettings.InstalledPrinters; 

Et puis quand on est choisi, vous pouvez spécifier le nom comme dans le premier exemple de code. Voici un code que vous pouvez utiliser pour demander à l'utilisateur une imprimante et définir l'imprimante sur celle choisie:

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

Merci, je vais essayer votre solution et si cela fonctionne, je vais sélectionner votre réponse comme la meilleure réponse;) –

+0

cela a fonctionné !!!! Merci beaucoup! –

+0

Donc, si je comprends bien, vous devez spécifier l'imprimante? –