公司需要打印一种特别的纸卡,该纸卡的顶部要先贴样布,然后在样布下面的表格打印文字。
如果纸卡贴样布的地方在下面而不在顶部,那么就可以非常轻松地在打印出来
现在需要想办法让程序将打印内容旋转180度后再打印。我想用水晶报表来打印,但是不知道这么设置。
在网上找了没找到,不知各位可否告知,又或者提供一个思路?
如果纸卡贴样布的地方在下面而不在顶部,那么就可以非常轻松地在打印出来
现在需要想办法让程序将打印内容旋转180度后再打印。我想用水晶报表来打印,但是不知道这么设置。
在网上找了没找到,不知各位可否告知,又或者提供一个思路?
Dim mstrContent() As String
Dim mintPage() As Integer
Dim mlngArrID() As Long
Dim mbKeyPress As Boolean
Dim mMaxPages As Integer
Dim mblnChecked() As Boolean
Dim mlngSelArchID As Long
Dim mblnItemClick As Boolean
Dim mintItemSelect As Integer
Dim mlngItemID As Long
Dim mbChecked As Boolean
Dim mstrSelArchNo As String
Dim mlngArchID() As Long
Dim mLngCnnID() As Long
Private Const LF_FACESIZE = 32
Private 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
Private Type DOCINFO
cbSize As Long
lpszDocName As String
lpszOutput As String
lpszDatatype As String
fwType As Long
End Type
Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private 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
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private 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
Private Declare Function StartDoc Lib "gdi32" Alias "StartDocA" (ByVal hdc As Long, lpdi As DOCINFO) As Long
Private Declare Function EndDoc Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function StartPage Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function EndPage Lib "gdi32" (ByVal hdc As Long) As Long
Const DESIREDFONTSIZE = 12 ' Could use variable, TextBox, etc.
Private Sub Command1_Click()
'使用API函数打印
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 = "测试字符1234564" 'Set string to be rotated
' Set rotation in tenths of a degree, i.e., 1800 = 180 degrees
lf.lfEscapement = 1800 '旋转180度,也可设置为900、2700
lf.lfHeight = (DESIREDFONTSIZE * -20) / Printer.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, 2000, 1000, OutString, LenB(StrConv(OutString, vbFromUnicode)))
'不旋转打印
result = SelectObject(hPrintDc, hOldfont)
' Send non-rotated text to printer at same page location
result = TextOut(hPrintDc, 1000, 1000, OutString, LenB(StrConv(OutString, vbFromUnicode)))
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
记得从PICTURE控件打印到打印机也可以用PAINTPICTURE这个命令, 这样的话,你只要在控件上先一个方向翻转一次,输出的时候再另一个方向翻转一次,就可以了
只要你在图片上输出的时候先考虑好位置,就一定可以实现你的要求,又不用一个API, 纯技巧解决方案
谢谢你的回答,这个思路我也考虑过,之前也用PICBOX做过位图旋转,不过效率太低了,因为打印区域比A4纸还要大些,位图旋转消耗的时间相对来说太长了。因为一般打印纸卡都是大量一次性打印,所以必须考虑效率问题再次谢谢你的关注和回复!
PLAIN(普通纸) 75 至 104 g/m2
LIGHT(轻磅) < 75 g/m2
HEAVY(重磅) 90 至 105 g/m2
CARDSTOCK(卡片纸) 卡片纸或重磅介质
TRANSPARENCY(投影胶片) 4-mil、0.1 单色投影胶片 (Monochrome Overhead Transparencies,OHT)
ENVELOPE(信封) 标准信封
LABEL(标签) 标准 HP LaserJet 标签
BOND(证券纸) 证券纸
ROUGH(粗糙纸) 粗糙纸
COLOR(彩色纸) 普通介质
LETTERHEAD(信头纸) 普通介质
PREPRINTED(预打印纸) 普通介质
PREPUNCHED(预穿孔纸) 普通介质
RECYCLED(再生纸) 普通介质
VELLUM(硫酸纸) 普通介质 --------------------------------------------------------------------------------