2016-07-20 9 views
1

Gibt es eine Möglichkeit, eine PDF-Datei zu drucken und das Papierfach für die programmgesteuerte Verwendung auszuwählen?Drucken von PDF-Dateien mit verschiedenen Druckerfächern C#

Ich bin offen für Vorschläge wie Konvertieren der PDF in ein anderes Format und Drucken von dort.

Ich kann mit PaperSource() und PrintDocument() in das richtige Fach drucken() Ist es möglich, PDFs in ein Format zu konvertieren, das diese Funktionen verstehen?

Danke.

+0

Haben Sie versucht, die PDF-Dokumente auf verschiedenen Papiergrößen zu erzeugen? Mit welchem ​​Code werden Sie jetzt PDFs erstellen? Welche Skripte versteht Ihr Drucker? – zipzit

+0

Ich benutze PDF-Formulare und bearbeite es mit iTextSharp dann Speichern als PDF, nicht sicher, welche Skripte der Drucker wird –

+0

Ich denke, Sie wollen [PaperCut] (http://www.papercut.com/tour/advanced-scripting /) oder etwas genau so. Ich vermute mit dem richtigen Drucker-Scripting-Tool könntest du bestimmen, welcher Papierkorb über einen Dateinamen extrahiert werden soll. E. G. 'Filename_big.pdf' versus 'Dateiname_little.pdf' – zipzit

Antwort

1

Basierend auf das Papierfach PaperSource von etwas zu bekommen wie here on MSDN, wenn Sie nicht Ghostscript.NET nichts dagegen tun verwenden, dies sollte für Sie arbeiten:

public void PrintPdf(string filePath, string printQueueName, PaperSource paperTray) 
{ 
    using (ManualResetEvent done = new ManualResetEvent(false)) 
    using (PrintDocument document = new PrintDocument()) 
    { 
     document.DocumentName = "My PDF"; 
     document.PrinterSettings.PrinterName = printQueueName; 
     document.DefaultPageSettings.PaperSize = new PaperSize("Letter", 850, 1100); 
     document.DefaultPageSettings.PaperSource = paperTray; 
     document.OriginAtMargins = false; 

     using (var rasterizer = new GhostscriptRasterizer()) 
     { 
      var lastInstalledVersion = 
       GhostscriptVersionInfo.GetLastInstalledVersion(
         GhostscriptLicense.GPL | GhostscriptLicense.AFPL, 
         GhostscriptLicense.GPL); 

      rasterizer.Open(filePath, lastInstalledVersion, false); 

      int xDpi = 96, yDpi = 96, pageNumber = 0; 

      document.PrintPage += (o, p) => 
      { 
       pageNumber++; 
       p.Graphics.DrawImageUnscaledAndClipped(
        rasterizer.GetPage(xDpi, yDpi, pageNumber), 
        new Rectangle(0, 0, 850, 1100)); 
       p.HasMorePages = pageNumber < rasterizer.PageCount; 
      }; 

      document.EndPrint += (o, p) => 
      { 
       done.Set(); 
      }; 

      document.Print(); 
      done.WaitOne(); 
     } 
    } 
}