--- poppler/Annot.cc | 28 +++++++++++++++++++++++++--- poppler/CharCodeToUnicode.cc | 2 +- 2 files changed, 26 insertions(+), 4 deletions(-) --- a/poppler/Annot.cc +++ b/poppler/Annot.cc @@ -2918,10 +2918,31 @@ static GfxFont * createAnnotDrawFont(XRe { Ref dummyRef = { -1, -1 }; - Object baseFontObj, subtypeObj, encodingObj; + Object baseFontObj, subtypeObj, cid0subtypeObj, registryObj, orderingObj, encodingObj; baseFontObj.initName("Helvetica"); subtypeObj.initName("Type0"); - encodingObj.initName("WinAnsiEncoding"); + cid0subtypeObj.initName("CIDFontType0"); + registryObj.initString(new GooString("Adobe")); + orderingObj.initString(new GooString("Identity")); + encodingObj.initName("Identity-H"); + + Object cidSysInfoObj; + Dict *cidSysInfoDict = new Dict(xref); + cidSysInfoDict->decRef(); + cidSysInfoDict->add(copyString("Registry"), ®istryObj); + cidSysInfoDict->add(copyString("Ordering"), &orderingObj); + cidSysInfoObj.initDict(cidSysInfoDict); + + Object cid0DictObj; + Dict *cid0Dict = new Dict(xref); + cid0Dict->decRef(); + cid0Dict->add(copyString("Subtype"), &cid0subtypeObj); + cid0Dict->add(copyString("CIDSystemInfo"), &cidSysInfoObj); + cid0DictObj.initDict(cid0Dict); + + Object cid0ArrayObj; + cid0ArrayObj.initArray(xref); + cid0ArrayObj.arrayAdd(&cid0DictObj); Object fontDictObj; Dict *fontDict = new Dict(xref); @@ -2929,6 +2950,7 @@ static GfxFont * createAnnotDrawFont(XRe fontDict->add(copyString("BaseFont"), &baseFontObj); fontDict->add(copyString("Subtype"), &subtypeObj); fontDict->add(copyString("Encoding"), &encodingObj); + fontDict->add(copyString("DescendantFonts"), &cid0ArrayObj); fontDictObj.initDict(fontDict); Object fontsDictObj; @@ -4087,7 +4109,7 @@ void Annot::layoutText(GooString *text, // This assumes an identity CMap. outBuf->append((uChar >> 8) & 0xff); outBuf->append(uChar & 0xff); - } else if (ccToUnicode->mapToCharCode(&uChar, &c, 1)) { + } else if (ccToUnicode->mapToCharCode(&uChar, &c, 2)) { ccToUnicode->decRefCnt(); if (font->isCIDFont()) { // TODO: This assumes an identity CMap. It should be extended to --- a/poppler/CharCodeToUnicode.cc +++ b/poppler/CharCodeToUnicode.cc @@ -633,7 +633,7 @@ int CharCodeToUnicode::mapToUnicode(Char int CharCodeToUnicode::mapToCharCode(Unicode* u, CharCode *c, int usize) { //look for charcode in map - if (usize == 1) { + if (usize == 1 || (usize > 1 && !(*u & ~0xff))) { if (isIdentity) { *c = (CharCode) *u; return 1;