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.
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.
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:
Eigenschaft | Beschreibung |
---|---|
Ascent | Gibt 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. |
Descent | Gibt 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. |
Height | Gibt 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. |
MaxXAdvance | Liefert die maximale Distanz in der X-Richtung, um die der Ursprung für jede Glyphe in der Schrift vorgeschoben ist. |
MaxYAdvance | Liefert 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
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: