Согласно MSDN: http://www.microsoft.com/middleeast/msdn/arabicsupp.aspx
Как GDI + поддерживает арабский язык?
GDI + поддерживает манипулирование арабским текстом, включая печать текста с порядком чтения RTL для обоих устройств вывода, экрана и принтера.Метод Graphics.DrawString рисует указанную текстовую строку в указанном месте x, y или в прямоугольнике (в соответствии с его перегрузкой) с указанными объектами Brush и Font с использованием атрибутов форматирования указанного объекта StringFormat.Объект StringFormat включает в себя информацию о расположении текста, такую как порядок чтения текста.
Таким образом, вы можете легко переместить исходный объект графического объекта в правую верхнюю часть вместо левой верхней, чтобы плавно печатать арабский текст в указанном месте на экране без необходимости вычислять местоположенияявно.
Хотя это верно при установке (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);
}
Как переместить исходный объект графического объекта в правую верхнюю часть вместо левой верхней, а при увеличении координации по Х продвигать точку печати влево, а не вправо.
PS: То, что я сейчас делаю, устанавливает отрицательную координацию X, чтобы заставить ее двигаться влево.