微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 C# 中正确打印阿拉伯/波斯字母

如何解决无法在 C# 中正确打印阿拉伯/波斯字母

我在使用 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 的链接,因为我找不到原始网站;如果有人知道原文请加链接;谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。