druk html ze stringa

0

Witam!

Mam wyzwanie dla programistów Delphi w wersji 6 :d Siedzę nad nim już piąty dzień i nic nie wykombinowałem...
Chodzi o coś takiego: posiadam sobie zmienną typu string, która jest generowanym przez program htmlem (kod poniżej) - w jaki sposób wydrukować to jako html (tak, jak w przeglądarce) bez zapisywania na dysku?

Opiszę, co udało mi się zrobić :d
Otóż bez problemu mogę wyświetlić stringa w TWebBrowserze, i wtedy pojawia się piękny sformatowany html. Problem w tym, że nie zmienia to "adresu" przeglądanej strony, która ciągle wynosi "about:blank".
Ze stron Borlanda można przepisać kod drukujący bieżącą lokalizację html z poziomu TWebBrowsera.
Z połączenia powyższych wynika, że po pryzpisaniu stringa do webbrowsera i wydrukowaniu go, pojawia się pusta strona "about:blank"...
Rozwiązanie oczywiście jest - zapisać stringa na dysku jako plik, wczytać do browsera i wydrukować. Ale to jest nieprofesjonalne :> i chciałbym, aby odbyło się to bez konieczności zapisu czegokolwiek na dysku.

Rozwiązanie lamerskie:

 html:=exportGridToHTML(table);
 sl:=tstringlist.create;
 sl.add(html);
 sl.SaveToFile('c:\\temp.html');
 sl.free;
   WebBrowser.navigate('c:\\temp.html');
   while WebBrowser.ReadyState <= READYSTATE_INTERACTIVE do
    Application.ProcessMessages;
 loaded:=true;
 if loaded then
  begin
   hidden.Visible:=true;
//   WebBrowser.OleObject.Document.documentElement:=html;
   HTMLDoc := WebBrowser.Document as IHTMLDocument2;
   if HTMLDoc = nil then
     raise Exception.Create('Couldn''t convert the WebBrowser to an IHTMLDocument2');
   HTMLWnd := HTMLDoc.parentWindow;
   HTMLWindow3 := HTMLWnd as IHTMLWindow3;
  // Finally, we get to the print method
   HTMLWindow3.print;
   hidden.visible:=false;
  end;

Ładowanie stringa (wstawić powyżej w miejsce zapisywania do pliku) do webbrowsera:

   if Assigned(WebBrowser.Document) then
   begin
     sl := TStringList.Create;
     try
       ms := TMemoryStream.Create;
       try
         sl.Text := HTML;
         sl.SaveToStream(ms) ;
         ms.Seek(0, 0) ;
         (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)) ;
         loaded:=true;
       finally
         ms.Free;
       end;
     finally
       sl.Free;
     end;
   end;

Będę dźwięczny za pomoc,
Pozdrawiam,
Sorrow.

0

about:tekst do wydrukowania :)

0

Proste rzeczy typu znaczniki pogrubienia, kursywy etc. mozna latwo samemu sparsowac i rysowac na canvasie zmieniajac style w obrebie znacznika. Nad obrazkami "po drodze" troche posiedzialem ale w koncu wyszlo wiec wszystko da sie zrobic ;).

1 użytkowników online, w tym zalogowanych: 0, gości: 1