mPDF Manual – What Else Can I Do

# Line-height

The line-height of text can be controlled using the CSS property line-height (since mPDF 4). This used a fixed value for the line-height when normal was specified (the default CSS value) -  set by the configurable variable normalLineheight. It also used a fixed proportion to determine the position of the text baseline (non-configurable).

Form mPDF 6, you can (optionally) use font metrics derived from each font file to:

• Determine the height of a line when line-height is set to normal
• Determine the glyph baseline (previously a fixed value)

Options are set by configuration variables.

Default settings in mPDF versions ≥ 6.0 - recommended especially for complex scripts with marks used above or below characters:

<?php

$mpdf->useFixedNormalLineHeight = false;$mpdf->useFixedTextBaseline = false;
$mpdf->adjustFontDescLineheight = 1.14;  Settings to be backwards compatible with mPDF versions < 6: <?php$this->useFixedNormalLineHeight = true;
$this->useFixedTextBaseline = true;$this->normalLineheight = 1.33;



Using the font metrics will give approximately the same result as the fixed value for many standard Latin script fonts e.g. DejaVu Sans Condensed:

However, for some fonts the normal line-height using font metrics will be significantly taller, to account for the design of the font glyphs e.g. Khmer font:

For more information on how complex normal lineheights are, see Eric Meyer website: http://meyerweb.com/eric/thoughts/2008/05/06/line-height-abnormal/ and http://typophile.com/node/13081

## CSS control of line-height

From mPDF v 6.0 there are new controls for line-height using draft CSS3 properties. These can be set on all block level elements (P, DIV etc) and tables (TABLE/TD/TH).

line-stacking-strategy: inline-line-height|block-line-height|max-height|grid-height


Values:

• inline-line-height - [default] lineheight is initially calculated from the block-level font[-size]; the height is expanded by any inline content, including the calculated lineheight of that inline content;
• block-line-height - lineheight is fixed as the lineheight of the block-level font[-size];
• max-height - lineheight is initially calculated from the block-level font; the height is expanded by any inline content, EXCLUDING the calculated lineheight of that inline content;
• grid-height - lineheight is initially calculated from the block-level font; the height is expanded - as multiples of initial lineheight - by any inline content, EXCLUDING the calculated lineheight of that inline content;

Note: XSL has a similar property with the same name, which uses different but equivalent values: line-height instead of inline-line-height, font-height instead of block-line-height. It also uses max-height. The value grid-height is new to the CSS3 property.

line-stacking-shift: consider-shifts|disregard-shifts


This property determines whether to include or disregard the adjusted top- and bottom-edge of any characters that have a baseline-shift (e.g. superscript) when calculating lineheight.

Note: XSL has a similar property with a different name: line-height-shift-adjustment which uses the same values.

For more details see the CSS3 draft specification.

There are actually three possible metrics that can be used in a TrueType font file. The differences are summed up quite well in this article at http://typophile.com/node/13081. mPDF will by default use the usWinAscent and usWinDescent values to determine a ‘normal’ line-height, with two variations:

• if either the usWinAscent or usWinDescent are greater than the font bounding box (yMin yMax), then the values are reduced to equal the yMin/yMax values. NB this works as a fix with Myanmar Text (Windows 8 version) to give a line-height normal that is equivalent to that produced in browsers.
• if the USE_TYPO_METRICS bit is set on fsSelection (OS/2 table), this is telling the font to use the sTypo values and not the usWinAscent values. NB this works as a fix with Cambria Math font to give a normal line-height; at present, this is the only font I have found with this bit set; although note that MS WordPad and Windows FireFox browser use the big line-height from usWinAscent, whilst MS Word 2007 observes the fSelection value.

You can change the font metrics used by mPDF, by setting fontDescriptor configuration variable

• winTypo uses sTypoAscender etc from the OS/2 table and is the one officially recommended - BUT
• win use usWinAscent etc from OS/2 and in practice seems to be used most commonly in Windows environment; this is the default in mPDF;
• mac uses Ascender etc from hhea table, and may be used to give results consistent with a Mac/OSX environment.

Finally, you can override values for Ascent, Descent and Leading for any specific font, by setting font configuration variables.

<?php
"cambriamath" => array(
'R' => "cambria.ttc",
'useOTL' => 0xFF,
'TTCfontID' => array( 'R' => 2, ),
'Ascent' => 950,
'Descent' => -222,

Remember that line-height for a TABLE has a default value (1.2) set in the defaultCSS. configuration variable. This is left in for backwards compatability. You can change this value to ‘normal’ for results consistent with most browsers.
Line-height in a <textarea> is fixed and defined in \Mpdf\Form class (= 1.2)
Details of the font metrics can be seen by inspecting the temporary font files e.g. /ttfontdata/[fontname].mtx.php.