如何知道ctext与Itext中的字体兼容?

时间:2014-12-06 03:35:34

标签: pdf itext

我检查了我的字体编码(字体的类型是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));

1 个答案:

答案 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_HBaseFont.IDENTITY_V是2字节CID的水平和垂直标识映射。 PdfEncodings类可以将特定编码中的String转换为具有2字节CID的String。在这种情况下,原始String编码在GB 18030-2000中;我们需要将此转换为另一个String,以便iText可以使用IDENTITY_H编码。

在我的第一本书中,我写道:“为了完整起见,我插入了这个样本。在过去三年中,只有少数人发布了有关此问题的问题。”到时候我写了第二本书(2009-2010),没有人问过这个功能,所以我放弃了用cmaps分发jar,示例没有写第二本书。

我现在正在复兴这个老例子,希望它有用。我在2005年或2006年测试了一次,然后就可以了。我不能保证它今天仍然有效。