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.
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:
| 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
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.

