Laden...

mehrere Drucker ansprechen

Erstellt von Dr.Z vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.425 Views
Dr.Z Themenstarter:in
88 Beiträge seit 2007
vor 14 Jahren
mehrere Drucker ansprechen

Hallo zusammen,

ich habe folgendes Problem:
Es gibt drei Ordner und drei an den PC angeschlossene Drucker. Die Dokumente die in Ordner_A laden, sollen auf Drucker_A gedurckt werden. Ebenso verhält es sich mit den anderen Ordnern und Druckern:
Ordner_A -> Drucker_A
Ordner_B -> Drucker_B
Ordner_C -> Drucker_C

Bei den Dateien, die gedruckt werden sollen, handelt es sich um .pdf Dateien.

Ich habe schon gesucht, wie man die Datei einfach drucken kann. Mit folgendem Code


Process proc = new Process ();
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.Verb = “print”;
proc.StartInfo.FileName = “C:\\test.pdf”;
proc.Start();
proc.WaitForExit(10000);
proc.CloseMainWindow();
proc.Close();

ist es mir möglich, pdfs Dateien entsprechend zu drucken, allerdings nur auf dem Standardrucker. Gibt es evtl eine ergänzung, wie ich den Drucker festlegen kann, auf dem ich drucken kann?
Habe schonmal dran gedacht, immer den Standardrucker zu ändern, je nach dem in welchem Ordner grade eine .pdf Datei erzeugt wird.
Aber das ist ja sicherlich auch nicht das gelbe vom Ei.

Habt ihr da einen Vorschlag, oder kennt ihr vllt gar ein freeware tool, welches mir diese Arbeit abnehmen würde?

Dr.Z

Gelöschter Account
vor 14 Jahren

printing kannst du in .net mit dieser klasse realisieren:

public class PrintDocument : Component

 
Name: System.Drawing.Printing.PrintDocument 
Assembly: System.Drawing, Version=2.0.0.0 

 

schau die auch alle anderen klassen des namespaces "System.Drawing.Printing" an

Dr.Z Themenstarter:in
88 Beiträge seit 2007
vor 14 Jahren

Danke für deine schnelle Antwort. Mit diesen Klassen habe ich mich auch schon beschäftigt, nur ist mir da schleierhaft, wie ich dort vorgefertigte .pdf Dateien an einen drucker senden kann.

Ich kann doch nur Streams an die einzelnen Drucker senden und eine pdf Datei ist ja in dem Sinne kein Stream.

Habe schonmal dran gedacht, immer den Standardrucker zu ändern, je nach dem in welchem Ordner grade eine .pdf Datei erzeugt wird.
Aber das ist ja sicherlich auch nicht das gelbe vom Ei.

Das war so gedacht, dass ich das Programmiertechnisch löse und nicht jedesmal manuell in die einzelnen Ordner gucke und den entsprechenden Drucker zum Standardrucker mache.

Dr.Z

Dr.Z Themenstarter:in
88 Beiträge seit 2007
vor 14 Jahren

Hat sonst noch wer eine Idee?

Ich habe da mal was programmiert, aber das funktioniert auch noch nicht so richtig:


files = Directory.GetFiles(@"\\10.156.107.130\Jobs\canon_1\HotFolder\", "*.pdf", SearchOption.TopDirectoryOnly);
                    if (files.Length > 0)
                    {
                        p = 1;
                        //late bind to the wsh network com object
                        //create an instance of a reflection type
                        Type t = Type.GetTypeFromProgID("WScript.Network");
                        //create an instance using the system activator, consuming the type
                        Object o = Activator.CreateInstance(t);
                        //invoke the method using the object we created
                        t.InvokeMember("SetDefaultPrinter", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] { "LFP1" });
                        Thread.Sleep(1000);

                        Process proc = new Process();
                        proc.StartInfo.CreateNoWindow = false;
                        proc.StartInfo.Verb = "print";
                        proc.StartInfo.FileName = files[0];
                        proc.Start();
                        proc.WaitForExit(5000);
                        proc.CloseMainWindow();
                        proc.Close();
                    }

so verfahre ich auch mit den anderen beiden Druckern, direkt im anschluss daran. nur klappt das nicht wirklich. ich schaffe es einen job zu drucken. Beim nächsten DruckJob mit dem nächsten Drucker schmiert mit das Programm mit einer

InvalidOperationException: Die angeforderten Informationen sind nicht verfügbarm da der Prozess beendet wurde.

ab.

Dr.Z

2.921 Beiträge seit 2005
vor 14 Jahren

Ich habe schon gesucht, wie man die Datei einfach drucken kann. Mit folgendem Code

[...]
ist es mir möglich, pdfs Dateien entsprechend zu drucken, allerdings nur auf dem Standardrucker. Gibt es evtl eine ergänzung, wie ich den Drucker festlegen kann, auf

[...]

Habt ihr da einen Vorschlag, oder kennt ihr vllt gar ein freeware tool, welches mir diese Arbeit abnehmen würde?

PdfSharp ansehen, SharpPdf ansehen, das Adobe Acrobat ActiveX einbinden oder

evtl. auch iTextSharp

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

1.820 Beiträge seit 2005
vor 14 Jahren

Hallo!

Musste mich selbst mit dem Thema befassen und habe herausgefunden, dass man den Acrobat Reader mit Parametern aufrufen kann, damit ein PDF-Dokument gedruckt wird:
AcroRd32.exe /t "{Name der PDF-Datei}" "{Name des Druckers}".

PdfSharp macht es auf dieselbe Weise, ob und wie SharpPdf das kann bzw. macht, weis ich nicht.

Nobody is perfect. I'm sad, i'm not nobody 🙁