com.lowagie.text.pdf

## Class CJKFont

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

-      class CJKFont
      extends BaseFont

  Creates a CJK font compatible with the fonts in the Adobe Asian font Pack.
  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
    --- | ---
    `(package private) static java.util.Hashtable` | `allCMaps`
    `(package private) static java.util.Hashtable` | `allFonts`
    `private static int` | `BRACKET`
    `private boolean` | `cidDirect`
    `(package private) static java.lang.String` | `CJK_ENCODING` The encoding used in the PDF document for CJK fonts
    `(package private) static java.util.Properties` | `cjkEncodings`
    `(package private) static java.util.Properties` | `cjkFonts`
    `private java.lang.String` | `CMap` The CMap name associated with this font
    `private static int` | `FIRST`
    `private java.util.HashMap` | `fontDesc`
    `private java.lang.String` | `fontName` The font name
    `private IntHashtable` | `hMetrics`
    `private static boolean` | `propertiesLoaded`
    `private static int` | `SERIAL`
    `private java.lang.String` | `style` The style modifier
    `private char[]` | `translationMap`
    `private static int` | `V1Y`
    `private boolean` | `vertical`
    `private IntHashtable` | `vMetrics`

    - ### 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
    `CJKFont(java.lang.String fontName, java.lang.String enc, boolean emb)` Creates a CJK font.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `charExists(int c)` Checks if a character exists in this font.
    `(package private) static java.lang.String` | `convertToHCIDMetrics(int[] keys, IntHashtable h)`
    `(package private) static java.lang.String` | `convertToVCIDMetrics(int[] keys, IntHashtable v, IntHashtable h)`
    `(package private) static IntHashtable` | `createMetric(java.lang.String s)`
    `java.lang.String[][]` | `getAllNameEntries()` Gets all the entries of the names-table.
    `private float` | `getBBox(int idx)`
    `int[]` | `getCharBBox(int c)` Gets the smallest box enclosing the character contours.
    `int` | `getCidCode(int c)` Gets the CID code given an Unicode.
    `private PdfDictionary` | `getCIDFont(PdfIndirectReference fontDescriptor, IntHashtable cjkTag)`
    `private float` | `getDescNumber(java.lang.String name)`
    `java.lang.String[][]` | `getFamilyFontName()` Gets the family name of the font.
    `private PdfDictionary` | `getFontBaseType(PdfIndirectReference CIDFont)`
    `private PdfDictionary` | `getFontDescriptor()`
    `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()` You can't get the FontStream of a CJK font (CJK fonts are never embedded), so this method always returns null.
    `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` | `getUnicodeEquivalent(int c)` Gets the Unicode equivalent to a CID.
    `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.
    `static boolean` | `isCJKFont(java.lang.String fontName, java.lang.String enc)` Checks if its a valid CJK font.
    `private static void` | `loadProperties()`
    `(package private) static char[]` | `readCMap(java.lang.String name)`
    `(package private) static java.util.HashMap` | `readFontProperties(java.lang.String name)`
    `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, convertToBytes, convertToBytes, correctArabicAdvance, createEncoding, createFont, createFont, createFont, createFont, createFont, createFont, createFont, createSubsetPrefix, enumerateTTCNames, enumerateTTCNames, getAllFontNames, getAllNameEntries, getAscent, getAscentPoint, getBaseName, getCodePagesSupported, getCompressionLevel, getDescent, getDescentPoint, getDifferences, getDocumentFonts, getDocumentFonts, getEncoding, getFontType, getFullFontName, getResourceStream, getResourceStream, getUnicodeDifferences, getUnicodeDifferences, 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

    - #### CJK_ENCODING

          static final java.lang.String CJK_ENCODING

      The encoding used in the PDF document for CJK fonts
      See Also:
        Constant Field Values

    - #### FIRST

          private static final int FIRST

      See Also:
        Constant Field Values

    - #### BRACKET

          private static final int BRACKET

      See Also:
        Constant Field Values

    - #### SERIAL

          private static final int SERIAL

      See Also:
        Constant Field Values

    - #### V1Y

          private static final int V1Y

      See Also:
        Constant Field Values

    - #### cjkFonts

          static java.util.Properties cjkFonts

    - #### cjkEncodings

          static java.util.Properties cjkEncodings

    - #### allCMaps

          static java.util.Hashtable allCMaps

    - #### allFonts

          static java.util.Hashtable allFonts

    - #### propertiesLoaded

          private static boolean propertiesLoaded

    - #### fontName

          private java.lang.String fontName

      The font name

    - #### style

          private java.lang.String style

      The style modifier

    - #### CMap

          private java.lang.String CMap

      The CMap name associated with this font

    - #### cidDirect

          private boolean cidDirect

    - #### translationMap

          private char[] translationMap

    - #### vMetrics

          private IntHashtable vMetrics

    - #### hMetrics

          private IntHashtable hMetrics

    - #### fontDesc

          private java.util.HashMap fontDesc

    - #### vertical

          private boolean vertical

  - ### Constructor Detail

    - #### CJKFont

          CJKFont(java.lang.String fontName,
                 java.lang.String enc,
                 boolean emb)
            throws DocumentException

      Creates a CJK font.
      Parameters:
        `fontName` - the name of the font
        `enc` - the encoding of the font
        `emb` - always `false`. CJK font and not embedded
      Throws:
        `DocumentException` - on error

  - ### Method Detail

    - #### loadProperties

          private static void loadProperties()

    - #### isCJKFont

          public static boolean isCJKFont(java.lang.String fontName,
                          java.lang.String enc)

      Checks if its a valid CJK font.
      Parameters:
        `fontName` - the font name
        `enc` - the encoding
      Returns:
        `true` if it is CJK font

    - #### getWidth

          public int getWidth(int char1)

      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

    - #### 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

    - #### 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

    - #### getFontDescriptor

          private PdfDictionary getFontDescriptor()

    - #### getCIDFont

          private PdfDictionary getCIDFont(PdfIndirectReference fontDescriptor,
                                 IntHashtable cjkTag)

    - #### getFontBaseType

          private PdfDictionary getFontBaseType(PdfIndirectReference CIDFont)

    - #### 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()

      You can't get the FontStream of a CJK font (CJK fonts are never embedded), so this method always returns null.
      Specified by:
        `getFullFontStream` in class `BaseFont`
      Returns:
        null
      Since:
        2.1.3

    - #### getDescNumber

          private float getDescNumber(java.lang.String name)

    - #### getBBox

          private float getBBox(int idx)

    - #### getFontDescriptor

          public float getFontDescriptor(int key,
                                float fontSize)

      Gets the font parameter identified by `key`. Valid values for `key` are `ASCENT`, `CAPHEIGHT`, `DESCENT` and `ITALICANGLE`.
      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()

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

    - #### readCMap

          static char[] readCMap(java.lang.String name)

    - #### createMetric

          static IntHashtable createMetric(java.lang.String s)

    - #### convertToHCIDMetrics

          static java.lang.String convertToHCIDMetrics(int[] keys,
                                              IntHashtable h)

    - #### convertToVCIDMetrics

          static java.lang.String convertToVCIDMetrics(int[] keys,
                                              IntHashtable v,
                                              IntHashtable h)

    - #### readFontProperties

          static java.util.HashMap readFontProperties(java.lang.String name)

    - #### getUnicodeEquivalent

          public int getUnicodeEquivalent(int c)

      Description copied from class: `BaseFont`
      Gets the Unicode equivalent to a CID. The (inexistent) CID is translated as '\n'. It has only meaning with CJK fonts with Identity encoding.
      Overrides:
        `getUnicodeEquivalent` in class `BaseFont`
      Parameters:
        `c` - the CID code
      Returns:
        the Unicode equivalent

    - #### getCidCode

          public int getCidCode(int c)

      Description copied from class: `BaseFont`
      Gets the CID code given an Unicode. It has only meaning with CJK fonts.
      Overrides:
        `getCidCode` in class `BaseFont`
      Parameters:
        `c` - the Unicode
      Returns:
        the CID equivalent

    - #### hasKernPairs

          public boolean hasKernPairs()

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

    - #### charExists

          public boolean charExists(int c)

      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)

      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. Will always return `false`

    - #### 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)

      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

    - #### 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`

    - #### getRawCharBBox

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

      Specified by:
        `getRawCharBBox` in class `BaseFont`