Word-Dokument per OLE drucken

Antworten
Danccce
Beiträge: 16
Registriert: Do 17. Feb 2011, 11:48

Word-Dokument per OLE drucken

Beitrag von Danccce »

Hallo zusammen,

ich möchte gerne ein Word-Dokument per OLE drucken (Word 2007). Das funktioniert soweit ganz gut. Jedoch gelingt es mir nicht den Drucker um zu stellen:

Code: Alles auswählen

 
procedure TForm1.Button1Click(Sender: TObject);
var
  vMSWord       : variant;
  vWDocument    : variant;
  FileName      : OLEVariant;
begin
  try
FileName:=extractfilepath(ParamStr(0))+'Test.docx';
 
    vMSWord    := CreateOleObject('Word.Application');
    vWDocument := vMSWord.Documents.Open(FileName);
 
    vMSWord.ActivePrinter := Printer.Printers[formularPrinter]; // Funktioniert nicht
    //vMSWord.Application.ActivePrinter := Printer.Printers[formularPrinter];   // Funktioniert ebenso wenig
 
    vMSWord.ActiveDocument.PrintOut(false);
 
    vWDocument.Close(0);
    vMSWord.Quit;
    vMSWord := Unassigned;
  except
    Application.MessageBox('Formular konnte nicht gedruckt werden','Word-Fehler',16);
  end;
end


in der Variable formularPrinter habe ich die Nummer des ausgewählten Druckers gespeichert. (Das gesamte Projekt habe ich angehangen).

Kann mir jemand vielleicht einen guten Tipp geben? Vielen Dank im Voraus.

Besten Gruß
Marc
Dateianhänge
OleTest.zip
(11.39 KiB) 89-mal heruntergeladen

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Word-Dokument per OLE drucken

Beitrag von theo »

Was gibt denn das aus?

Code: Alles auswählen

  if PrintDialog1.execute then ShowMessage(Printer.PrinterName);   


Die Strings müssen halt iwie so aussehen: http://msdn.microsoft.com/de-de/library ... 15%29.aspx

Danccce
Beiträge: 16
Registriert: Do 17. Feb 2011, 11:48

Re: Word-Dokument per OLE drucken

Beitrag von Danccce »

Das gibt den Drucker genauso aus wie der im String: Printer.Printers[formularPrinter]
Daher sehe ich den die falsche Schreibweise nicht... :-(

Wäre es besser

Code: Alles auswählen

vMSWord.WordBasic.FilePrintSetup(Printer:='PDFCreator', _DoNotSetAsSysDefault:=1); 

zu verwenden? Funktioniert jedoch genauso wenig

Danccce
Beiträge: 16
Registriert: Do 17. Feb 2011, 11:48

Re: Word-Dokument per OLE drucken

Beitrag von Danccce »

Hab noch etwas experimentiert ...

Code: Alles auswählen

vMSWord.ActivePrinter := 'PDFCreator';   // Funktioniert

aber

Code: Alles auswählen

printerString:='PDFCreator';
vMSWord.ActivePrinter :=printerString;  //Funktioniert nicht



Welche String-Conversion kann ich verwenden????

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Word-Dokument per OLE drucken

Beitrag von gocher »

Also ich würde mit Word ein Makro erstellen und dieses dann mit deinem Quelltext vergleichen, vielleicht kommst Du dann auf eine Idee.
Dein PDFCreator braucht auch noch einen Dateinamen, gibt es dafür auch eine Übergabemöglichkeit?
Welche Fehlermeldung wird angezeigt?

OLE-Automatisierung immer WideString!!!!
WideString('PDFCreator');
Zuletzt geändert von gocher am Mi 27. Aug 2014, 15:54, insgesamt 1-mal geändert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Danccce
Beiträge: 16
Registriert: Do 17. Feb 2011, 11:48

Re: Word-Dokument per OLE drucken

Beitrag von Danccce »

So das erste Problem gelöst:

Code: Alles auswählen

vMSWord.ActivePrinter :=ShortString(Printer.Printers[formularPrinter]); 

funktioniert !!!

Jedoch setzt ActiveProinter ja den Standard-Drucker um. Besser wäre es nur das aktive Dokument auf einem anderen Drucker zu drucken. Laut iNet sollte dafür etwas wie :

Code: Alles auswählen

vMSWord.WordBasic.FilePrintSetup(Printer:='PDFCreator', _DoNotSetAsSysDefault:=1);

verwendet werden. Jedoch erhalte ich die Fehlermeldung:

Code: Alles auswählen

Projekt hat Exception-Klasse "EOleException" ausgelöst mit der Meldung:
Method 'FilePrintSetup' is not supported by automation object

Mache ich etwas falsch oder ist das wirklich nicht implementiert? Wo finde ich eine Doku dazu?

Vielen Dank
Marc

Antworten