c#从右向左打印

c#从右向左打印,c#,.net,printing,arabic,C#,.net,Printing,Arabic,我正在处理一些阿拉伯语数据,我想从右向左打印 我试过这个 StringFormat format = new StringFormat(StringFormatFlags.DirectionRightToLeft); e.Graphics.DrawString(dataToPrint, valueFont, System.Drawing.Brushes.Black, 20, 20, format); 但是这使得文本仍然从左边开始,并且它使得更糟糕,所以现在我看不

我正在处理一些阿拉伯语数据,我想从右向左打印

我试过这个

StringFormat format = new StringFormat(StringFormatFlags.DirectionRightToLeft);
                e.Graphics.DrawString(dataToPrint, valueFont, System.Drawing.Brushes.Black, 20, 20, format);
但是这使得文本仍然从左边开始,并且它使得更糟糕,所以现在我看不到所有文本,如下所示:

但是当我删除
格式时,我得到了以下信息:

我需要与第二张图像完全相同,但从右到左

需要帮忙吗

更新1 这就是我如何填充
dataToPrint
对象的方法

 System.Drawing.Font valueFont = new System.Drawing.Font("Arial", 15, System.Drawing.FontStyle.Regular);
                string dataToPrint = "";
                dataToPrint += "رقم بطاقة التسويق = " + farmID.Text + Environment.NewLine;
                dataToPrint += "إسم صاخب المزرعة = " + farmOwner.Text + Environment.NewLine;
                dataToPrint += "رقم المزرعة = " + farmNumber.Text + Environment.NewLine;
                dataToPrint += "الموبايل = " + farmMobile.Text + Environment.NewLine;
                dataToPrint += "الإمارة = " + emaraNameArabic.Text + Environment.NewLine;
                dataToPrint += "المنطقة = " + areaNameArabic.Text + Environment.NewLine;
                dataToPrint += "الإقليم = " + regionNameArabic.Text + Environment.NewLine;
                dataToPrint += "مركز الإستلام = " + receivingCenterName.Text + Environment.NewLine;
                dataToPrint += "خلاص = " + khalas.Text + Environment.NewLine;
                dataToPrint += "فرض = " + fardh.Text + Environment.NewLine;
                dataToPrint += "لولو = " + otherLulu.Text + Environment.NewLine;
                dataToPrint += " خنيزي= " + khedrawi.Text + Environment.NewLine;
                dataToPrint += "بومعان = " + boumaan.Text + Environment.NewLine;
                dataToPrint += "برحي = " + barhi.Text + Environment.NewLine;
                dataToPrint += "جش خزمة = " + jeshKharma.Text + Environment.NewLine;
                dataToPrint += "رزيز = " + reziz.Text + Environment.NewLine;
                dataToPrint += "جبري = " + jabri.Text + Environment.NewLine;
                dataToPrint += "عنبرة المدينة = " + anbaretAlMadina.Text + Environment.NewLine;
                dataToPrint += " شيشي= " + shishi.Text + Environment.NewLine;
                dataToPrint += "دباس = " + dabbas.Text + Environment.NewLine;
                dataToPrint += "نبتة سيف = " + nabtetSaif.Text + Environment.NewLine;
                dataToPrint += "خضراوي = " + khedrawi.Text + Environment.NewLine;
                dataToPrint += "هلالي = " + hilali.Text + Environment.NewLine;
                dataToPrint += "مكتومي = " + maktoumy.Text + Environment.NewLine;
                dataToPrint += "نميشي = " + namishi.Text + Environment.NewLine;
更新2 回答后,我将20改为400,这是结果,仍然不是从右到左


两个代码都是正确的,但问题是X位置使用了20个像素。X指定从左上角开始的位置。尝试以下方法:

 e.Graphics.DrawString(dataToPrint, valueFont, 
        System.Drawing.Brushes.Black, 200, 20, format);

您也可以使用任何其他大于20像素的数字。

绘制RTL时,您应该明确R的位置。使用接受矩形参数的重载。混合使用西方和阿拉伯字形也有同样的问题,如果你不明确,让操作系统决定哪些部分应该是LTR,哪些部分应该是RTL,那么可能会发生意外,特别是标点符号。在应该是LTR的文本之前使用“\u200e”,对于RTL使用“\u200f”。@HansPassant
dataToPrint
变量有许多字符串,其中一些是阿拉伯语,一些是英语,每个字符串都有envirnt.newline,因此我可以转到新行。你能告诉我你的unicode放在哪里吗?在my
DataTopPrint
的开头?否,它需要插入到字符串中,无论阿拉伯语或西文文本从何处开始。显然,您需要对字符串内容有足够的了解才能正确执行此操作。@HansPassant我希望所有字符串都是从右到左的,我不知道任何文本是从左到右的。我会尽量给你更多code@HansPassant我更新了问题,请检查,所有值都以阿拉伯语开头现在看起来更好了,但内容仍然是从左到右,而不是从右到左。我明白了吗?如果你愿意的话,我可以给你看结果,如果可能的话,好的,所有的线都从右边对齐,就像第一张图片一样。你只需要尝试更大的数字就可以在右边找到一个位置。如果这不是你想要的,那你想要什么?!!也许如果我尝试使用更大的数字,比如10000,而用户使用较小的页面大小,内容将不会显示,对吗?当然,在PDF中,视图将以不同的大小进行更改,但如果您将文本以100%的大小对齐,则用户可以以100%的大小看到与您相同的内容。所以我不这么认为,但如果你想确定,我想知道结果,你可以在另一台电脑上试试。