So drucken Sie eine docx auf einem bestimmten Drucker mit Microsoft.Office.Interop.Wort.Dokument.PrintOut()
Dies scheint wie eine einfache Notwendigkeit, aber aus irgendeinem Grund kann ich nicht finden wie ich dies erreichen können. Ich habe code wie folgt:
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
MemoryStream documentStream = getDocStream();
FileInfo wordFile = new FileInfo("c:\\test.docx");
object fileObject = wordFile.FullName;
object oMissing = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Word.Document doc = wordInstance.Documents.Open(ref fileObject, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
doc.Activate();
doc.PrintOut(oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
Ich brauche eine config-Einstellung Laufwerk, Drucker und Fach verwendet werden. Nach der Suche rund fand ich Microsoft.Office.Interop.Wort.- Anwendung.ActivePrinter, die ein entsprechendes string-Eigenschaft, dass die Dokumentation sagt "nimmt den Namen des aktiven Druckers", aber ich weiß nicht, was es bedeutet, für einen Drucker, der den "Aktiven Drucker", vor allem, wenn ich zwei von Ihnen. Wie kann dies erreicht werden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
TL;DR Sie können nicht drucken auf einem bestimmten Drucker. Sie haben, um den Standarddrucker ändern, was Sie verwenden möchten. Dann drucken Sie wie gewohnt.
Kann es sein, dass die Dinge haben sich dramatisch verändert, seit zuerst haben wir unsere Arbeit in diesem Bereich, aber wir waren nicht in der Lage zu finden, jede Möglichkeit zum drucken auf einem bestimmten Drucker. So was haben wir im Ort, war ändern Sie den system-Standarddrucker, was wir wollten, drucken Sie alle Dokumente, die wir wollten auf diesem computer, dann ändern Sie es zurück zu dem, was es vorher war. (eigentlich können wir aufhören, es zu ändern zurück, denn nichts anderes war zu erwarten, dass jede bestimmte Standard-Drucker, so ist es egal).
Kurze Antwort:
Aber, wir fanden diese sehr unzuverlässig! Lesen Sie für weitere Einzelheiten:
Wenn Sie es nicht bereits getan haben, ich stark empfehlen den Aufbau Ihrer eigenen wrapper-Klassen, die sich mit allen Weltlichen Arbeit-bits von
_Document
und_Application
. Es ist vielleicht nicht so schlimm, wie es damals war (dynamic
war keine option für uns), aber es ist immer noch eine gute Idee. Sie werden bemerken, dass bestimmte leckeren bits von code sind nicht aus diesem ... ich habe versucht, den Fokus auf den code, der verbunden ist, um was Ihr bittet. Auch dieseDocWrapper
Klasse ist eine Zusammenführung von vielen einzelnen code-Teile - verzeihen Sie die Störung. Schließlich, wenn man bedenkt, exception-handling, ungerade (oder einfach nur schlechtes design, durch das werfen von Exception) -- erinnere mich, ich bin versucht so zusammen zu stellen Teile des Codes aus vielen Orten (während auch verlassen, unsere eigene benutzerdefinierte Typen). Lesen Sie die Kommentare in den code, Sie egal.Gibt es eine Möglichkeit den Drucker angeben, aber nicht legen Sie es als Standard-system (ich benutze C++/CLR, aber es sollte portabel sein, um C#):
Word.Application
'sActivePrinter
Eigenschaft.Ich erbte ein C# - Projekt, das gebrauchte Wort.- Anwendung. Da es ein C# - Projekt und die übersetzung schien ziemlich einfach ich verwendet @Lars C++ - code und fügte hinzu, eine C# übersetzt-Methode, um mein Projekt. Buchung die direkte übersetzung sein code hier in der Hoffnung, jemandem das Leben ein wenig leichter: