Thema: Delphi HTML unter Vista drucken

Einzelnen Beitrag anzeigen

BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#3

Re: HTML unter Vista drucken

  Alt 2. Feb 2009, 11:13
Zitat von Bernhard Geyer:
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 IPersistStreamInit-Interface

Ich würde es mit Möglichkeit (c) versuchen.
Hallo Bernhard,

vielen Dank für die schnelle Antwor. Ich habe es mal "auf die schnelle" mit folgenden Code probiert:

Delphi-Quellcode:
{ 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;
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.

Sonst noch Ideen???

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat