Author: Smalig.
This code will show you how to print rotated text with any
angle you choose.
Option Explicit
Public Const LF_FACESIZE = 32
Public Type LOGFONT
lfHeight As Long
lfWidth As
Long
lfEscapement As Long
lfOrientation As Long
lfWeight As Long
lfItalic As Byte
lfUnderline As
Byte
lfStrikeOut As Byte
lfCharSet As Byte
lfOutPrecision As Byte
lfClipPrecision As Byte
lfQuality As
Byte
lfPitchAndFamily As Byte
lfFaceName As String *
LF_FACESIZE
End Type
Public Type DOCINFO
cbSize As Long
lpszDocName As
String
lpszOutput As String
lpszDatatype As String
fwType As Long
End Type
Declare Function CreateFontIndirect Lib "gdi32" Alias _
"CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
Declare Function SelectObject Lib "gdi32" _
(ByVal hdc As Long,
ByVal hObject As Long) As Long
Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" _
(ByVal lpDriverName As String, ByVal lpDeviceName As String, _
ByVal lpOutput As Long, ByVal lpInitData As Long) As Long
Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Declare Function TextOut Lib "gdi32" Alias "TextOutA" _
(ByVal
hdc As Long, ByVal x As Long, ByVal y As Long, _
ByVal lpString As
String, ByVal nCount As Long) As Long ' or Boolean
Declare Function StartDoc Lib "gdi32" Alias "StartDocA" _
(ByVal hdc As Long, lpdi As DOCINFO) As Long
Declare Function EndDoc Lib "gdi32" (ByVal hdc As Long) As Long
Declare Function StartPage Lib "gdi32" (ByVal hdc As Long) As Long
Declare Function EndPage Lib "gdi32" (ByVal hdc As Long) As Long
Private Sub Command1_Click()
Const DESIREDFONTSIZE = 12 '
Font Size.
Dim OutString As String 'String to be rotated
Dim lf
As LOGFONT 'Structure
for setting up rotated font
Dim temp As String 'Temp string var
Dim result As Long 'Return value for calling API functions
Dim hOldfont As Long 'Hold old
font information
Dim hPrintDc As Long
'Handle to printer dc
Dim hFont As Long 'Handle to new Font
Dim di As DOCINFO 'Structure for
Print Document info
OutString = "Hello World" 'Set string to be rotated
'Set rotation in tenths of a degree, i.e., 1800 = 180
degrees
lf.lfEscapement = 1800
lf.lfHeight = (DESIREDFONTSIZE * -60) /
Screen.TwipsPerPixelY
hFont =
CreateFontIndirect(lf) 'Create the rotated font
di.cbSize = 20 'Size of DOCINFO
structure
di.lpszDocName = "My Document"
'Set name of print job (Optional)
'Create a printer device
context
hPrintDc = CreateDC(Printer.DriverName,
Printer.DeviceName, 0, 0)
result = StartDoc(hPrintDc, di) 'Start a new print document
result = StartPage(hPrintDc) 'Start a new page
'Select our rotated font structure and save previous font info
hOldfont =
SelectObject(hPrintDc, hFont)
'Send rotated text to printer,
starting at location 1000, 1000
result =
TextOut(hPrintDc, 1000, 1000, OutString, Len(OutString))
'Reset font back to original, non-rotated
result = SelectObject(hPrintDc,
hOldfont)
'Send non-rotated text to printer at
same page location
result =
TextOut(hPrintDc, 1000, 1000, OutString, Len(OutString))
result = EndPage(hPrintDc) 'End the page
result =
EndDoc(hPrintDc) 'End
the print job
result = DeleteDC(hPrintDc) 'Delete the printer device context
result = DeleteObject(hFont) 'Delete the font object
End Sub