[debian-users 00718] Re: Okularあるいはpopplerでの注釈の日本語が表示されない

Wataru Nakanishi watayan @ meigaku.ac.jp
2021年 3月 28日 (日) 23:06:37 JST


中西です。とりあえず一区切りついたという報告です。

ちゃんとやる方法がわからなかったので,とりあえず日本語文字を入れても表示
がおかしくならない力づくのパッチで対応しました。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;
-- 
名古屋高等学校教諭 中西渉 <watayan @ meigaku.ac.jp>


debian-users メーリングリストの案内