com.lowagie.text.pdf

## Class Type3Font

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

-     public class Type3Font
      extends BaseFont

  A class to support Type3 fonts.

- - ### 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 java.util.HashMap` | `char2glyph`
    `private boolean` | `colorized`
    `private float` | `llx`
    `private float` | `lly`
    `private PageResources` | `pageResources`
    `private float` | `urx`
    `private float` | `ury`
    `private boolean[]` | `usedSlot`
    `private IntHashtable` | `widths3`
    `private PdfWriter` | `writer`

    - ### 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
    `Type3Font(PdfWriter writer, boolean colorized)` Creates a Type3 font.
    `Type3Font(PdfWriter writer, char[] chars, boolean colorized)` Creates a Type3 font.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `charExists(int c)` Checks if a character exists in this font.
    `(package private) byte[]` | `convertToBytes(int char1)` Converts a `char` to a byte array according to the font's encoding.
    `(package private) byte[]` | `convertToBytes(java.lang.String text)` Converts a `String` to a byte array according to the font's encoding.
    `PdfContentByte` | `defineGlyph(char c, float wx, float llx, float lly, float urx, float ury)` Defines a glyph.
    `java.lang.String[][]` | `getAllNameEntries()` Gets all the entries of the names-table.
    `int[]` | `getCharBBox(int c)` Gets the smallest box enclosing the character contours.
    `java.lang.String[][]` | `getFamilyFontName()` Gets the family name of the font.
    `float` | `getFontDescriptor(int key, float fontSize)` Gets the font parameter identified by `key`.
    `java.lang.String[][]` | `getFullFontName()` Gets the full name of the font.
    `PdfStream` | `getFullFontStream()` Always returns null, because you can't get the FontStream of a Type3 font.
    `int` | `getKerning(int char1, int char2)` Gets the kerning between two Unicode chars.
    `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 Unicode char `c` or the `name`.
    `int` | `getWidth(int char1)` Gets the width of a `char` in normalized 1000 units.
    `int` | `getWidth(java.lang.String text)` Gets the width of a `String` in normalized 1000 units.
    `boolean` | `hasKernPairs()` Checks if the font has any kerning pairs.
    `boolean` | `setCharAdvance(int c, int advance)` Sets the character advance.
    `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, correctArabicAdvance, createEncoding, createFont, createFont, createFont, createFont, createFont, createFont, createFont, createSubsetPrefix, enumerateTTCNames, enumerateTTCNames, getAllFontNames, getAllNameEntries, getAscent, getAscentPoint, getBaseName, getCidCode, getCodePagesSupported, getCompressionLevel, getDescent, getDescentPoint, getDifferences, getDocumentFonts, getDocumentFonts, getEncoding, getFontType, getFullFontName, getResourceStream, getResourceStream, getUnicodeDifferences, getUnicodeDifferences, getUnicodeEquivalent, getWidthPoint, getWidthPoint, getWidthPointKerned, getWidths, isDirectTextToByte, isEmbedded, isFontSpecific, isForceWidthsOutput, isSubset, normalizeEncoding, setCompressionLevel, setDirectTextToByte, setForceWidthsOutput, setSubset`

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

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

- - ### Field Detail

    - #### usedSlot

          private boolean[] usedSlot

    - #### widths3

          private IntHashtable widths3

    - #### char2glyph

          private java.util.HashMap char2glyph

    - #### writer

          private PdfWriter writer

    - #### llx

          private float llx

    - #### lly

          private float lly

    - #### urx

          private float urx

    - #### ury

          private float ury

    - #### pageResources

          private PageResources pageResources

    - #### colorized

          private boolean colorized

  - ### Constructor Detail

    - #### Type3Font

          public Type3Font(PdfWriter writer,
                   char[] chars,
                   boolean colorized)

      Creates a Type3 font.
      Parameters:
        `writer` - the writer
        `chars` - an array of chars corresponding to the glyphs used (not used, present for compatibility only)
        `colorized` - if `true` the font may specify color, if `false` no color commands are allowed and only images as masks can be used

    - #### Type3Font

          public Type3Font(PdfWriter writer,
                   boolean colorized)

      Creates a Type3 font. This implementation assumes that the /FontMatrix is [0.001 0 0 0.001 0 0] or a 1000-unit glyph coordinate system.

      An example:

           Document document = new Document(PageSize.A4);
           PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("type3.pdf"));
           document.open();
           Type3Font t3 = new Type3Font(writer, false);
           PdfContentByte g = t3.defineGlyph('a', 1000, 0, 0, 750, 750);
           g.rectangle(0, 0, 750, 750);
           g.fill();
           g = t3.defineGlyph('b', 1000, 0, 0, 750, 750);
           g.moveTo(0, 0);
           g.lineTo(375, 750);
           g.lineTo(750, 0);
           g.fill();
           Font f = new Font(t3, 12);
           document.add(new Paragraph("ababab", f));
           document.close();

      Parameters:
        `writer` - the writer
        `colorized` - if `true` the font may specify color, if `false` no color commands are allowed and only images as masks can be used

  - ### Method Detail

    - #### defineGlyph

          public PdfContentByte defineGlyph(char c,
                                   float wx,
                                   float llx,
                                   float lly,
                                   float urx,
                                   float ury)

      Defines a glyph. If the character was already defined it will return the same content
      Parameters:
        `c` - the character to match this glyph.
        `wx` - the advance this character will have
        `llx` - the X lower left corner of the glyph bounding box. If the `colorize` option is `true` the value is ignored
        `lly` - the Y lower left corner of the glyph bounding box. If the `colorize` option is `true` the value is ignored
        `urx` - the X upper right corner of the glyph bounding box. If the `colorize` option is `true` the value is ignored
        `ury` - the Y upper right corner of the glyph bounding box. If the `colorize` option is `true` the value is ignored
      Returns:
        a content where the glyph can be defined

    - #### getFamilyFontName

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

      Description copied from class: `BaseFont`
      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

    - #### getFontDescriptor

          public float getFontDescriptor(int key,
                                float fontSize)

      Description copied from class: `BaseFont`
      Gets the font parameter identified by `key`. Valid values for `key` are `ASCENT`, `AWT_ASCENT`, `CAPHEIGHT`, `DESCENT`, `AWT_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

    - #### getFullFontName

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

      Description copied from class: `BaseFont`
      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()

      Description copied from class: `BaseFont`
      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
      Since:
        2.0.8

    - #### getKerning

          public int getKerning(int char1,
                       int char2)

      Description copied from class: `BaseFont`
      Gets the kerning between two Unicode chars.
      Specified by:
        `getKerning` in class `BaseFont`
      Parameters:
        `char1` - the first char
        `char2` - the second char
      Returns:
        the kerning to be applied in normalized 1000 units

    - #### getPostscriptFontName

          public java.lang.String getPostscriptFontName()

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

    - #### getRawCharBBox

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

      Specified by:
        `getRawCharBBox` in class `BaseFont`

    - #### getRawWidth

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

      Description copied from class: `BaseFont`
      Gets the width from the font according to the Unicode char `c` or the `name`. If the `name` is null it's a symbolic font.
      Specified by:
        `getRawWidth` in class `BaseFont`
      Parameters:
        `c` - the unicode char
        `name` - the glyph name
      Returns:
        the width of the char

    - #### hasKernPairs

          public boolean hasKernPairs()

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

    - #### setKerning

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

      Description copied from class: `BaseFont`
      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

    - #### setPostscriptFontName

          public void setPostscriptFontName(java.lang.String name)

      Description copied from class: `BaseFont`
      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

    - #### writeFont

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

      Description copied from class: `BaseFont`
      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:
        `DocumentException` - error in generating the object
        `java.io.IOException` - on error

    - #### getFullFontStream

          public PdfStream getFullFontStream()

      Always returns null, because you can't get the FontStream of a Type3 font.
      Specified by:
        `getFullFontStream` in class `BaseFont`
      Returns:
        null
      Since:
        2.1.3

    - #### convertToBytes

          byte[] convertToBytes(java.lang.String text)

      Description copied from class: `BaseFont`
      Converts a `String` to a byte array according to the font's encoding.
      Overrides:
        `convertToBytes` in class `BaseFont`
      Parameters:
        `text` - the `String` to be converted
      Returns:
        an array of `byte` representing the conversion according to the font's encoding

    - #### convertToBytes

          byte[] convertToBytes(int char1)

      Description copied from class: `BaseFont`
      Converts a `char` to a byte array according to the font's encoding.
      Overrides:
        `convertToBytes` in class `BaseFont`
      Parameters:
        `char1` - the `char` to be converted
      Returns:
        an array of `byte` representing the conversion according to the font's encoding

    - #### getWidth

          public int getWidth(int char1)

      Description copied from class: `BaseFont`
      Gets the width of a `char` in normalized 1000 units.
      Overrides:
        `getWidth` in class `BaseFont`
      Parameters:
        `char1` - the unicode `char` to get the width of
      Returns:
        the width in normalized 1000 units

    - #### getWidth

          public int getWidth(java.lang.String text)

      Description copied from class: `BaseFont`
      Gets the width of a `String` in normalized 1000 units.
      Overrides:
        `getWidth` in class `BaseFont`
      Parameters:
        `text` - the `String` to get the width of
      Returns:
        the width in normalized 1000 units

    - #### getCharBBox

          public int[] getCharBBox(int c)

      Description copied from class: `BaseFont`
      Gets the smallest box enclosing the character contours. It will return `null` if the font has not the information or the character has no contours, as in the case of the space, for example. Characters with no contours may also return [0,0,0,0].
      Overrides:
        `getCharBBox` in class `BaseFont`
      Parameters:
        `c` - the character to get the contour bounding box from
      Returns:
        an array of four floats with the bounding box in the format [llx,lly,urx,ury] or `null`

    - #### charExists

          public boolean charExists(int c)

      Description copied from class: `BaseFont`
      Checks if a character exists in this font.
      Overrides:
        `charExists` in class `BaseFont`
      Parameters:
        `c` - the character to check
      Returns:
        `true` if the character has a glyph, `false` otherwise

    - #### setCharAdvance

          public boolean setCharAdvance(int c,
                               int advance)

      Description copied from class: `BaseFont`
      Sets the character advance.
      Overrides:
        `setCharAdvance` in class `BaseFont`
      Parameters:
        `c` - the character
        `advance` - the character advance normalized to 1000 units
      Returns:
        `true` if the advance was set, `false` otherwise