Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#12

Re: PDF-Datei aus dem Inhalt eines VirtualStringTree erzeuge

  Alt 16. Apr 2009, 12:51
Hallo,

wann soll das PDF erstellt werden? Bei jedem Ereignis oder einmal am Tag?
Bei bestimmten Ereignissen bedeutet für mich, dass genau dann das PDF erstellt wird und nicht permanent, nur so für den Fall, dass es ja eventuell gebraucht werden könnte.

Meine Vorstellung wäre hier:

Ereignis tritt ein.
Einmal durch den VST und alles als PDF ausgeben, was benötigt wird.

PowerPDF sollte da gut geeignet sein, schau es Dir aber bitte zuerst einmal (losgelöst von der Aufgabenstellung) an und entscheide dann, ob es das Gewünschte leisten kann.

HTML wäre hier aber auch nicht schlecht, das als HTML-Email und der Anwender sieht sofort in der Mail, was ihn (hoffentlich) interessiert, kein Spamfilter hält Dir 'nen Anhang fest, kein Anhang kann zu groß werden und der Anwender muss auch nicht erst den Anhang speichern, um Ihn dann zu öffnen. Okay: Der Mailclient muss HTML können

Delphi-Quellcode:
Procedure OnEreignisIrgendwasOderSo;
Var
     slHTML : TStringList
     i : Integer;
begin
  slHTML := TStringList.Create;
  // Hier den Header der HTML-Seite bauen...
  slHTML.Add('<html>');
  slHTML.Add('<head>');
  slHTML.Add('<link rel="stylesheet" type="text/css" href="VST.css"');
  slHTML.Add('</head>');
  slHTML.Add('<body>');
  slHTML.Add('<table>');
  slHTML.Add('<tr>');
  slHTML.Add('<th>ID</th>');
  slHTML.Add('<th>LfdNr</th>');
  slHTML.Add('<th>Datum</th>');
  slHTML.Add('<th>Uhrzeit</th>');
  slHTML.Add('<th>Ereignis</th>');
  slHTML.Add('<th>Teilnehmer</th>');
  slHTML.Add('<th>Bereich</th>');
  slHTML.Add('</tr>');
  // Hier einmal durch den VST laufen und je Child
  for i := 0 to VST.Count do begin //oder so ähnlich
    slHTML.Add('<tr class="' + Ereignis + '">'); // Hierzu ein passendes Stylesheet bauen
    slHTML.Add('<td align="right">');
    slHTML.Add(IntToStr(Daten.ID));
    slHTML.Add('</td>');
    slHTML.Add('<td align="right">');
    slHTML.Add(IntToStr(Daten.LfdNr));
    slHTML.Add('</td>');
    slHTML.Add('<td align="left">');
    slHTML.Add(DateToStr(Daten.Datum));
    slHTML.Add('</td>');
...
    slHTML.Add('<td>');
    slHTML.Add(Daten.Bereich);
    slHTML.Add('</td>');
    slHTML.Add('</tr>');
  end;
  slHTML.Add('</table>');
  slHTML.Add('</body>');
  slHTML.Add('</html>');

  // hier slHTML speichern und als Mail verschicken, Lösungen solltest Du dazu im Forum finden.


  slHTML.Free;
end;
Stylesheet vst.css
Code:
.Stoerung     { background-color : #ff0000; }
.AllesInButter { background-color : #00FF00; }
.IchBinBlau   { background-color : #0000ff; }
.AllesGrau    { background-color : #999999; }
Hier für jedes Ereignis eine entsprechende Klasse einfügen, dann funktioniert das mit slHTML.Add('<tr class="' + Ereignis + '">'); allerdings dürfen die Ereignisse dann keine Umlaute enthalten.

Das Aussehen lässt sich so an Kundenwünsche anpassen, ohne noch mal das Programm zu ändern, was bei PDF nicht geht.

XML und XSLT wäre hier natürlich auch noch eine Möglichkeit, die ähnlich einfach zu implementieren sein dürfte.
  Mit Zitat antworten Zitat