Pdf/FileParser/Font/OpenType.php

Show: inherited
Table of Contents

Zend Framework

LICENSE

This source file is subject to the new BSD license that is bundled with this package in the file LICENSE.txt. It is also available through the world-wide-web at this URL: http://framework.zend.com/license/new-bsd If you did not receive a copy of the license and are unable to obtain it through the world-wide-web, please send an email to [email protected] so we can send you a copy immediately.

Category
Zend  
Copyright
Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)  
License
New BSD License  
Package
Zend_Pdf  
Subpackage
FileParser  
Version
$Id: OpenType.php 25197 2013-01-09 11:32:22Z frosch $  

\Zend_Pdf_FileParser_Font_OpenType

Package: Zend\Pdf\FileParser

Abstract base class for OpenType font file parsers.

TrueType was originally developed by Apple and was adopted as the default font format for the Microsoft Windows platform. OpenType is an extension of TrueType, developed jointly by Microsoft and Adobe, which adds support for PostScript font data.

This abstract parser class forms the foundation for concrete subclasses which extract either TrueType or PostScript font data from the file.

All OpenType files use big-endian byte ordering.

The full TrueType and OpenType specifications can be found at:

Parent(s)
\Zend_Pdf_FileParser_Font < \Zend_Pdf_FileParser
Children
\Zend_Pdf_FileParser_Font_OpenType_TrueType
Copyright
Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)  
License
New BSD License  

Constants

Constant  BYTE_ORDER_LITTLE_ENDIAN = 0
inherited

Little-endian byte order (0x04 0x03 0x02 0x01).

Inherited from: \Zend_Pdf_FileParser::BYTE_ORDER_LITTLE_ENDIAN\Zend_Pdf_FileParser_Font::BYTE_ORDER_LITTLE_ENDIAN
Constant  BYTE_ORDER_BIG_ENDIAN = 1
inherited

Big-endian byte order (0x01 0x02 0x03 0x04).

Inherited from: \Zend_Pdf_FileParser::BYTE_ORDER_BIG_ENDIAN\Zend_Pdf_FileParser_Font::BYTE_ORDER_BIG_ENDIAN

Properties

Propertyprotected\Zend_Pdf_FileParserDataSource $_dataSource = null
inherited

Object representing the data source to be parsed.

Inherited from: \Zend_Pdf_FileParser::$$_dataSource\Zend_Pdf_FileParser_Font::$$_dataSource
Default valuenullDetails
Type
\Zend_Pdf_FileParserDataSource
Inherited_from
\Zend_Pdf_FileParser::$$_dataSource  
Inherited_from
\Zend_Pdf_FileParser_Font::$$_dataSource  
Propertyprivateboolean $_debug = false
inherited

Flag indicating whether or not debug logging is active.

Inherited from: \Zend_Pdf_FileParser_Font::$$_debug
Default valuefalseDetails
Type
boolean
Inherited_from
\Zend_Pdf_FileParser_Font::$$_debug  
Propertyprivatearray $_fontProperties = array()
inherited

Array of parsed font properties.

Inherited from: \Zend_Pdf_FileParser_Font::$$_fontProperties

Used with __get() and __set().

Default valuearray()Details
Type
array
Inherited_from
\Zend_Pdf_FileParser_Font::$$_fontProperties  
Propertyprotectedboolean $_isParsed = false
inherited

Flag indicating that the file has been sucessfully parsed.

Inherited from: \Zend_Pdf_FileParser::$$_isParsed\Zend_Pdf_FileParser_Font::$$_isParsed
Default valuefalseDetails
Type
boolean
Inherited_from
\Zend_Pdf_FileParser::$$_isParsed  
Inherited_from
\Zend_Pdf_FileParser_Font::$$_isParsed  
Propertyprotectedboolean $_isScreened = false
inherited

Flag indicating that the file has passed a cursory validation check.

Inherited from: \Zend_Pdf_FileParser::$$_isScreened\Zend_Pdf_FileParser_Font::$$_isScreened
Default valuefalseDetails
Type
boolean
Inherited_from
\Zend_Pdf_FileParser::$$_isScreened  
Inherited_from
\Zend_Pdf_FileParser_Font::$$_isScreened  
Propertyprotectedinteger $_scalerType = 0

Stores the scaler type (font type) for the font file.

Default value0Details
Type
integer
Propertyprotectedarray $_tableDirectory = array()

Stores the byte offsets to the various information tables.

Default valuearray()Details
Type
array

