Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
mehrere Drucker ansprechen
Dr.Z
myCSharp.de - Member

Avatar #avatar-2603.jpg


Dabei seit:
Beiträge: 93
Herkunft: Nettetal

Themenstarter:

mehrere Drucker ansprechen

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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
myCSharp.de - Member

Avatar #avatar-2603.jpg


Dabei seit:
Beiträge: 93
Herkunft: Nettetal

Themenstarter:

beantworten | zitieren | melden

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.
Zitat
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
private Nachricht | Beiträge des Benutzers
Dr.Z
myCSharp.de - Member

Avatar #avatar-2603.jpg


Dabei seit:
Beiträge: 93
Herkunft: Nettetal

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
dr4g0n76
myCSharp.de - Experte

Avatar #avatar-1768.jpg


Dabei seit:
Beiträge: 3047
Herkunft: Deutschland

beantworten | zitieren | melden

Zitat
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.
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1928
Herkunft: NRW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers