понедельник, 22 сентября 2014 г.

Печатаем текст вертикально снизу вверх.

Если у вас возникнет необходимость напечатать на странице вертикальный текст идущий снизу вверх, то вы будете не приятно удивлены. Такой возможности в .Net нет. Напечатать вертикальный текст сверху-вниз элементарно, это делается буквально в пару строк:

  
            StringFormat formatver = new StringFormat(StringFormatFlags.DirectionVertical);
            e.Graphics.DrawString("Проверка", this.Font, Brushes.Black, 0, 150, formatver);


В результате получаем вот такой текст (1). Напечатать же текст (2) не прибегая к разным ухищрениям невозможно.

В сети есть разные варианты решения этой проблемы в основном сводящиеся к вращению холста с помощью Graphics.Transform. Такое решение, конечно, имеет право на жизнь, но оно, как мне кажется, далеко не самое оптимальное.



Так что мной было придумано другое решение - нарисовать строку на другом изображении в памяти, а потом нарисовать его поверх основного повернутым так, как нам захочется. Делается все это, конечно, не в пару строк, но, по-моему, вполне несложно:
  
            //получаем размер изображения достаточный для отображения строки
            SizeF textImageSize = e.Graphics.MeasureString("ТЕСТ 112345678", this.Font);
            //создаем ихзображение
            Bitmap str = new Bitmap((int)textImageSize.Width + 10, (int)textImageSize.Height + 5);
            Graphics strgr = Graphics.FromImage(str);
            //рисуем строку
            strgr.DrawString("ТЕСТ 112345678", this.Font, Brushes.Black, 1, 1);            
            strgr.Save();
            //а потом поворачиваем на 270 градусов (так чтобы текст читался снизу вверх)
            str.RotateFlip(RotateFlipType.Rotate270FlipNone);
            //и рисуем на основно изображении
            e.Graphics.DrawImage(str, 0, 600, str.Width, str.Height);


Комментариев нет:

Отправить комментарий