2009-04-23 4 views
0

Cette question est dans le même sens que Retrieving Device Context from .NET print API ...Comment accéder aux polices spécifiques à l'imprimante dans .NET?

J'ai un encodeur Datacard 295 embosser/mag strip. Pour écrire sur la roue Mag Stripe ou Embosser, vous devez écrire votre texte dans une "pseudo-police" spéciale, que le pilote d'imprimante reconnaîtra et traitera de manière appropriée. Il existe plusieurs polices, selon que vous voulez écrire sur la piste 1, la piste 2, les grandes lettres d'embosseur ou les petites.

Malheureusement, .NET prend directement en charge les polices OpenType et TrueType.

Contrairement à la question que j'ai référencée, je n'ai pas de guide technique pour me dire quoi transmettre. Le moyen le plus simple pour moi de gérer le problème est de trouver un moyen d'utiliser les polices d'imprimante à partir de .NET, peu importe ce que cela prend. Comment puis-je accéder et utiliser les polices d'imprimante dans .NET?

Répondre

0

Vous ne pouvez pas faire cela directement à partir de .NET, vous devez donc utiliser les appels Win32 sur le contexte de l'appareil pour effectuer le rendu en utilisant la "pseudo-police". L'exemple de code disponible here indique comment procéder:

' As we're using a device font, we need to write directly on the device context 
' as the System.Drawing.Font class which is used to write on a graphics object 
' does not support device fonts 
Dim hdcLabel As IntPtr 
hdcLabel = e.Graphics.GetHdc 

' Create the new device font 
Dim hfEPC As IntPtr 
hfEPC = WinAPI.GDI32.CreateFont(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "Track1") 

' Select the font on the device context, getting a handle on the font that is being replaced 
Dim hReplacedFont As IntPtr 
hReplacedFont = WinAPI.GDI32.SelectObject(hdcLabel, hfEPC) 

' Draw the text using the printer font 
Dim intDrawTextReturn As Integer 
intDrawTextReturn = WinAPI.User32.DrawText(hdcLabel, "Track 1 Data", ("Track 1 Data").Length, New Rectangle(20, 20, 300, 300), 0) 

' Re-Select the original font on the device context 
WinAPI.GDI32.SelectObject(hdcLabel, hReplacedFont) 

' Dispose of the EPC font 
WinAPI.GDI32.DeleteObject(hfEPC) 

' Release the device context 
e.Graphics.ReleaseHdc(hdcLabel) 
Questions connexes