Methods

methodpublic__construct(\Zend_Pdf_FileParserDataSource $dataSource) : void
inherited

Object constructor.

Inherited from: \Zend_Pdf_FileParser_Font::__construct()

Validates the data source and enables debug logging if so configured.

Parameters
Name Type Description
$dataSource \Zend_Pdf_FileParserDataSource
Throws
Exception Description
\Zend_Pdf_Exception
methodpublic__destruct() : void

Discards the data source object.

methodpublic__get(string $property) : mixed
inherited

Get handler

Inherited from: \Zend_Pdf_FileParser_Font::__get()
Parameters
Name Type Description
$property string
Returns
Type Description
mixed
methodpublic__set(string $property, mixed $value) : void
inherited

Set handler

Inherited from: \Zend_Pdf_FileParser_Font::__set()

NOTE: This method is protected. Other classes may freely interrogate the font properties, but only this and its subclasses may set them.

Parameters
Name Type Description
$property string
$value mixed
methodprotected_debugLog(string $message) : void
inherited

If debug logging is enabled, writes the log message.

Inherited from: \Zend_Pdf_FileParser_Font::_debugLog()

The log message is a sprintf() style string and any number of arguments may accompany it as additional parameters.

Parameters
Name Type Description
$message string
methodprotected_jumpToTable(string $tableName) : void

Validates a given table's existence, then sets the file pointer to the start of that table.

Parameters
Name Type Description
$tableName string
Throws
Exception Description
\Zend_Pdf_Exception
methodprotected_languageCodeForPlatform(integer $platformID,  $languageID) : string

Utility method that returns ISO 639 two-letter language codes from the TrueType platform and language ID.

Returns NULL for languages that are not supported.

Parameters
Name Type Description
$platformID integer
$languageID
Returns
Type Description
string | null
methodprotected_parseCmapTable() : void

Parses the OpenType cmap (Character to Glyph Mapping) table.

The cmap table provides the maps from character codes to font glyphs. There are usually at least two character maps in a font: Microsoft Unicode and Macintosh Roman. For very complex fonts, there may also be mappings for the characters in the Unicode Surrogates Area, which are UCS-4 characters.

Throws
Exception Description
\Zend_Pdf_Exception
Details
Todo
Need to rework the selection logic for picking a subtable. We should have an explicit list of preferences, followed by a list of those that are tolerable. Most specifically, since everything above this layer deals in Unicode, we need to be sure to only accept format 0 MacRoman tables.  
methodprotected_parseHeadTable() : void

Parses the OpenType head (Font Header) table.

The head table contains global information about the font such as the revision number and global metrics.

Throws
Exception Description
\Zend_Pdf_Exception
methodprotected_parseHheaTable() : void

Parses the OpenType hhea (Horizontal Header) table.

The hhea table contains information used for horizontal layout. It also contains some vertical layout information for Apple systems. The vertical layout information for the PDF file is usually taken from the OS/2 table.

Throws
Exception Description
\Zend_Pdf_Exception
methodprotected_parseHmtxTable() : void

Parses the OpenType hmtx (Horizontal Metrics) table.

The hmtx table contains the horizontal metrics for every glyph contained within the font. These are the critical values for horizontal layout of text.

Throws
Exception Description
\Zend_Pdf_Exception
methodprotected_parseMaxpTable() : void

Parses the OpenType hhea (Horizontal Header) table.

The hhea table contains information used for horizontal layout. It also contains some vertical layout information for Apple systems. The vertical layout information for the PDF file is usually taken from the OS/2 table.

Throws
Exception Description
\Zend_Pdf_Exception
methodprotected_parseNameTable() : void

Parses the OpenType name (Naming) table.

The name table contains all of the identifying strings associated with the font such as its name, copyright, trademark, license, etc.

Throws
Exception Description
\Zend_Pdf_Exception
methodprotected_parseOs2Table() : void

Parses the OpenType OS/2 (OS/2 and Windows Metrics) table.

The OS/2 table contains additional metrics data that is required to use the font on the OS/2 or Microsoft Windows platforms. It is not required for Macintosh fonts, so may not always be present. When available, we use this table to determine most of the vertical layout and stylistic information and for the font.

Throws
Exception Description
\Zend_Pdf_Exception
methodprotected_parsePostTable() : void

Parses the OpenType post (PostScript Information) table.

The post table contains additional information required for using the font on PostScript printers. It also contains the preferred location and thickness for an underline, which is used by our layout code.

