com.itextpdf.text.pdf
Class CJKFont

java.lang.Object
  extended by com.itextpdf.text.pdf.BaseFont
      extended by com.itextpdf.text.pdf.CJKFont

 class CJKFont
extends BaseFont

Creates a CJK font compatible with the fonts in the Adobe Asian font Pack.

Author:
Paulo Soares

Nested Class Summary
 
Nested classes/interfaces inherited from class com.itextpdf.text.pdf.BaseFont
BaseFont.StreamFont
 
Field Summary
(package private) static Hashtable<String,char[]> allCMaps
           
(package private) static Hashtable<String,HashMap<String,Object>> allFonts
           
private static int BRACKET
           
private  boolean cidDirect
           
(package private) static String CJK_ENCODING
          The encoding used in the PDF document for CJK fonts
(package private) static Properties cjkEncodings
           
(package private) static Properties cjkFonts
           
private  String CMap
          The CMap name associated with this font
private static int FIRST
           
private  HashMap<String,Object> fontDesc
           
private  String fontName
          The font name
private  IntHashtable hMetrics
           
private static boolean propertiesLoaded
           
private static int SERIAL
           
private  String style
          The style modifier
private  char[] translationMap
           
private static int V1Y
           
private  boolean vertical
           
private  IntHashtable vMetrics
           
 
Fields inherited from class com.itextpdf.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
CJKFont(String fontName, String enc, boolean emb)
          Creates a CJK font.
 
Method Summary
 boolean charExists(int c)
          Checks if a character exists in this font.
(package private) static String convertToHCIDMetrics(int[] keys, IntHashtable h)
           
(package private) static String convertToVCIDMetrics(int[] keys, IntHashtable v, IntHashtable h)
           
(package private) static IntHashtable createMetric(String s)
           
 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(String name)
           
 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.
 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.
 String getPostscriptFontName()
          Gets the postscript font name.
protected  int[] getRawCharBBox(int c, String name)
           
(package private)  int getRawWidth(int c, 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(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(String fontName, String enc)
          Checks if its a valid CJK font.
private static void loadProperties()
           
(package private) static char[] readCMap(String name)
           
(package private) static HashMap<String,Object> readFontProperties(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(String name)
          Sets the font name that will appear in the pdf font dictionary.
(package private)  void writeFont(PdfWriter writer, PdfIndirectReference ref, Object[] params)
          Outputs to the writer the font dictionaries and streams.
 
Methods inherited from class com.itextpdf.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 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 Properties cjkFonts

cjkEncodings

static Properties cjkEncodings

allCMaps

static Hashtable<String,char[]> allCMaps

allFonts

static Hashtable<String,HashMap<String,Object>> allFonts

propertiesLoaded

private static boolean propertiesLoaded

fontName

private String fontName
The font name


style

private String style
The style modifier


CMap

private 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 HashMap<String,Object> fontDesc

vertical

private boolean vertical
Constructor Detail

CJKFont

CJKFont(String fontName,
        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(String fontName,
                                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(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,
                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,
               Object[] params)
         throws DocumentException,
                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
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(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 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 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 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 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(String name)

createMetric

static IntHashtable createMetric(String s)

convertToHCIDMetrics

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

convertToVCIDMetrics

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

readFontProperties

static HashMap<String,Object> readFontProperties(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(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,
                               String name)
Specified by:
getRawCharBBox in class BaseFont

Hosted by Hostbasket