Inhaltsverzeichnis

25.1.8 CairoFontExtents

Die Font-Eigenschaft in der Klasse Cairo setzt den Font oder liest den Font aus, mit dem Text gezeichnet wird – mit den Eigenschaften Bold, Extents, Italic, Matrix, Name, Size, Slant und Weight der virtuellen Klasse .Cairo.Font.

B0

Abbildung 25.1.8.1: Eigenschaften der virtuellen Klasse .Cairo.Font

Die Größen 'Internal Leading' und 'External Leading' sind zwar Schrift-Maße der typographischen Metrik – jedoch keine Eigenschaften der virtuellen Klasse .Cairo.Font.

25.1.8.1 Eigenschaften

Die Klasse CairoFontExtents speichert metrische Informationen für eine Schrift mit einem festgelegten Schrift-Font in der Eigenschaft Extents der virtuellen Klasse .Cairo.Font und verfügt über diese Eigenschaften vom Datentyp Float:

EigenschaftBeschreibung
AscentGibt die Distanz an, wie weit sich die Schrift über der Grundlinie (BaseLine) erstreckt. Beachten Sie, dass dies nicht immer genau gleich dem Maximum der Ausdehnung aller Schrift-Zeichen ist.
DescentGibt die Distanz an, wie weit die Schrift unterhalb der Grundlinie (BaseLine) liegt. Dieser Wert ist positiv für typische Schriftarten, die Abschnitte unterhalb der Grundlinie einnehmen. Beachten Sie, dass dies nicht immer genau gleich dem Maximum der Ausdehnung aller Glyphen in der Schrift ist.
HeightGibt den vertikalen Abstand zwischen den Grundlinien aufeinander folgender Text-Zeilen mit dem gegebenen Font an. Der Abstand ist größer als die Summe aus Ascent und Descent.
MaxXAdvanceLiefert die maximale Distanz in der X-Richtung, um die der Ursprung für jede Glyphe in der Schrift vorgeschoben ist.
MaxYAdvanceLiefert die maximale Distanz in der y-Richtung, um die der Ursprung für jede Glyphe in der Schrift verschoben ist. Dieser Wert ist Null für Schriften mit horizontalem Layout.

Tabelle 25.1.8.1.1 : Eigenschaften der virtuellen Klasse .Cairo.Font

25.1.8.2 Beispiel

Das Beispiel demonstriert den Einsatz aller Eigenschaften der Klasse CairoFontExtents und das Auslesen der Werte für diese Eigenschaften:

Private Sub GeneratePDF()
  Dim PDFSurface As CairoPdfSurface
  Dim fXOffset As Float = 20
  Dim fYOffset As Float = 20
 
  PDFSurface = New CairoPdfSurface(sPfadPDFDatei, 210, 297) ' → A4-Format der Oberfläche
 
  Cairo.Begin(PDFSurface)    
    Cairo.Matrix = Cairo.Matrix.Translate(MMToPoints(fXOffset), MMToPoints(fYOffset))
    Cairo.Matrix = Cairo.Matrix.Scale(1, 1) ' Zoom-Faktor = 1    
 
    Cairo.AntiAlias = False
    Line(MMToPoints(0), MMToPoints(0), MMToPoints(0), MMToPoints(297 - fYOffset), 0.1, [1, 1], Color.Red)
    Line(MMToPoints(0), MMToPoints(0), MMToPoints(210 - fXOffset), MMToPoints(0), 0.1, [1, 1], Color.Red)
    Cairo.Stroke
 
  ' TEXTE 
    Cairo.Source = Cairo.ColorPattern(Color.DarkBlue) 
    Cairo.Font.Name = "Arial"
    Cairo.Font.Size = 100
    Cairo.Font.Bold = True
 
    Print "FONT"
    Print "--------------------------------"
    Print "Ascent = ", PointsToMM(Cairo.Font.Extents.Ascent)
    Print "Descent = ", PointsToMM(Cairo.Font.Extents.Descent)
    Print "Height = ", PointsToMM(Cairo.Font.Extents.Height)
    Print "H = ", PointsToMM(Cairo.Font.Extents.Ascent) + PointsToMM(Cairo.Font.Extents.Descent)
    Print "MaxXAdvance = ", PointsToMM(Cairo.Font.Extents.MaxXAdvance) 
    Print "MaxYAdvance = ", PointsToMM(Cairo.Font.Extents.MaxYAdvance)
 
    Cairo.MoveTo(MMToPoints(0), MMToPoints(50))
    Cairo.DrawText("Ärger")
  Cairo.End
 
  PDFSurface.Finish()
  Desktop.Open(sPfadPDFDatei)
 
End ' GeneratePDF
 
Private Function MMToPoints(Value As Float) As Float
  Return Value * 2.83527
End ' MMToPoints(..)
 
Private Function PointsToMM(Value As Float) As Float
  Return Value * 0.3527
End ' MMToPoints(..)
 
Private Sub Line(Xa As Float, Ya As Float, Xe As Float, Ye As Float, fWidth As Float, Optional fDash As Float[], Optional cColor As Integer)
' Farbige Linie von Punkt A nach Punkte E - A(xa|ya), E(xe|ye) - Angaben in Millimetern!
  Cairo.MoveTo(MMToPoints(Xa), MMToPoints(Ya))
  Cairo.LineTo(MMToPoints(Xe), MMToPoints(Ye))
  Cairo.Source = Cairo.ColorPattern(cColor)
  Cairo.LineWidth = fWidth
  Cairo.Dash = fDash
  Cairo.Stroke()
  Cairo.Dash = Null
End ' Line(..)

Mit dem o.a. Quelltext-Ausschnitt ergeben sich diese Ausgaben (gerundet und mit der Einheit Millimeter versehen) in der Konsole der IDE:

FONT
--------------------------------
Ascent      =  31,93 mm
Descent     =  7,48 mm
Height      =  40,56 mm
H           =  39,40 mm
Height - H  =  1,16 mm
MaxXAdvance =  70,54 mm
MaxYAdvance =  0 mm

Kommentar:

Download