Как получить доступ к конкретным шрифтам принтера в .NET? - PullRequest
0 голосов
/ 24 апреля 2009

Этот вопрос аналогичен Извлечение контекста устройства из .NET print API ...

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

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

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

1 Ответ

0 голосов
/ 14 октября 2010

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

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