中西です。とりあえず一区切りついたという報告です。
ちゃんとやる方法がわからなかったので,とりあえず日本語文字を入れても表示 がおかしくならない力づくのパッチで対応しました。633とか意味不明な即値が あるのが気持ち悪いですが,それを求める方法がわからないからこんなことをし ているのでした。
--- poppler-0.71.0.orig/poppler/Annot.cc +++ poppler-0.71.0/poppler/Annot.cc @@ -2668,7 +2668,22 @@ static GfxFont * createAnnotDrawFont(XRe Dict *fontDict = new Dict(xref); fontDict->add("BaseFont", Object(objName, fontname)); fontDict->add("Subtype", Object(objName, "Type0")); - fontDict->add("Encoding", Object(objName, "WinAnsiEncoding")); + fontDict->add("Encoding", Object(objName, "Identity-H")); + Dict *subfontDict = new Dict(xref); + subfontDict->add("Subtype", Object(objName, "CIDFontType0")); + Dict *cidSystemInfo = new Dict(xref); + cidSystemInfo->add("Registry", Object(new GooString("Adobe"))); + cidSystemInfo->add("Ordering", Object(new GooString("Japan1"))); + subfontDict->add("CIDSystemInfo", Object(cidSystemInfo)); + Array *widthArray = new Array(xref); + widthArray->add(Object(0)); + widthArray->add(Object(632)); + widthArray->add(Object(500)); + subfontDict->add("W",Object(widthArray)); + subfontDict->add("DW", Object(1000)); + Array *descArray = new Array(xref); + descArray->add(Object(subfontDict)); + fontDict->add("DescendantFonts", Object(descArray));
Dict *fontsDict = new Dict(xref); fontsDict->add(resourceName, Object(fontDict)); @@ -2769,7 +2784,7 @@ void AnnotFreeText::generateFreeTextAppe
// Set font state appearBuilder.setDrawColor(da.getFontColor(), true); - appearBuilder.appendf ("BT 1 0 0 1 {0:.2f} {1:.2f} Tm\n", textmargin, height - textmargin - da.getFontPtSize() * font->getDescent()); + appearBuilder.appendf ("BT 1 0 0 1 {0:.2f} {1:.2f} Tm\n", textmargin, height - 2 * textmargin - da.getFontPtSize() * font->getDescent()); appearBuilder.setTextFont(da.getFontName(), da.getFontPtSize());
int i = 0; --- poppler-0.71.0.orig/poppler/CharCodeToUnicode.cc +++ poppler-0.71.0/poppler/CharCodeToUnicode.cc @@ -616,6 +616,8 @@ int CharCodeToUnicode::mapToCharCode(Uni return 1; } } + if(*u == 0x0020){*c = 1; return 1;} + if(*u == 0x3000){*c = 633; return 1;} *c = 'x'; } else { int i, j;