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
`(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
`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 <FF00> 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`