我检查了我的字体编码(字体的类型是OpenType字体),结果如下:
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
然后,按代码创建字体:
Font f = new Font(BaseFont.createFont("hirafont.otf", "Identity-V", BaseFont.EMBEDDED));
除了#34; Identity-V"和" Identity-H",我不能使用其他cmaps,例如(" UniJISX0213-UTF32-H / V ......")。 在这种字体中,我看到许多字形以90度的旋转显示。如何将unicode中的char映射到char的字形旋转字形?
示例:'〔' (0x3014 12308 LEFT TORTOISE SHELL BRACKET)地图索引9265 in font
---------更新代码--------
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));
答案 0 :(得分:0)
我不得不深入研究我的第一本书,找到你所问的内容。很久以前,我们曾经分发过以下jar: itext-asiancmaps.jar 。 不要将这个jar与用于CJK字体的itext-asian.jar混淆。
我花了一段时间才找到那个罐子的副本。您可以在旧的ZIP文件中找到它:extrajars-2.1.zip
根据我的第一本书(2005-2006编写),您可以将此jar用于itext-asian.jar中CMaps不支持的编码
它的用法如下:
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);
如您所知,BaseFont.IDENTITY_H
和BaseFont.IDENTITY_V
是2字节CID的水平和垂直标识映射。 PdfEncodings
类可以将特定编码中的String
转换为具有2字节CID的String
。在这种情况下,原始String
编码在GB 18030-2000中;我们需要将此转换为另一个String
,以便iText可以使用IDENTITY_H
编码。
在我的第一本书中,我写道:“为了完整起见,我插入了这个样本。在过去三年中,只有少数人发布了有关此问题的问题。”到时候我写了第二本书(2009-2010),没有人问过这个功能,所以我放弃了用cmaps分发jar,示例没有写第二本书。
我现在正在复兴这个老例子,希望它有用。我在2005年或2006年测试了一次,然后就可以了。我不能保证它今天仍然有效。