Word_Dokument ausdrucken, ohne es zu öffnen

tecla

Erfahrenes Mitglied
Hallo alle,

Weiss jemand, ob man ein Worddokument ausdrucken kann ohne es vorher zu öffnen? Mein bisheriger Code sieht so aus:
Code:
                object oFileName = sPfad;
                Word.Document oDruckDokus = DruckApp.Documents.Open(ref oFileName, 
                     ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
                     ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
                     ref missing, ref missing, ref missing);
                object copies = "1";
                object pages = "";
                object range = Word.WdPrintOutRange.wdPrintAllDocument;
                object items = Word.WdPrintOutItem.wdPrintDocumentContent;
                object pageType = Word.WdPrintOutPages.wdPrintAllPages;
                object oTrue = true;
                object oFalse = false;  
                oDruckDokus.PrintOut(ref oTrue, ref oFalse, ref range, ref missing, ref missing,
                       ref missing, ref items, ref copies, ref pages, ref pageType, ref oFalse, 
                       ref oTrue, ref missing, ref oFalse, ref missing, ref missing, ref missing, 
                       ref missing);

Das funktioniert zwar, geht aber ne halbe Ewigkeit, da ich eine grosse Anzahl Dokumente drucken möchte.

Hat jemand eine bessere Idee?

Grüsse Tecla
 
Noch ein weiteres Problem in diesem Zusammenhang:

Ich möchte ca. 300 Dokumente ausdrucken. Bei meinem jetzigen Code mache ich das mit einer foreach-Schlaufe. Darin öffne ich jedes Dokument, drucke es aus und schliesse es wieder.

Mein Vista-Rechner braucht ca. 6 Sekunden pro Dokument, d.h. insgesamt etwa 50 Minuten. Das wäre ja noch einigermassen aushaltbar. Das Problem ist aber, dass der Drucker erst startet, nachdem die gesamte Schlaufe abgearbeitet ist, d.h. zu den 50 Minuten kommt jetzt auch noch die Druckzeit dazu...

Kann ich irgendwie den Drucker dazu bringen, sofort loszulegen?
Auf was wartet der eigentlich genau?

Ich wäre sehr froh um ein paar Informationen diesbezüglich.

Grüsse, Tecla
 
Hi,


probier mal folgendes ..

System.Drawing.Printing.PrintDocument dokument = new System.Drawing.Printing.PrintDocument();

dokument .DocumentName = "deine Datei";
dokument .Print();

geht auf den Standartdrucker mit allen Seiten.

man kann aber auch Settings vorher anlegen
System.Drawing.Printing.PrinterSettings settings = new ..
und dann zuweisen dokument .PrinterSettings = settings;


Hoffe das es dir hilft.

Poste mal ob das schneller geht oder net.


mfg
Martin
 
Hallo Martin

Danke für deinen Tipp. Das würde allerdings viel schneller gehen, allerdings kommt bei mir nur ne leere Seite aus dem Drucker... :rolleyes:
Kann es sein, dass das nur für txt-Dokumente funktioniert? Oder kann man bei den Settings eventuell einstellen, um was für Dok es sich handelt?

Herzliche Grüsse
Tecla
 
autsch .. richtig.

Muss ich schauen warum ..

Aber warum dauerts bei dir (vorher) 6 Sekunden?
Sind die Dateien so groß ?

Macht er Word komplett zu und wieder auf pro Dokument ?


mfg
Martin
 
Liegt wohl am fehlenden DatenStream.

Aber wenn ich erst versuche mit einem StreamReader die Datei zu lesen wie unter http://msdn2.microsoft.com/en-us/library/system.drawing.printing.printdocument.aspx
beschrieben, dann kommt eine ellenlange Liste aus Häkchen und Kästchen raus.
Scheinbar muss Word selber das Dokument dem Printer schicken.
Vermutlich muss ich dazu wohl auch öffnen.
Es wäre mir also schon geholfen, wenn der Drucker sofort loslegen würde und nicht wartet bis alle Dateien gesendet sind.
Es ist mir schleierhaft, auf was der Drucker wartet, er beginnt aber erst, wenn die Methode komplett abgearbeitet ist...

Zu deinen Fragen:

Nein, Word bleibt die ganze Zeit offen. Die Dateien haben eine ganz normale Grösse (1-3 Seiten) ohne grosse Grafiken drin. Ich glaube das liegt am Vista, das hat immer so lange, um Word-Dokumente zu öffnen:mad:

Grüsse
Tecla
 
Eine andere Idee wäre, das über ShellExecute zu probieren. Ich habe allerdings keine Ahnung, wie das von Zeitverhalten aussieht und das Word-Programm wird dabei wahrscheinlich auch geöffnet.
Vom Code her sollte das so funktionieren (ungetestet):
C#:
string strFile = "blabla.doc";
ProcessStartInfo oStartInfo = new ProcessStartInfo(strFile);
oStartInfo.UseShellExecute = true;
oStartInfo.Verb            = "print";
Process.Start(oStartInfo);
Gruß
MCoder
 
Herzlichen Dank für eure Hilfe!

Mit der ShellExecute hab ich's leider auch nicht hingekriegt.
Dafür habe ich rausgefunden, dass der erste Parameter der PintOut-Methode (object Background) dafür verantwortlich ist, ob der Drucker sofort loslegt oder nicht.
Setzte ich den auf false, geht's sofort los und meine Ausdruckerei geht kaum länger, als der Drucker zum Printen braucht. Phuu, welch Zangengeburt...

Code:
oDruckDokus.PrintOut(ref oFalse, ref oFalse, ref range, 
   ref missing, ref missing, ref missing, ref items, ref copies, ref pages, ref pageType, 
   ref oFalse, ref oTrue, ref missing, ref oFalse, ref missing, ref missing, ref missing, 
   ref missing);

Grüsse Tecla
 

Neue Beiträge

Zurück