TWPPDFPrinter Canvas Höhe / Breite

  • Hallo,

    ich möchte PDF-Watermarks mit folgendem Code erzeugen, die PDF-Seiten sollen DIN-A4 sein:

    Code
      image := TImage.Create(nil);
      res := Screen.PixelsPerInch;
      w := Round(21 / 2.54 * res);
      h := Round(29.7 / 2.54 * res);
      PDFPrinter1.StartWatermark('Hintergrund_1', w, h, res, res);
      image.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Background.jpg');
      PDFPrinter1.Canvas.StretchDraw(Rect(0, 0, w, h), image.Picture.Graphic);
      PDFPrinter1.EndWatermark;
      image.Free;

    Das Image soll bildfüllend eingebettet werden, ist aber ca. 20% größer als die Seite.

    Wie komme ich an die Höhe / Breite von PDFPrinter1.Canvas?

    PDFPrinter1.XPixelsPerInch ist so groß wie res, also 96.

    Hat PageWidth / PageHeight bei StartWatermark eine andere Einheit wie das Rect beim Canvas.StretchDraw?

    Danke
    Ciao

    Stefan

    Einmal editiert, zuletzt von skoschke (9. April 2020 um 07:44)

    • Offizieller Beitrag

    Die Auflösung des Canvas ändert sich nicht zwangsläufig trotz der Übergabe an StartWatermark, je nach CanvasReferenz.

    Ich empfehle die Graphic aber hiermit einzubetten

    function DrawGraphicFile(x, y, w, h: Integer; const FileName: string): Integer;


    Hier könnte man aber auch auf die Wasserzeichenfunktion verzichten, da der Rückgabe wert der Funktion auch in mehrfachen Aufrufen von

    function DrawBitmapClone(x, y, w, h: Integer; LastBitmapID: Integer): Integer;

    verwenden kann, ohne dass dabei Daten dupliziert werden.

  • Danke erst mal für die super schnelle Antwort!

    ich habe jetzt mal folgendes probiert:

    Das funktioniert nun und ich habe ein Bild auf 2 Seiten.

    Nun möchte ich das am liebsten in einen Event packen, damit bei Seite 1 Hintergrundbild1, Seite 2 Hintergrundbild2 und Folgeseiten Clone vom Hintergrundbild2 gezeichnet werden.

    Ciao
    Stefan

    Einmal editiert, zuletzt von skoschke (9. April 2020 um 12:15) aus folgendem Grund: Codeänderungen

  • Hallo,

    ich gebe die Antwort mal selbst wenn jemand das gleiche Problem hat,

    der Event ist OnInternStartPage und Startseite / Folgeseiten - Hintergrund habe ich so gelöst:

    Ein PDF mit 100 Seiten ist nicht mal 100 Byte größer als ein 2 seitiges, das Clonen funktioniert :-)

    Ciao
    Stefan