Thema: Delphi HTML als PDF ausgeben

Einzelnen Beitrag anzeigen

Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
461 Beiträge
 
Delphi XE4 Professional
 
#1

HTML als PDF ausgeben

  Alt 10. Mär 2010, 14:29
Hallo Leute,

ein Gerät mit embeeded Linux/ApacheWebserver wird ausgelesen und die Werte als "Bericht[x].jpg" abgespeichert.
Funktioniert so weit einigermaßen. Schöner wäre natürlich, wenn der Bericht als PDF abgespeichert wird.
Nur - wie könnte ich das machen?

Vielen Dank
Erich Wanker

IST-Situation:

Ich lade einen HTML Text von einer Quelle in ein Memo via:
Delphi-Quellcode:
  idClient := TIdHTTP.Create(Application);
  msData := TMemoryStream.Create;
  try
    idClient.Get('http://'+edit1.Text+'/goto.htm?Satz='+inttostr(nummerl)+'', msData);
    msData.Seek(0, soFromBeginning);
    Memo1.Lines.LoadFromStream(msData);
    
  finally
    idClient.Free;
    msData.Free;
  end;
anschließend bereinige ich den Text und laden ihn in einen Webbrowser via:
Delphi-Quellcode:
      bereinigen := Memo1.Text;
      bereinigen := Stringreplace(bereinigen,'window.print();','',[rfReplaceAll]);
      bereinigen := Stringreplace(bereinigen,'</head>','</head> <font face="Arial">',[rfReplaceAll]);
      Memo1.Text := bereinigen;

      LoadHTMLToWebbrowser(WebBrowser1,memo1.lines);
      webbrowser1.Refresh;

Anschließend mach ich einen Screenshot und speichere den ab via:
P.S.: da die Berichte immer gleich lang sind, hab ich die Größe des Webbrowser händisch passend gemacht und den Webbrowser.visible:=false geschaltet .. Schrecklicher Work-around
WebBrowserScreenShot(WebBrowser1,exepfad+'Bericht['+inttostr(nummerl)+'].jpg');
Codeschnipsel betreffend "Screenshot":
Delphi-Quellcode:
procedure TForm1.WebBrowserScreenShot(const wb: TWebBrowser; const fileName: TFileName) ;
var
  viewObject : IViewObject;
  r : TRect;
  bitmap : TBitmap;
begin
  if wb.Document <> nil then
  begin
    wb.Document.QueryInterface(IViewObject, viewObject) ;
    if Assigned(viewObject) then
    try
      bitmap := TBitmap.Create;
      try
        r := Rect(0,0, wb.Width,wb.Height) ;

        bitmap.Width := wb.Width-GetSystemMetrics(SM_CXVSCROLL);
        bitmap.Height := wb.Height-GetSystemMetrics(SM_CYHSCROLL);

        viewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Application.Handle, bitmap.Canvas.Handle, @r, nil, nil, 0) ;

        with TJPEGImage.Create do
        try
          Assign(bitmap) ;
          SaveToFile(fileName) ;
        finally
          Free;
        end;
      finally
        bitmap.Free;
      end;
    finally
      viewObject._Release;
    end;
  end;
end;

Benutze Delphi7
LMD-Tools
ZEOS-Lib
Reportbuilder9
Firebird 2.1
MadTools
...
Erich Wanker - for life:=1971 to lebensende do begin ..
  Mit Zitat antworten Zitat