Home » Tutorials » Third-Party-Komponenten » Arbeiten mit der eDocEngine VCL von Gnostice

Arbeiten mit der eDocEngine VCL von Gnostice

Spaß mit Delphi und dynamischer Bilderzeugung

eDocEngine ist eine hervorragende Sammlung von Komponenten, um Textdokumente, Tabellen, Bilddateien und Zwischenablageinhalte zu erstellen. Die Komponenten haben zwar ihre eigene API, können jedoch auch über übliche und damit den meisten Entwicklern bereits bekannte Canvas-Befehle gesteuert werden.
Die eDocEngine kann eingesetzt werden, um alle Arten von dynamischen Bildern zu erzeugen, wie zum Beispiel die Bewegung des DAX als Liniendiagramm. Stattdessen kann man jedoch auch einfach ein bisschen Spaß haben und sich ein Bild aus dem Internet suchen, wie zum Beispiel das folgende Bild, auf dem der Text „This is my protest sign“ bereits entfernt wurde:


Mit der JPEG-Engine der eDocEngine wird das Vorlagenbild auf eine „Seite“ gezeichnet, die in den Abmessungen denen des Bildes entspricht. Dann wird der eigene Text mit einer leichten Drehung (an die Ausrichtung des Schildes angepasst) darüber gerendert.
Dies ist der Quelltext (benötigt keine Komponenten auf dem Formular):

procedure TForm1.Button1Click(Sender: TObject);
var
  gtJPEGEngine1: TgtJPEGEngine;
  Image1: TJPEGImage;
begin
  // Vorlagenbild laden
  Image1 := TJPEGImage.Create;
  Image1.LoadFromFile('protest.jpg');

  // Eine JPEG-Engine erzeugen
  gtJPEGEngine1 := TgtJPEGEngine.Create(Nil);

  with gtJPEGEngine1 do begin
    Preferences.ShowSetupDialog := false;
    Preferences.OpenAfterCreate := true;
    MeasurementUnit :=  muPixels;

    // JPEG-Encoding Einstellungen setzen
    PixelFormat := pf24bit;
    ProgressiveEncoding := true; // Webfreundlich
    Quality := 80;  // Ein guter Kompromiss

    // Größe der Vorlage übernehmen
    with Page do begin
      PaperSize := Custom;
      Width := Image1.Width;
      Height := Image1.Height;
    end;

    // Textrotation an die Ausrichtung der Vorlage anpassen
    SetTextRotation(5);

    // Erstes Bild
    FileName := 'Protest1.jpg';
    // Schrift einstellen
    Font.Name := 'Comic Sans MS';
    Font.Size := 40;
    Font.Color := clRed;

    BeginDoc;
      // Vorlagenbild zeichnen
      DrawImage(gtRect(0,0, 640, 480), TGraphic(Image1));
      // Text über die Vorlage zeichnen
      TextOut(250,100, 'Stop');
      TextOut(225,200, 'Cartoon');
      TextOut(225,300, 'Violence');
    EndDoc;  // Bild in Datei speichern

    // Zweites Bild
    FileName := 'Protest2.jpg';
    SetTextRotation(5);
    Font.Size := 28;
    Font.Color := clWebBlueViolet;

    BeginDoc;
      DrawImage(gtRect(0,0, 640, 480), TGraphic(Image1));
      TextOut(225,120, 'Save the');
      TextOut(230,220, 'WHALES!');
      TextOut(165,320, 'Collect all of them.');
    EndDoc;

    Image1.Free;
  end;
end;

Und hier ist das Ergebnis:


Ein paar abschließende Hinweise:

  1. Dem angegebenen Dateinamen wird automatisch noch eine „1“ angehängt; diese ist die automatische Nummerierungsfunktion für mehrseitige Dokumente.
  2. Wichtig ist es, den Namen der Ausgabedatei VOR dem Aufruf von BeginDoc festzulegen, da er sonst nicht übernommen wird.

DISCLAIMER: Die Schildbeschriftungen geben nicht die Meinung von Gnostice oder Delphi-Treff wieder. Das Vorlagenbild entstammt einer Seite über lustige Protestschilder.

Download Beispielprojekt