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
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
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
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.
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 🙁