Лично я бы использовал
$horizontalAlign = (0x07 & ord($data[$pos+10])) >> 0;
вместо
$horizontalAlign = ord($data[$pos+10]) & 3;
потому что вы можете более точно сопоставить маску (0x07) с определением спецификации
Используя тот же принцип, вертикальное выравнивание - это биты 6-4, маска 0x70, поэтому
$verticalAlign = (0x70 & ord($data[$pos+10])) >> 4;
switch ($verticalAlign) {
case 0:
// VERTICAL_TOP
break;
case 1:
// VERTICAL_CENTER
break;
case 2:
// VERTICAL_BOTTOM
break;
case 3:
// VERTICAL_JUSTIFY
break;
case 4:
// VERTICAL_DISTRIBUTED
break;
}
PS. Почему вы все еще используете частичную спецификацию Open Office, когда Microsoft опубликовала полную спецификацию