Throws
Exception Description
\Zend_Pdf_Exception
methodprotected_parseTableDirectory() : void

Parses the OpenType table directory.

The table directory contains the identifier, checksum, byte offset, and length of each of the information tables housed in the font file.

Throws
Exception Description
\Zend_Pdf_Exception
methodprotected_readScalerType() : integer

Reads the scaler type from the header of the OpenType font file and returns it as an unsigned long integer.

The scaler type defines the type of font: OpenType font files may contain TrueType or PostScript outlines. Throws an exception if the scaler type is not recognized.

Returns
Type Description
integer
Throws
Exception Description
\Zend_Pdf_Exception
methodprotected_readTableVersion(float $minVersion,  $maxVersion) : float

Reads the fixed 16.16 table version number and checks for compatibility.

If the version is incompatible, throws an exception. If it is compatible, returns the version number.

Parameters
Name Type Description
$minVersion float

Minimum compatible version number.

$maxVersion
Returns
Type Description
float Table version number.
Throws
Exception Description
\Zend_Pdf_Exception
methodpublicgetDataSource() : \Zend_Pdf_FileParserDataSource
inherited

Returns the data source object representing the file being parsed.

Inherited from: \Zend_Pdf_FileParser::getDataSource()\Zend_Pdf_FileParser_Font::getDataSource()
Returns
Type Description
\Zend_Pdf_FileParserDataSource
methodpublicgetSize() : void
methodpublicisBitSet(integer $bit, integer $bitField) : boolean
inherited

Returns true if the specified bit is set in the integer bitfield.

Inherited from: \Zend_Pdf_FileParser::isBitSet()\Zend_Pdf_FileParser_Font::isBitSet()
Parameters
Name Type Description
$bit integer

Bit number to test (i.e. - 0-31)

$bitField integer
Returns
Type Description
boolean
methodpublicisParsed() : boolean
inherited

Returns true if the file has been successfully parsed.

Inherited from: \Zend_Pdf_FileParser::isParsed()\Zend_Pdf_FileParser_Font::isParsed()
Returns
Type Description
boolean
methodpublicisScreened() : boolean
inherited

Returns true if the file has passed a cursory validation check.

Inherited from: \Zend_Pdf_FileParser::isScreened()\Zend_Pdf_FileParser_Font::isScreened()
Returns
Type Description
boolean
methodpublicmoveToOffset(integer $offset) : void
inherited

Convenience wrapper for the data source object's moveToOffset() method.

Inherited from: \Zend_Pdf_FileParser::moveToOffset()\Zend_Pdf_FileParser_Font::moveToOffset()
Parameters
Name Type Description
$offset integer

Destination byte offset.

Throws
Exception Description
\Zend_Pdf_Exception
methodpublicparse() : void

Reads and parses the font data from the file on disk.

NOTE: This method should be overridden in subclasses to add type- specific parsing and set $this->isParsed.

Throws
Exception Description
\Zend_Pdf_Exception
methodpublicreadBytes(integer $byteCount) : string
inherited

Convenience wrapper for the data source object's readBytes() method.

Inherited from: \Zend_Pdf_FileParser::readBytes()\Zend_Pdf_FileParser_Font::readBytes()
Parameters
Name Type Description
$byteCount integer

Number of bytes to read.

Returns
Type Description
string
Throws
Exception Description
\Zend_Pdf_Exception
methodpublicreadFixed(integer $mantissaBits, integer $fractionBits, integer $byteOrder = \Zend_Pdf_FileParser::BYTE_ORDER_BIG_ENDIAN) : float
inherited

Reads the signed fixed-point number from the binary file at the current byte offset.

Inherited from: \Zend_Pdf_FileParser::readFixed()\Zend_Pdf_FileParser_Font::readFixed()

Common fixed-point sizes are 2.14 and 16.16.

Advances the offset by the number of bytes read. Throws an exception if an error occurs.

Parameters
Name Type Description
$mantissaBits integer

Number of bits in the mantissa

$fractionBits integer

Number of bits in the fraction

$byteOrder integer

(optional) Big- or little-endian byte order. Use the BYTE_ORDER_ constants defined in {@link Zend_Pdf_FileParser}. If omitted, uses big-endian.

Returns
Type Description
float
Throws
Exception Description
\Zend_Pdf_Exception
methodpublicreadInt(integer $size, integer $byteOrder = \Zend_Pdf_FileParser::BYTE_ORDER_BIG_ENDIAN) : integer
inherited

