![]() |
HTML unter Vista drucken
Hallo zusammen,
ich habe folgendes Problem: Mit eigens dafür geschriebenen Komponenten erzeuge ich Berichte im HTML-Format. Da ich diese Berichte auch atomatisiert auf den Drucker ausgeben muss habe ich mir damals folgendes Programm dafür gebaut:
Delphi-Quellcode:
Das ganze funktioniert seit Jahren auf 2003er Servern und XP sehr gut. Unter Vista funktioniert es leider nicht mehr. Der Internet-Explorer unter Vista lädt immer ein temporäres Dokument aus dem Cache und nicht die angegeben Datei (Temp.html). Das Ergebis ist, dass ein leeres Dokument gedruckt wird.{ drucken des Berichts (Internet Explorer) } procedure TReport.NavigateComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); var vaOut: OleVariant; IECommand: IOleCommandTarget; begin try IECommand := (Sender as TWebBrowser).Document as IOleCommandTarget; IECommand.Exec(nil, OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, EmptyParam, vaOut); finally FPrinting := False; end; end; { Bericht drucken } function TReport.Print: Boolean; const TempFile = 'temp.html'; var WebBrowser: TWebBrowser; Timeout: Integer; begin PrintSema.Enter; try DeleteFile(iniRepRoot + '\' + TempFile); if SaveToFile(iniRepRoot + '\' + TempFile) then begin try WebBrowser := TWebBrowser.Create(nil); try WebBrowser.OnNavigateComplete2 := NavigateComplete; Sleep(200); WebBrowser.Navigate(iniRepRoot + '\' + TempFile, navNoReadFromCache); FPrinting := True; Timeout := 0; while Timeout < 500 do begin Sleep(10); Application.ProcessMessages; if not FPrinting then Break; Inc(Timeout); end; Result := Timeout < 500; finally WebBrowser.Free; end; except on E:Exception do begin ELog.LogDebug(E.Message); Result := False; end; end; end else Result := False; finally PrintSema.Leave; end; end; Zuerst habe ich auf die Sicherheitseinstellungen des Internet-Explorers getippt. Aber auch wenn ich da alles deaktiviere erhalte ich das gleiche Ergebnis. Hat jemand eine Idee, was da schief läuft? Oder hat jemand eine Idee wie man den Druck von HTML-Dokumenten im Hintergrund (aus einer Thread) sonst gestalten könnte? Die Lösung über HTMLs habe ich damals gewählt, da ich mit diesen recht einfach die Anforderung nach der UNICODE-Fähigkeit erfüllen konnte. Für eure Antworten schonmal vielen Dank. Alex |
Re: HTML unter Vista drucken
Folgende Möglichkeiten gibt es:
a, Lösch den Cache b, Nimm unterschiedliche Dateinamen für das Dokument c, Erzeuge das Dokument direkt im IE mittels ![]() Ich würde es mit Möglichkeit (c) versuchen. |
Re: HTML unter Vista drucken
Zitat:
vielen Dank für die schnelle Antwor. Ich habe es mal "auf die schnelle" mit folgenden Code probiert:
Delphi-Quellcode:
Ist im Pronzip das gleiche Ergebnis. Es wird eine leere Seite ausgegeben... Müsste mal prüen, ob das Ganze unter XP so geht. Auf dem Vistasystem geht's auf jeden Fall nicht. Das mit dem unterschiedlichen Dokumentnamen zeigt auch keinen Effekt. Ich bin etwas ratlos im Moment.
{ Bericht drucken }
function TReport.Print: Boolean; var WebBrowser: TWebBrowser; MemStream: TMemoryStream; IECommand: IOleCommandTarget; vaOut: OleVariant; begin try Print := False; PrintSema.Enter; try WebBrowser := TWebBrowser.Create(nil); try WebBrowser.Navigate('about:blank'); while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages; MemStream := TMemoryStream.Create; try FLines.SaveToStream(MemStream); MemStream.Seek(0, 0); (WebBrowser.Document as IPersistStreamInit).InitNew; (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(MemStream)); IECommand := WebBrowser.Document as IOleCommandTarget; IECommand.Exec(nil, OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, EmptyParam, vaOut); Print := True; finally MemStream.Free; end; finally WebBrowser.Free; end; finally PrintSema.Leave; end; except on E:Exception do begin ELog.LogDebug(E.Message); Result := False; end; end; end; Sonst noch Ideen??? Alex |
Re: HTML unter Vista drucken
Du musst dem IE anch dem Navigate/Load zeit geben das Dokument auch zu rendern. (Siehe auch procedure TEmbeddedWb.AssignDocument vom EmbeddedWB)
Delphi-Quellcode:
while WebBrowser.readystate <> READYSTATE_COMPLETE do
Forms.Application.ProcessMessages; |
Re: HTML unter Vista drucken
Zitat:
Danke für die "schnelle" Antwort :-D (Das Programm läuft mittlerweile seit 6 Monaten in Korea... unter XP :-D) Alex |
Re: HTML unter Vista drucken
Zitat:
Aber gut wenn es auch so läuft. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz