2016-06-06 3 views
-1

Nous avons besoin d'imprimer un fichier PDF à partir de notre application C# (sans avoir besoin d'une bibliothèque externe à installer et sans avoir une boîte de dialogue d'impression)PDF Imprimer sans outil externe

Je sais qu'il ya beaucoup de discussions à ce sujet (solution pour la plupart obsolète ou freeware/bibliothèque) mais peut-être que quelqu'un pourrait me diriger vers la meilleure solution pour accomplir ceci? Une autre façon pourrait être de convertir le PDF en image et envoyer l'image directement à l'imprimante si je peux trouver un moyen facile de convertir une page PDF en une image.

Merci!

+0

Vous pouvez imprimer sans une boîte de dialogue d'impression, mais vous ne pouvez toujours pas envoyer un PDF directement à l'imprimante . – Paparazzi

Répondre

2

Cela ne nécessite pas de bibliothèque, mais nécessite Adobe Reader DC sur l'ordinateur sur lequel l'application est installée. Si vous ne souhaitez utiliser aucun type d'outil externe, vous devez créer votre propre fonctionnalité pour ce faire. Adobe Reader DC peut être appelé avec une commande pour vous permettre d'imprimer le document. Ce n'est pas une solution élégante du tout pour la gestion des erreurs ou de fermer le processus, mais il est un squelette que vous pouvez modifier:

private static void PrintDocument(string fileName) 
    { 
     var process = new Process 
     { 
      StartInfo = 
      { 
       WindowStyle = ProcessWindowStyle.Hidden, 
       Verb = "print", 
       FileName = @"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe", //You could use an app config string here 
       Arguments = [email protected]"/p /h {fileName}", 
       UseShellExecute = false, 
       CreateNoWindow = true 
      } 
     }; 

     process.Start(); 

     if (process.HasExited == false) 
     { 
      process.WaitForExit(10000); 
     } 

     process.EnableRaisingEvents = true; 

     try 
     { 
      //Try to gracefully exit the process first 
      var proccessIsClosed = process.CloseMainWindow(); 

      //If it doesn't gracefully close, kill the process 
      if (!proccessIsClosed) 
      { 
       process.Kill(); 
      } 
     } 
     catch 
     { 
      throw new Exception("Process ID " + process.Id + 
              " is unable to gracefully close. Please check current running processes."); 
     } 
    } 
+0

Merci! Mais lancer un processus Adobe pour imprimer le document n'est pas ce dont j'ai besoin, car nous pouvons voir le lecteur Adobe apparaître avant d'envoyer le document à l'imprimante. Si je veux essayer une bibliothèque externe pour juste imprimer un document pdf à une imprimante réseau, quelle est la meilleure/petite bibliothèque pour faire ceci? – michelqa

+0

Il existe une poignée de bibliothèques/solutions tierces mentionnées ici: http://stackoverflow.com/questions/5566186/print-pdf-in-c-sharp. Je n'ai utilisé aucun d'entre eux personnellement donc je ne peux pas dire si une fenêtre pop-up se produit pendant l'impression. –