I check my font's encoding (the font's type is OpenType Font), the result is below :
PostScript name: HiraKakuProN-W3
Available code pages:
encoding[0] = 1252 Latin 1
encoding[1] = 1251 Cyrillic
encoding[2] = 1253 Greek
encoding[3] = 932 JIS/Japan
Then, creat font by code :
Font f = new Font(BaseFont.createFont("hirafont.otf", "Identity-V", BaseFont.EMBEDDED));
Except "Identity-V" and "Identity-H", i can't use other cmaps such as ("UniJISX0213-UTF32-H/V ...").
And in this font i see many glyphs which is displayed in rotation of 90 degrees. How to map char in unicode to char's glyph which is rotation in font?
Example : '〔 ' (0x3014 12308 LEFT TORTOISE SHELL BRACKET) map with index 9265 in font
---------update code--------
PdfEncodings.loadCmap("UniJISX0213-UTF32-V", PdfEncodings.CRLF_CID_NEWLINE);
String temp = "a";
byte[] text = temp.getBytes("Shift_JIS");
String cid = PdfEncodings.convertCmap("UniJISX0213-UTF32-V", text);
BaseFont bf = BaseFont.createFont("hiraginoFont.otf",BaseFont.IDENTITY_V, BaseFont.EMBEDDED);
Paragraph p = new Paragraph(cid, new Font(bf, 14));
I had to dig into my first book to find a reference to what you're asking. A long time ago, we used to distribute the following jar: itext-asiancmaps.jar.
This jar is not to be confused with itext-asian.jar which is used for CJK fonts.
It took me a while to find a copy of that jar. You'll find it in this old ZIP file: extrajars-2.1.zip
According to my first book (written in 2005-2006), you can use this jar for encodings that are not supported by the CMaps in itext-asian.jar
It is used like this:
PdfEncodings.loadCmap("GBK2K-H", PdfEncodings.CRLF_CID_NEWLINE);
byte[] text = my_GB_encoded_text;
String cid = PdfEncodings.convertCmap("GBK2K-H", text);
BaseFont bf = BaseFont.createFont("STSong-Light",
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Paragraph p = new Paragraph(cid, new Font(bf, 14));
document.add(p);
As you know BaseFont.IDENTITY_H
and BaseFont.IDENTITY_V
are the horizontal and vertical identity mappings for 2-byte CIDs. The PdfEncodings
class can convert a String
in a specific encoding to a String
with 2-byte CIDs. In this case, the original String
was encoded in the GB 18030-2000; we needed to convert this to another String
so that iText could use the IDENTITY_H
encoding.
In my first book, I wrote: "I insert this sample for the sake of completeness. In the past three years, only a handful of people have posted questions about this." By the time I wrote my second book (2009-2010), nobody was asking about this functionality, so I dropped distributing the jar with the cmaps and the example didn't make the second book.
I am now reviving this old example in the hope that it is useful. I tested it once in 2005 or 2006, and it worked back then. I can't guarantee that it still works today.