问题描述
我在使用 printdocument 在 C# 中打印键入的阿拉伯字母时遇到问题。
这是我的代码:
PrintDocument pd;
PaperSize ps;
void pd_Factor(object sender,PrintPageEventArgs e)
{
Graphics g = e.Graphics;
Font vazir = new Font("Vazir Code FD",12,FontStyle.Regular);
SolidBrush sb = new SolidBrush(Color.Black);
string a = "سلام";
g.DrawString(a,vazir,sb,200,330);
}
private void btnDone_Click(object sender,EventArgs e)
{
PrintDocument pd = new PrintDocument();
PaperSize ps = new PaperSize("Factor",723,1024);
pd.PrintPage += new PrintPageEventHandler(pd_Factor);
pd.PrintController = new StandardPrintController();
pd.DefaultPageSettings.Margins.Left = 0;
pd.DefaultPageSettings.Margins.Right = 0;
pd.DefaultPageSettings.Margins.Top = 0;
pd.DefaultPageSettings.Margins.Bottom = 0;
pd.DefaultPageSettings.PaperSize = ps;
printDialog1.Document = pd;
if (printDialog1.ShowDialog() == DialogResult.OK)
{
try
{
pd.Print();
}
catch (Exception)
{
}
}
}
遗憾的是,上面的代码是这样打印的:
顺便说一下,我试过了
StringFormat format = new StringFormat();
format.FormatFlags = StringFormatFlags.DirectionRightToLeft;
g.DrawString(a,330,format);
所以,我自己想,我应该把它反过来:
string a = "سلام";
string b = "";
for (int i = a.Length - 1; i > -1; i--)
{
b += Convert.ToString(a[i]);
}
它看起来仍然有问题,但它变得更好了。
但是我尝试使用字符映射从左到右添加字符。
我的代码改为:
string a = "ﻡﺎﻠﺳ";
顺便说一下,我有一个输入,但我不知道文本是什么;所以,我不能为此使用字符映射。
我的问题是:如何正确打印?
注意:我使用的字体是this;不过我也尝试过使用 Tahoma,但问题仍然存在。
解决方法
看起来很奇怪,但神奇地解决了问题!
我尝试使用另一个名为“Print2Pdf”的应用程序进行测试,文本打印正确,可能是 Microsoft XPS 编写器/阅读器的错误,无法打印/读取阿拉伯语/波斯语字母。
*很抱歉没有提供 Print2Pdf 的链接,因为我找不到原始网站;如果有人知道原文请加链接;谢谢