com.lowagie.text.pdf

## Class Type1Font

- java.lang.Object
- - com.lowagie.text.pdf.BaseFont
  - - com.lowagie.text.pdf.Type1Font

-      class Type1Font
      extends BaseFont

  Reads a Type1 font
  Author:
    Paulo Soares (psoares@consiste.pt)

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class com.lowagie.text.pdf.BaseFont

      `BaseFont.StreamFont`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private int` | `Ascender` A variable.
    `private boolean` | `builtinFont` `true` if this font is one of the 14 built in fonts.
    `private int` | `CapHeight` A variable.
    `private java.lang.String` | `CharacterSet` The character set of the font.
    `private java.util.HashMap` | `CharMetrics` Represents the section CharMetrics in the AFM file.
    `private int` | `Descender` A variable.
    `private java.lang.String` | `EncodingScheme` The font's encoding name.
    `private java.lang.String` | `FamilyName` The family name of the font.
    `private java.lang.String` | `fileName` The file in use.
    `private java.lang.String` | `FontName` The Postscript font name.
    `private java.lang.String` | `FullName` The full name of the font.
    `private boolean` | `IsFixedPitch` `true` if all the characters have the same width.
    `private float` | `ItalicAngle` The italic angle of the font, usually 0.0 or negative.
    `private java.util.HashMap` | `KernPairs` Represents the section KernPairs in the AFM file.
    `private int` | `llx` The llx of the FontBox.
    `private int` | `lly` The lly of the FontBox.
    `protected byte[]` | `pfb` The PFB file if the input was made with a `byte` array.
    `private static int[]` | `PFB_TYPES` Types of records in a PFB file.
    `private static FontsResourceAnchor` | `resourceAnchor`
    `private int` | `StdHW` A variable.
    `private int` | `StdVW` A variable.
    `private int` | `UnderlinePosition` The underline position.
    `private int` | `UnderlineThickness` The underline thickness.
    `private int` | `urx` The lurx of the FontBox.
    `private int` | `ury` The ury of the FontBox.
    `private java.lang.String` | `Weight` The weight of the font: normal, bold, etc.
    `private int` | `XHeight` A variable.

    - ### Fields inherited from class com.lowagie.text.pdf.BaseFont

      `ASCENT, AWT_ASCENT, AWT_DESCENT, AWT_LEADING, AWT_MAXADVANCE, BBOXLLX, BBOXLLY, BBOXURX, BBOXURY, BuiltinFonts14, CACHED, CAPHEIGHT, CHAR_RANGE_ARABIC, CHAR_RANGE_CYRILLIC, CHAR_RANGE_HEBREW, CHAR_RANGE_LATIN, charBBoxes, CID_NEWLINE, compressionLevel, COURIER, COURIER_BOLD, COURIER_BOLDOBLIQUE, COURIER_OBLIQUE, CP1250, CP1252, CP1257, DESCENT, differences, directTextToByte, embedded, EMBEDDED, encoding, fastWinansi, FONT_TYPE_CJK, FONT_TYPE_DOCUMENT, FONT_TYPE_T1, FONT_TYPE_T3, FONT_TYPE_TT, FONT_TYPE_TTUNI, fontCache, fontSpecific, fontType, forceWidthsOutput, HELVETICA, HELVETICA_BOLD, HELVETICA_BOLDOBLIQUE, HELVETICA_OBLIQUE, IDENTITY_H, IDENTITY_V, ITALICANGLE, MACROMAN, NOT_CACHED, NOT_EMBEDDED, notdef, RESOURCE_PATH, specialMap, STRIKETHROUGH_POSITION, STRIKETHROUGH_THICKNESS, SUBSCRIPT_OFFSET, SUBSCRIPT_SIZE, subset, subsetRanges, SUPERSCRIPT_OFFSET, SUPERSCRIPT_SIZE, SYMBOL, TIMES_BOLD, TIMES_BOLDITALIC, TIMES_ITALIC, TIMES_ROMAN, UNDERLINE_POSITION, UNDERLINE_THICKNESS, unicodeDifferences, widths, WINANSI, ZAPFDINGBATS`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `Type1Font(java.lang.String afmFile, java.lang.String enc, boolean emb, byte[] ttfAfm, byte[] pfb, boolean forceRead)` Creates a new Type1 font.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.lang.String[][]` | `getAllNameEntries()` Gets all the entries of the names-table.
    `java.lang.String[][]` | `getFamilyFontName()` Gets the family name of the font.
    `private PdfDictionary` | `getFontBaseType(PdfIndirectReference fontDescriptor, int firstChar, int lastChar, byte[] shortTag)` Generates the font dictionary for this font.
    `float` | `getFontDescriptor(int key, float fontSize)` Gets the font parameter identified by `key`.
    `private PdfDictionary` | `getFontDescriptor(PdfIndirectReference fontStream)` Generates the font descriptor for this font or `null` if it is one of the 14 built in fonts.
    `java.lang.String[][]` | `getFullFontName()` Gets the full name of the font.
    `PdfStream` | `getFullFontStream()` If the embedded flag is `false` or if the font is one of the 14 built in types, it returns `null`, otherwise the font is read and output in a PdfStream object.
    `int` | `getKerning(int char1, int char2)` Gets the kerning between two Unicode characters.
    `java.lang.String` | `getPostscriptFontName()` Gets the postscript font name.
    `protected int[]` | `getRawCharBBox(int c, java.lang.String name)`
    `(package private) int` | `getRawWidth(int c, java.lang.String name)` Gets the width from the font according to the `name` or, if the `name` is null, meaning it is a symbolic font, the char `c`.
    `boolean` | `hasKernPairs()` Checks if the font has any kerning pairs.
    `void` | `process(RandomAccessFileOrArray rf)` Reads the font metrics
    `boolean` | `setKerning(int char1, int char2, int kern)` Sets the kerning between two Unicode chars.
    `void` | `setPostscriptFontName(java.lang.String name)` Sets the font name that will appear in the pdf font dictionary.
    `(package private) void` | `writeFont(PdfWriter writer, PdfIndirectReference ref, java.lang.Object[] params)` Outputs to the writer the font dictionaries and streams.

    - ### Methods inherited from class com.lowagie.text.pdf.BaseFont

      `addSubsetRange, charExists, convertToBytes, convertToBytes, correctArabicAdvance, createEncoding, createFont, createFont, createFont, createFont, createFont, createFont, createFont, createSubsetPrefix, enumerateTTCNames, enumerateTTCNames, getAllFontNames, getAllNameEntries, getAscent, getAscentPoint, getBaseName, getCharBBox, getCidCode, getCodePagesSupported, getCompressionLevel, getDescent, getDescentPoint, getDifferences, getDocumentFonts, getDocumentFonts, getEncoding, getFontType, getFullFontName, getResourceStream, getResourceStream, getUnicodeDifferences, getUnicodeDifferences, getUnicodeEquivalent, getWidth, getWidth, getWidthPoint, getWidthPoint, getWidthPointKerned, getWidths, isDirectTextToByte, isEmbedded, isFontSpecific, isForceWidthsOutput, isSubset, normalizeEncoding, setCharAdvance, setCompressionLevel, setDirectTextToByte, setForceWidthsOutput, setSubset`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### resourceAnchor

          private static FontsResourceAnchor resourceAnchor

    - #### pfb

          protected byte[] pfb

      The PFB file if the input was made with a `byte` array.

    - #### FontName

          private java.lang.String FontName

      The Postscript font name.

    - #### FullName

          private java.lang.String FullName

      The full name of the font.

    - #### FamilyName

          private java.lang.String FamilyName

      The family name of the font.

    - #### Weight

          private java.lang.String Weight

      The weight of the font: normal, bold, etc.

    - #### ItalicAngle

          private float ItalicAngle

      The italic angle of the font, usually 0.0 or negative.

    - #### IsFixedPitch

          private boolean IsFixedPitch

      `true` if all the characters have the same width.

    - #### CharacterSet

          private java.lang.String CharacterSet

      The character set of the font.

    - #### llx

          private int llx

      The llx of the FontBox.

    - #### lly

          private int lly

      The lly of the FontBox.

    - #### urx

          private int urx

      The lurx of the FontBox.

    - #### ury

          private int ury

      The ury of the FontBox.

    - #### UnderlinePosition

          private int UnderlinePosition

      The underline position.

    - #### UnderlineThickness

          private int UnderlineThickness

      The underline thickness.

    - #### EncodingScheme

          private java.lang.String EncodingScheme

      The font's encoding name. This encoding is 'StandardEncoding' or 'AdobeStandardEncoding' for a font that can be totally encoded according to the characters names. For all other names the font is treated as symbolic.

    - #### CapHeight

          private int CapHeight

      A variable.

    - #### XHeight

          private int XHeight

      A variable.

    - #### Ascender

          private int Ascender

      A variable.

    - #### Descender

          private int Descender

      A variable.

    - #### StdHW

          private int StdHW

      A variable.

    - #### StdVW

          private int StdVW

      A variable.

    - #### CharMetrics

          private java.util.HashMap CharMetrics

      Represents the section CharMetrics in the AFM file. Each value of this array contains a `Object[4]` with an Integer, Integer, String and int[]. This is the code, width, name and char bbox. The key is the name of the char and also an Integer with the char number.

    - #### KernPairs

          private java.util.HashMap KernPairs

      Represents the section KernPairs in the AFM file. The key is the name of the first character and the value is a `Object[]` with 2 elements for each kern pair. Position 0 is the name of the second character and position 1 is the kerning distance. This is repeated for all the pairs.

    - #### fileName

          private java.lang.String fileName

      The file in use.

    - #### builtinFont

          private boolean builtinFont

      `true` if this font is one of the 14 built in fonts.

    - #### PFB_TYPES

          private static final int[] PFB_TYPES

      Types of records in a PFB file. ASCII is 1 and BINARY is 2. They have to appear in the PFB file in this sequence.

  - ### Constructor Detail

    - #### Type1Font

          Type1Font(java.lang.String afmFile,
                   java.lang.String enc,
                   boolean emb,
                   byte[] ttfAfm,
                   byte[] pfb,
                   boolean forceRead)
              throws DocumentException,
                     java.io.IOException

      Creates a new Type1 font.
      Parameters:
        `ttfAfm` - the AFM file if the input is made with a `byte` array
        `pfb` - the PFB file if the input is made with a `byte` array
        `afmFile` - the name of one of the 14 built-in fonts or the location of an AFM file. The file must end in '.afm'
        `enc` - the encoding to be applied to this font
        `emb` - true if the font is to be embedded in the PDF
      Throws:
        `DocumentException` - the AFM file is invalid
        `java.io.IOException` - the AFM file could not be read
      Since:
        2.1.5

  - ### Method Detail

    - #### getRawWidth

          int getRawWidth(int c,
                        java.lang.String name)

      Gets the width from the font according to the `name` or, if the `name` is null, meaning it is a symbolic font, the char `c`.
      Specified by:
        `getRawWidth` in class `BaseFont`
      Parameters:
        `c` - the char if the font is symbolic
        `name` - the glyph name
      Returns:
        the width of the char

    - #### getKerning

          public int getKerning(int char1,
                       int char2)

      Gets the kerning between two Unicode characters. The characters are converted to names and this names are used to find the kerning pairs in the `HashMap` `KernPairs`.
      Specified by:
        `getKerning` in class `BaseFont`
      Parameters:
        `char1` - the first char
        `char2` - the second char
      Returns:
        the kerning to be applied

    - #### process

          public void process(RandomAccessFileOrArray rf)
                       throws DocumentException,
                              java.io.IOException

      Reads the font metrics
      Parameters:
        `rf` - the AFM file
      Throws:
        `DocumentException` - the AFM file is invalid
        `java.io.IOException` - the AFM file could not be read

    - #### getFullFontStream

          public PdfStream getFullFontStream()
                                      throws DocumentException

      If the embedded flag is `false` or if the font is one of the 14 built in types, it returns `null`, otherwise the font is read and output in a PdfStream object.
      Specified by:
        `getFullFontStream` in class `BaseFont`
      Returns:
        the PdfStream containing the font or `null`
      Throws:
        `DocumentException` - if there is an error reading the font
      Since:
        2.1.3

    - #### getFontDescriptor

          private PdfDictionary getFontDescriptor(PdfIndirectReference fontStream)

      Generates the font descriptor for this font or `null` if it is one of the 14 built in fonts.
      Parameters:
        `fontStream` - the indirect reference to a PdfStream containing the font or `null`
      Returns:
        the PdfDictionary containing the font descriptor or `null`

    - #### getFontBaseType

          private PdfDictionary getFontBaseType(PdfIndirectReference fontDescriptor,
                                      int firstChar,
                                      int lastChar,
                                      byte[] shortTag)

      Generates the font dictionary for this font.
      Parameters:
        `firstChar` - the first valid character
        `lastChar` - the last valid character
        `shortTag` - a 256 bytes long `byte` array where each unused byte is represented by 0
        `fontDescriptor` - the indirect reference to a PdfDictionary containing the font descriptor or `null`
      Returns:
        the PdfDictionary containing the font dictionary

    - #### writeFont

          void writeFont(PdfWriter writer,
                       PdfIndirectReference ref,
                       java.lang.Object[] params)
                   throws DocumentException,
                          java.io.IOException

      Outputs to the writer the font dictionaries and streams.
      Specified by:
        `writeFont` in class `BaseFont`
      Parameters:
        `writer` - the writer for this document
        `ref` - the font indirect reference
        `params` - several parameters that depend on the font type
      Throws:
        `java.io.IOException` - on error
        `DocumentException` - error in generating the object

    - #### getFontDescriptor

          public float getFontDescriptor(int key,
                                float fontSize)

      Gets the font parameter identified by `key`. Valid values for `key` are `ASCENT`, `CAPHEIGHT`, `DESCENT`, `ITALICANGLE`, `BBOXLLX`, `BBOXLLY`, `BBOXURX` and `BBOXURY`.
      Specified by:
        `getFontDescriptor` in class `BaseFont`
      Parameters:
        `key` - the parameter to be extracted
        `fontSize` - the font size in points
      Returns:
        the parameter in points

    - #### getPostscriptFontName

          public java.lang.String getPostscriptFontName()

      Gets the postscript font name.
      Specified by:
        `getPostscriptFontName` in class `BaseFont`
      Returns:
        the postscript font name

    - #### getFullFontName

          public java.lang.String[][] getFullFontName()

      Gets the full name of the font. If it is a True Type font each array element will have {Platform ID, Platform Encoding ID, Language ID, font name}. The interpretation of this values can be found in the Open Type specification, chapter 2, in the 'name' table.
      For the other fonts the array has a single element with {"", "", "", font name}.
      Specified by:
        `getFullFontName` in class `BaseFont`
      Returns:
        the full name of the font

    - #### getAllNameEntries

          public java.lang.String[][] getAllNameEntries()

      Gets all the entries of the names-table. If it is a True Type font each array element will have {Name ID, Platform ID, Platform Encoding ID, Language ID, font name}. The interpretation of this values can be found in the Open Type specification, chapter 2, in the 'name' table.
      For the other fonts the array has a single element with {"4", "", "", "", font name}.
      Specified by:
        `getAllNameEntries` in class `BaseFont`
      Returns:
        the full name of the font

    - #### getFamilyFontName

          public java.lang.String[][] getFamilyFontName()

      Gets the family name of the font. If it is a True Type font each array element will have {Platform ID, Platform Encoding ID, Language ID, font name}. The interpretation of this values can be found in the Open Type specification, chapter 2, in the 'name' table.
      For the other fonts the array has a single element with {"", "", "", font name}.
      Specified by:
        `getFamilyFontName` in class `BaseFont`
      Returns:
        the family name of the font

    - #### hasKernPairs

          public boolean hasKernPairs()

      Checks if the font has any kerning pairs.
      Specified by:
        `hasKernPairs` in class `BaseFont`
      Returns:
        `true` if the font has any kerning pairs

    - #### setPostscriptFontName

          public void setPostscriptFontName(java.lang.String name)

      Sets the font name that will appear in the pdf font dictionary. Use with care as it can easily make a font unreadable if not embedded.
      Specified by:
        `setPostscriptFontName` in class `BaseFont`
      Parameters:
        `name` - the new font name

    - #### setKerning

          public boolean setKerning(int char1,
                           int char2,
                           int kern)

      Sets the kerning between two Unicode chars.
      Specified by:
        `setKerning` in class `BaseFont`
      Parameters:
        `char1` - the first char
        `char2` - the second char
        `kern` - the kerning to apply in normalized 1000 units
      Returns:
        `true` if the kerning was applied, `false` otherwise

    - #### getRawCharBBox

          protected int[] getRawCharBBox(int c,
                             java.lang.String name)

      Specified by:
        `getRawCharBBox` in class `BaseFont`