Intereting Posts
использование dll vb6 в настольном приложении .net для 64-битных окон 7 Как динамически загружать сборки в ядре dotnet Как удалить существующую заявку из ClaimsPrinciple? C # LINQ First () быстрее, чем ToArray () ? System.InvalidCastException при создании объекта, активированного клиентом, с использованием более старой версии интерфейса, определенного в сильной именованной сборке Как исправить ошибку Локальная обработка Исключение было необработанным при передаче параметра для отчета rdlc winform? В C #, конвертировать ulong в байт быстрее? Как байтовый массив, полученный от сокета, до структуры C # Сохранение полиморфных типов в службе WCF с использованием JSON Добавить существующую сборку в проект mvc 6 Автоматическая высота DataGridView – как настроить размер данных DataGridView? Одни и те же элементы в combobox, но сначала всегда выбираются C # Как изменить цвет фона TabControl.Header Почему цвет после Image.Clear (x) не совсем совпадает с цветом x? Как отформатировать отдельные элементы DropDownlist (цвет и т. Д.) Во время события onDataBinding

Печать справа налево в c #

Согласно msdn: http://www.microsoft.com/middleeast/msdn/arabicsupp.aspx

Как GDI + поддерживает арабский?

GDI + поддерживает обработку текста на арабском языке, включая текст печати с порядком считывания RTL для обоих устройств вывода, экрана и принтера. Метод Graphics.DrawString рисует указанную текстовую строку в указанном местоположении x, y или в прямоугольнике (в соответствии с его перегрузкой) с указанными объектами Brush и Font с использованием атрибутов форматирования указанного объекта StringFormat. Объект StringFormat включает в себя информацию о текстовом макете, такую ​​как порядок чтения текста.

Поэтому вы можете легко перенести начало графического объекта в Right-Top, а не в Left-Top, чтобы печатать текст в арабском тексте в указанном месте на экране плавно, без необходимости явного определения местоположений.

Хотя это верно при настройке координаты (X, Y) на (0,0), но если я хочу увеличить координацию X для печати в определенной области на бумаге, координация X будет увеличиваться с правой стороны листа, а не до слева, как предполагается, при печати вправо-влево; что означает печать за пределами бумаги. См. Эту демонстрацию:

static void Main(string[] args) { PrintDocument p = new PrintDocument(); p.PrintPage += new PrintPageEventHandler(PrintPage); p.Print(); } static void PrintPage(object sender, PrintPageEventArgs e) { string drawString = "إختبار الرسم"; SolidBrush drawBrush = new SolidBrush(Color.Black); Font drawFont = new System.Drawing.Font("Arail", 16); RectangleF recAtZero = new RectangleF(0, 0, e.PageBounds.Width, e.PageBounds.Height); StringFormat drawFormat = new StringFormat(); drawFormat.FormatFlags = StringFormatFlags.DirectionRightToLeft; e.Graphics.DrawString(drawString, drawFont, drawBrush, recAtZero, drawFormat); RectangleF recAtGreaterThantZero = new RectangleF(300, 0, e.PageBounds.Width, e.PageBounds.Height); e.Graphics.DrawString(drawString, drawFont, drawBrush, recAtGreaterThantZero, drawFormat); } 

Как перенести начало графического объекта в Right-Top вместо Left-Top, и при увеличении координаты X он перемещает точку печати влево, а не вправо.

PS: То, что я делаю сейчас, устанавливает координацию X на отрицательную, чтобы заставить ее двигаться влево. Простая диаграмма

Используйте StringFormatFlags.DirectionRightToLeft, например:

 StringFormat format = new StringFormat(StringFormatFlags.DirectionRightToLeft); e.Graphics.DrawString("سلام", this.Font, new SolidBrush(Color.Red), r1, format); 

Вы можете сделать очень простое преобразование координат:

 public static class CoordinateConverter { public static RectangleF Convert(RectangleF source, RectangleF drawArea) { // I assume drawArea.X to be 0 return new RectangleF( drawArea.Width - source.X - source.Width, source.Y, source.Width, source.Height); } public static RectangleF ConvertBack(Rectangle source, RectangleF drawArea) { return new RectangleF( source.X + source.Width - drawArea.Width, source.Y, source.Width, source.Height); } } 

Теперь каждый раз, когда вы хотите, чтобы что-то texty было нарисовано, вы можете использовать этот конвертер для изменения координат. Конечно, вы также можете отредактировать прямоугольник, чтобы вы не создавали новых. Но принцип остается прежним. Надеюсь, я правильно понял ваш вопрос.