Esempio n. 1
0
        private void SetAppropriateTextMatrix(UChar letter, float voffset, PdfContentByte cb)
        {
            var ytlm = MyYTLM;

            if (_isPsuedoVertical)
            {
                if (CC.Cl06(letter) ||
                    CC.Cl07(letter))
                {
                    //句読点を平行移動。
                    cb.SetTextMatrix(_xtlm + _fontSize * (1F / 2 + 1F / 8), ytlm + _fontSize * (1F / 2 + 1F / 8) + voffset);
                }
                else if (CC.Cl11(letter))
                {
                    //小書きの仮名を平行移動。
                    cb.SetTextMatrix(_xtlm + _fontSize / 8, ytlm + _fontSize / 8 + voffset);
                }
                else if (CC.Cl01(letter))
                {
                    //始め括弧を回転、平行移動
                    cb.SetTextMatrix(0F, -1F, 1F, 0F, _xtlm + _fontSize / 2, ytlm);
                }
                else if (letter.CodePoint == char.ConvertToUtf32("ー", 0))
                {
                    //音引きを回転、かつ左右反転
                    cb.SetTextMatrix(0F, -1F, -1F, 0F, _xtlm - _fontSize / 2, ytlm - _fontSize / 2);
                }
                else if (letter.CodePoint == char.ConvertToUtf32("—", 0)) //part of Cl08)
                {
                    //エムダッシュを回転
                    cb.SetTextMatrix(0F, -1F, 1F, 0F, _xtlm + _fontSize * (1F / 2F + 1 / 8F), ytlm - _fontSize / 2);
                }
                //TODO: 毎回 UString 作らない UChar[] で持つ。
                else if (
                    CC.Cl02(letter) ||
                    (new UString("―…‥").Contains(letter)) ||                     //part of Cl08
                    CC.Cl10(letter) ||
                    (new UString("~+±=-÷≠:;‘’“”<>≦≧_|→↓←↑⇒⇔").Contains(letter))) //その他転置すべき記号。よく使いそうなものだけ
                {
                    //それ以外の記号を回転
                    cb.SetTextMatrix(0F, -1F, 1F, 0F, _xtlm + _fontSize / 2, ytlm - _fontSize / 2);
                }
                else
                {
                    cb.SetTextMatrix(_xtlm, ytlm + voffset);
                }
            }
            else
            {
                cb.SetTextMatrix(_xtlm, ytlm + voffset);
            }
        }