2010-11-07 111 views
4

如何绘制unicode字符串我想发送高炉脚本(unicode)字符串到使用.NET框架提供的PrintDocument的打印机。如何使用C#graphics.DrawString

不幸的是,在我看来,Graphics.DrawString()不能正确渲染高棉脚本。

平台:Windows 7旗舰版
IDE:VS 2010终极

下面是示例代码:

void printDoc_PrintPage(object sender, PrintPageEventArgs e) 
{ 
    var font = new Font("Khmer UI", 12); 
    var text = "សួស្តី"; // "Hello" 
    e.Graphics.DrawString(text, font, Brushes.Black, 100, 100); 
} 
+0

它是如何出现的? – 2010-11-07 08:21:56

+0

你如何定义“不正确”? – devio 2010-11-07 08:32:42

+0

而不是显示“សួស្តី”,你会看到“សួស្តី” – lchanmann 2010-11-07 08:35:55

回答

0

感谢阿尔滨和比默为您的积极响应。

在c#google group中发布了几篇文章之后。已经确认在GDI +中存在一个错误,即错误地将某些脚本(本例中为“高棉语”)显示为不同的措辞。

创建了一个本机win32测试应用程序,以验证GDI + DrawString()的问题。

已向Microsoft Connect提交了一个错误报告:http://connect.microsoft.com/VisualStudio/feedback/details/620081/

5

曼,
我测试你的代码上Form_Paint()处理器,和我正好你说什么。
但是,当我用这个来代替:

TextRenderer.DrawText(e.Graphics, text, font, new Point(100, 100), Color.Black); 

它给我的文字你想要的方式。
试试看你的printDoc_PrintPage()

alt text

+0

这是因为Graphics类使用GDI +和TextRenderer类使用GDI来执行渲染。不幸的是TextRenderer类不支持打印。 http://msdn.microsoft.com/en-us/library/ms171753.aspx – lchanmann 2010-11-09 02:11:21

+0

嗨,先生,我接受你的建议。但是当我尝试你的代码时,我很难在New Point中设置位置(100,100)。这意味着我可以将新点设置为文档的百分比。比方说,我想在A4纸上打印。我如何打印到我想要​​的位置。 – Sopolin 2011-08-30 03:34:22

+0

@Sopolin - 你得计算一下。您需要将毫米转换为像素。默认情况下,每英寸有72个像素。每英寸有25.4毫米,这意味着分辨率为每25.4毫米72个像素。因此,例如,如果要以50mm开始绘制,则需要按像素142绘制,按50 *(72/25.4)计算。 – BeemerGuy 2011-08-30 08:05:27