2010-11-07 22 views
4

J'essaie d'envoyer une chaîne de caractères khmer (unicode) à l'imprimante en utilisant PrintDocument fourni par le framework .NET.Comment dessiner une chaîne unicode en utilisant C# graphics.DrawString

Malheureusement, il me semble que Graphics.DrawString() ne rend pas correctement le script khmer.

Plate-forme: Windows 7 Édition Intégrale
IDE: VS 2010 Ultimate

Voici l'exemple de code:

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

Comment apparaît-il alors? –

+0

Comment définissez-vous "pas correctement"? – devio

+0

au lieu d'afficher "សួស្តី" vous verrez "សួស ្ តី" – lchanmann

Répondre

0

Merci Albin et Beemer pour votre réponse active.

Après quelques publications dans C# google group. Il a été confirmé qu'il y a un bug dans GDI + qui montre incorrectement certains scripts ("khmer" dans ce cas) à un libellé différent.

Une application de test native win32 a été créée pour vérifier le problème avec GDI + DrawString().

Un rapport de bogue a été soumis à Microsoft Connect: http://connect.microsoft.com/VisualStudio/feedback/details/620081/

5

mann,
Je l'ai testé votre code sur un gestionnaire Form_Paint(), et je me suis exactement ce que tu as dit.
Mais quand je ceci:

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

Il m'a donné le texte comme vous le vouliez. Essayez ceci sur votre printDoc_PrintPage().

alt text

+0

Cela parce que la classe graphique utilise GDI + et classe TextRenderer utilisent GDI pour faire le rendu. Malheureusement, la classe TextRenderer ne prend pas en charge l'impression. http://msdn.microsoft.com/fr-fr/library/ms171753.aspx – lchanmann

+0

Salut monsieur, j'accepte votre recommandation. Mais quand j'essaie votre code, je suis très difficile de définir l'emplacement à New Point (100,100). Cela signifie que je peux définir Nouveau Point comme Milimètre du Document. Disons, je veux imprimer sur du papier A4. Comment puis-je imprimer au point que je veux. – Sopolin

+0

@Sopolin - vous devrez calculer cela. Vous devez convertir des millimètres en pixels. Par défaut, il y a 72 pixels par pouce. Il y a 25,4 mm par pouce, ce qui signifie que la résolution est de 72 pixels par 25,4 mm. Par exemple, si vous voulez commencer à dessiner à 50 mm, vous devez dessiner au pixel 142, calculé par 50 * (72/25,4). – BeemerGuy