Benutzer-Werkzeuge

Webseiten-Werkzeuge


k25:k25.1.8:start

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:

  • Auch in diesem vorgestellten Beispiel werden die beiden Funktionen MMToPoints(Value As Float) und PointsToMM(Value As Float) eingesetzt.
  • Interessant ist die auftretende Differenz von etwa 1,2 Millimetern zwischen der Summe aus Ascent und Descent und dem Wert für die Höhe. Sie ergibt sich, weil die Höhe aus der Summe von Ascent, Descent und 'External Leading' berechnet wird.
  • 'External Leading' steht für den (veralteten) Begriff Durchschuss und bestimmt den minimalen Abstand von zwei Druckzeilen.
  • Wenn Sie die generierte PDF-Datei ausdrucken und für das Wort 'Ärger' die in der → Abbildung 25.1.8.1 angegebenen horizontalen, parallelen Linien einzeichnen und deren Differenzen zueinander messen, so erhalten Sie mit hinreichender Genauigkeit die Werte in der o.a. Übersicht.

Download

Die Website verwendet zwei temporäre Session-Cookies. Diese technisch notwendigen Cookies werden gelöscht, wenn der Web-Browser geschlossen wird! Informationen zu Cookies erhalten Sie in der Datenschutzerklärung.
k25/k25.1.8/start.txt · Zuletzt geändert: 02.02.2021 (Externe Bearbeitung)

Seiten-Werkzeuge