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.