2009-04-23 3 views
0

Этот вопрос есть на тех же строках, что и Retrieving Device Context from .NET print API ...Как получить доступ к конкретным шрифтам принтера в .NET?

У меня есть кодировщик тиснителя Datacard 295/mag. Чтобы написать колесо Mag Stripe или Embosser, вы должны написать свой текст в специальном «псевдо шрифте», который драйвер принтера будет распознавать и обрабатывать соответствующим образом. Есть несколько шрифтов, в зависимости от того, хотите ли вы писать на дорожку 1, дорожку 2, большие буквы эмбоссера или маленькие.

К сожалению, .NET напрямую поддерживает только шрифты OpenType и TrueType.

В отличие от вопроса, на который я ссылаюсь, у меня нет технического руководства, чтобы сообщить мне, что передать. Самый простой способ справиться с этой проблемой - найти способ использования шрифтов принтера из .NET, что бы это ни было. Как я могу получить доступ и использовать шрифты принтера в .NET?

ответ

0

Вы не можете сделать это прямо из .NET, поэтому вам придется использовать вызовы Win32 в контексте устройства для рендеринга с использованием «псевдо шрифта». Код примера here показывает, как это сделать:

' 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)