Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Workshops / PDF / Zeichnen

PDF-Beispiel: Zeichnen und Positionieren

Ebenen in clsPDF

clsPDF arbeitet mit 3 Ebenen, welche quasi übereinandergelegt werden:

  1. Ebene für Hintergrundzeichnungen

    Hier landen alle Zeichenoperationen, die vor der ersten Print...-Methode einer Seite durchgeführt worden sind. Dies kann etwa für "Wasserzeichen" oder farbige Hintergrundflächen genutzt werden.

  2. Ebene für Fließtext

    Hier erfolgt die Ausgabe der mit den Print...-Methoden bereitgestellten Texte.

  3. Ebene für Vordergrundzeichnungen

    Hier landen alle Zeichenoperationen, die nach der ersten Print...-Methode einer Seite durchgeführt worden sind. Dies kann etwa für Kopf- und Fußzeilen genutzt werden (oder eben für die eigentlichen Grafiken).

Code-Beispiele für Zeichenoperationen

Tipp: Die hier vorgestellten Beispiele sind auch im Download enthalten.

Gelbes Kreuz über grünem Quadrat

With pdf

  'Grüne Quadratfläche mit 100mm x 100mm:
  .FillColor = vbGreen
  .DrawBox mmPoints(10), mmPoints(10), mmPoints(100), mmPoints(100), True

  'Gelbes Diagonalkreuz aus 10mm breiten Balken:
  .DrawColor = vbYellow
  .DrawWidth = mmPoints(10)
  .DrawLine mmPoints(10), mmPoints(10), mmPoints(110), mmPoints(110)
  .DrawLine mmPoints(10), mmPoints(110), mmPoints(110), mmPoints(10)

  'Roter Rahmen in 1mm Stärke:
  .DrawColor = vbRed
  .DrawWidth = mmPoints(1)
  .DrawBox mmPoints(10), mmPoints(10), mmPoints(100), mmPoints(100)

End With

Man beachte, wie die verschiedenen Zeichenoperationen übereinander gelegt werden.

Kreisumriß und gedrehte Schrift

With pdf

  '3/4-"Kreis"umriss mit Winkelangaben...
  .DrawColor = vbBlue
  .FillColor = vbBlack
  .MoveTo 170, 340
  For i = 0 To 270 Step 30
    w = i / 180 * PI   'Umrechnung Grad/Radiant
    .DrawLineTo 170 + 150 * Cos(w), 340 - 150 * Sin(w)
    .DrawText 170, 340, "- " & i & " Grad -", w
  Next i
  .DrawLineTo 170, 340

End With

Code-Beispiele für PDF-Ereignisse

Durch die Deklaration einer clsPDF-Objektvariablen via "WithEvents" kann die Komponente der Anwendung jedesmal mitteilen, wenn eine Seite gerade begonnen oder beendet wurde.

Deklaration

Private WithEvents pdf As clsPDF

Wichtig: Solche Deklarationen werden von VB5 nur in Klassen (".cls", ".frm", ".ctl") zugelassen, also nicht in normalen Modulen (".bas").

PageStarted-Ereignis: Eine neue Seite wurde begonnen

Dieses Ereignis wird immer dann ausgelöst, wenn die erste Zeile einer Seite ausgegeben werden soll (und natürlich nach NewPage).

Private Sub pdf_PageStarted()

  Dim Width As Integer
  Dim Height As Integer

  'Die ersten 7 Zeilen jeder Seite gelb hinterlegen:
  Width = pdf.Width - 2 * pdf.LeftMargin
  Height = 7 * pdf.FontSize
  pdf.FillColor = vbYellow
  pdf.DrawBox pdf.LeftMargin, pdf.TopMargin, Width, Height, True

End Sub

PageFinished-Ereignis: Eine Seite ist voll und wurde beendet

Dieses Ereignis wird immer dann ausgelöst, wenn die letzte Zeile einer Seite (vgl. LinesPerPage) ausgegeben worden ist (und natürlich unmittelbar vor NewPage).

Private Sub pdf_PageFinished()

  Dim Width As Integer
  Dim Height As Integer

  'Vorhandenen Text passend(!) einrahmen:
  Width = pdf.Width - 2 * pdf.LeftMargin
  Height = pdf.LineNumber * pdf.FontSize
  pdf.DrawColor = vbBlue
  pdf.DrawBox pdf.LeftMargin, pdf.TopMargin, Width, Height
  
  'Fußzeile:
  pdf.FillColor = vbRed
  pdf.DrawText pdf.LeftMargin, pdf.Height - 2 * pdf.FontSize, _
               "Seite " & pdf.PageNumber & " hat " & pdf.LineNumber & " Zeilen"

End Sub

...>>

© Jost Schwider, 11.04.2005-11.04.2005 - http://vb-tec.de/pdf-draw.htm