Reads the signed integer value from the binary file at the current byte offset.

Inherited from: \Zend_Pdf_FileParser::readInt()\Zend_Pdf_FileParser_Font::readInt()

Advances the offset by the number of bytes read. Throws an exception if an error occurs.

Parameters
Name Type Description
$size integer

Size of integer in bytes: 1-4

$byteOrder integer

(optional) Big- or little-endian byte order. Use the BYTE_ORDER_ constants defined in {@link Zend_Pdf_FileParser}. If omitted, uses big-endian.

Returns
Type Description
integer
Throws
Exception Description
\Zend_Pdf_Exception
methodpublicreadStringMacRoman(integer $byteCount, string $characterSet = '') : string
inherited

Reads the Mac Roman-encoded string from the binary file at the current offset location.

Inherited from: \Zend_Pdf_FileParser_Font::readStringMacRoman()

Overridden to fix return character set at UTF-16BE.

Parameters
Name Type Description
$byteCount integer

Number of bytes (characters) to return.

$characterSet string

(optional) --Ignored--

Returns
Type Description
string
Throws
Exception Description
\Zend_Pdf_Exception
methodpublicreadStringPascal(string $characterSet = '', integer $lengthBytes = 1) : string
inherited

Reads the Pascal string from the binary file at the current offset location.

Inherited from: \Zend_Pdf_FileParser_Font::readStringPascal()

Overridden to fix return character set at UTF-16BE.

Parameters
Name Type Description
$characterSet string

(optional) --Ignored--

$lengthBytes integer

(optional) Number of bytes that make up the length. Default is 1.

Returns
Type Description
string
Throws
Exception Description
\Zend_Pdf_Exception
methodpublicreadStringUTF16(integer $byteCount, integer $byteOrder = \Zend_Pdf_FileParser::BYTE_ORDER_BIG_ENDIAN, string $characterSet = '') : string
inherited

Reads the Unicode UTF-16-encoded string from the binary file at the current offset location.

Inherited from: \Zend_Pdf_FileParser_Font::readStringUTF16()

Overridden to fix return character set at UTF-16BE.

Parameters
Name Type Description
$byteCount integer

Number of bytes (characters * 2) to return.

$byteOrder integer

(optional) Big- or little-endian byte order. Use the BYTE_ORDER_ constants defined in {@link Zend_Pdf_FileParser}. If omitted, uses big-endian.

$characterSet string

(optional) --Ignored--

Returns
Type Description
string
Throws
Exception Description
\Zend_Pdf_Exception
methodpublicreadUInt(integer $size, integer $byteOrder = \Zend_Pdf_FileParser::BYTE_ORDER_BIG_ENDIAN) : integer
inherited

Reads the unsigned integer value from the binary file at the current byte offset.

Inherited from: \Zend_Pdf_FileParser::readUInt()\Zend_Pdf_FileParser_Font::readUInt()

Advances the offset by the number of bytes read. Throws an exception if an error occurs.

NOTE: If you ask for a 4-byte unsigned integer on a 32-bit machine, the resulting value WILL BE SIGNED because PHP uses signed integers internally for everything. To guarantee portability, be sure to use bitwise operators operators on large unsigned integers!

Parameters
Name Type Description
$size integer

Size of integer in bytes: 1-4

$byteOrder integer

(optional) Big- or little-endian byte order. Use the BYTE_ORDER_ constants defined in {@link Zend_Pdf_FileParser}. If omitted, uses big-endian.

Returns
Type Description
integer
Throws
Exception Description
\Zend_Pdf_Exception
methodpublicscreen() : void

Verifies that the font file is in the expected format.

NOTE: This method should be overridden in subclasses to check the specific format and set $this->_isScreened!

Throws
Exception Description
\Zend_Pdf_Exception
methodpublicskipBytes(integer $byteCount) : void
inherited

Convenience wrapper for the data source object's skipBytes() method.

Inherited from: \Zend_Pdf_FileParser::skipBytes()\Zend_Pdf_FileParser_Font::skipBytes()
Parameters
Name Type Description
$byteCount integer

Number of bytes to skip.

Throws
Exception Description
\Zend_Pdf_Exception
methodpublicwriteDebug() : void
inherited

Writes the entire font properties array to STDOUT.

Inherited from: \Zend_Pdf_FileParser_Font::writeDebug()

Used only for debugging.

Documentation was generated by phpDocumentor 2.0.0a8.