我检查字体的编码(字体的类型为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));
除了“ Identity-V”和“ Identity-H”外,我无法使用其他cmap,例如“ UniJISX0213-UTF32-H / V ...”。在这种字体中,我看到许多字形以90度旋转显示。如何将unicode中的char映射到char的字形(字体旋转)?
示例:字体为9265的'〔'(0x3014 12308 LEFT TORTOISE SHELL BRACKET)映射
---------更新代码--------
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));
我必须深入研究第一本书才能找到对您所问内容的参考。很久以前,我们曾经分发过以下jar:itext-asiancmaps.jar。请勿将此jar与用于CJK字体的itext-asian.jar混淆。
我花了一段时间才找到那个罐子的副本。您可以在以下旧的ZIP文件中找到它:extrajars-2.1.zip
根据我的第一本书(写于2005-2006年),您可以将此jar用于itext-asian.jar中CMap不支持的编码。
它的用法如下:
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
一个特定编码到String
具有2个字节的CID。在这种情况下,原始文件String
编码为GB 18030-2000;我们需要将其转换为另一个,String
以便iText可以使用IDENTITY_H
编码。
在第一本书中,我写道:“为了完整起见,我插入了此示例。在过去的三年中,只有少数人对此发表了疑问。” 当我写第二本书(2009-2010)时,没有人问过这个功能,因此我放弃了使用cmaps分发jar的示例,但该示例并没有成为第二本书。
我现在恢复这个旧示例,希望它有用。我在2005年或2006年对其进行了一次测试,然后就可以了。我不能保证它今天仍然可以使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句