佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 3035|回复: 20

[vb.net] Dos Printing的问题 (解决了)

[复制链接]
发表于 10-7-2006 08:26 PM | 显示全部楼层 |阅读模式
我正在写一个program,print ticket之类的,我要速度快,所以用vb.net call dos的print command来print,我成功了,但...那些字都比较偏向右方,左方空荡荡的

我用的纸是两边有洞的computer form,每一行的最后一个字只有2/3,剩下的1/3被洞吞掉了,printer是 Panasonic KP1124,右边用来固定computer form的固定器(不知道更好的形容词)已经被我放到尽头了,我用dos来print的,跟print dialog没关系吧?

我甚至用Type command在dos里面看,简直是完美无暇...
会是什么问题呢?

还有一个问题,vb.net里有个papersize function,但只能get,不能set,要如何才能set papersize呢?

[ 本帖最后由 Choy_2l 于 23-7-2006 10:26 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 11-7-2006 06:35 PM | 显示全部楼层
不好意思,发觉自己搞错了,把纸张固定在正中间不就可以了吗?自己太钻牛角尖,而且set papersize的问题我昨晚也已经搞定了,应该把这帖关掉了。

但我还有一个问题,要如何让纸张卷上卷下呢?方便user不用再手动卷纸,print完所有ticket后才一次过撕开。。。
回复

使用道具 举报

发表于 12-7-2006 10:40 AM | 显示全部楼层
原帖由 Choy_2l 于 11-7-2006 06:35 PM 发表
但我还有一个问题,要如何让纸张卷上卷下呢?方便user不用 ...

当印完整张单时,Form Feed 纸张,print chr$(10),卷上。我不会卷下的,
要撕纸直接在印表机按 [Tear Off]。
回复

使用道具 举报

 楼主| 发表于 12-7-2006 07:56 PM | 显示全部楼层
就当作是解决了吧!人终归还是要靠自己的,无论如何,谢谢你的意见
回复

使用道具 举报

 楼主| 发表于 17-7-2006 09:29 PM | 显示全部楼层
又有一个问题,我只是要print半张A4纸,可是它每次都吐出一整张A4,我试过set成别的size,但情况还是一样!到底是怎么回事?
回复

使用道具 举报

发表于 18-7-2006 10:19 AM | 显示全部楼层
Win98 就用 custom paper size

WinXP 就 Start > Printers & Faxes > File > Print Server Properties
选 A4,点 [v] Create a new form,改 Form name: A4 half
Height: 5.85in,点 [Save form] 按钮。

Console printing 的 Escape Sequence Command 不会写了。很久以前我是参考 Epson 的书。
回复

使用道具 举报

Follow Us
 楼主| 发表于 18-7-2006 06:35 PM | 显示全部楼层
原帖由 白日梦 于 18-7-2006 10:19 AM 发表
Win98 就用 custom paper size

WinXP 就 Start > Printers & Faxes > File > Print Server Properties
选 A4,点  Create a new form,改 Form name: A4 half
Height: 5.85in,点  按钮。


这个昨晚已经弄懂了,刚刚在office test过,结果还是一样。

Console printing 的 Escape Sequence Command


或许这才是最重要的,你说参考epson书,意思是说每一个牌子的command都不一样吗?

如果说set paper size的话,我倒是有一个好东西,昨晚找到的,programmatically set paper size,用C#写的,那一位高手得空就帮忙convert去vb.net再寄一份给我,感激不尽
回复

使用道具 举报

发表于 19-7-2006 10:39 AM | 显示全部楼层

Sending Printer Command

(不答你的问题,你先试以下的)

Page format

ESC C n     Set Page Length in Lines
            n = number of lines,1《n《127

注: Letter size的正常情况66行1页

ESC C 0 n   Set Page Length in Inches
            n = number of inches,1《n《22

注: Letter size的正常情况11寸1页

以上的指令适用于 Epson LQ2170,NEC P2000
回复

使用道具 举报


ADVERTISEMENT

发表于 19-7-2006 12:34 PM | 显示全部楼层
关于Escape Sequences,白老大已经写给你了。。。

刚才,检查了kx-1121的manual。。。发现它有“卷下”(reverse)的指令。。。
margin也可以设定。。。

卷一行,LF (ascii 10)
卷一张纸,FF (ascii 12)

牌子不同,但是它们的command是通用的。。。

我以前有试过用epson inkjet color printer来代替panasonic-kx1121。。。
但是,如果用laser printer就不可以了。。。

给你们看看一个非常好玩的东西。。。这是panasonic printer driver的一部分:

  1. ..... continue from somewhere

  2. }
  3. *Command: CmdStartDoc
  4. {
  5.     *Order: DOC_SETUP.1
  6.     *Cmd: "<1B>@<1B>t<011B>6"
  7. }
  8. *Command: CmdStartPage
  9. {
  10.     *Order: PAGE_SETUP.1
  11.     *Cmd: "<0D>"
  12. }
  13. *Command: CmdEndJob
  14. {
  15.     *Order: JOB_FINISH.1
  16.     *Cmd: "<0D1B>@<1B>t<00>"
  17. }
  18. *RotateCoordinate?: FALSE
  19. *RotateRaster?: FALSE
  20. *RotateFont?: FALSE
  21. *switch: Orientation
  22. {
  23.     *case: PORTRAIT
  24.     {
  25.         *TextCaps: LIST(TC_OP_CHARACTER,TC_EA_DOUBLE,TC_IA_ABLE,TC_UA_ABLE,TC_RA_ABLE)
  26.     }
  27.     *case: LANDSCAPE_CC270
  28.     {
  29.         *TextCaps: LIST(TC_RA_ABLE)
  30.     }
  31. }
  32. *CursorXAfterCR: AT_CURSOR_X_ORIGIN
  33. *YMoveAttributes: LIST(SEND_CR_FIRST,FAVOR_LF)
  34. *MaxLineSpacing: 255
  35. *XMoveThreshold: 0
  36. *YMoveThreshold: *
  37. *XMoveUnit: 60
  38. *YMoveUnit: 180
  39. *Command: CmdXMoveAbsolute { *Cmd : "<1B>$" %l{(DestX / 12) } }
  40. *Command: CmdYMoveRelDown { *Cmd : "<1B>J" %c[0,255]{max_repeat((DestYRel / 4) )} }
  41. *Command: CmdSetLineSpacing { *Cmd : "<1B>+" %c[0,255]{(LinefeedSpacing / 2) } }
  42. *Command: CmdCR { *Cmd : "<0D>" }
  43. *Command: CmdLF { *Cmd : "<0A>" }
  44. *Command: CmdFF { *Cmd : "<0C>" }
  45. *Command: CmdUniDirectionOn { *Cmd : "<1B>U<01>" }
  46. *Command: CmdUniDirectionOff { *Cmd : "<1B>U<00>" }
  47. *EjectPageWithFF?: TRUE
  48. *OutputDataFormat: V_BYTE
  49. *OptimizeLeftBound?: FALSE
  50. *CursorXAfterSendBlockData: AT_GRXDATA_END
  51. *CursorYAfterSendBlockData: NO_MOVE
  52. *DefaultFont: 5
  53. *DefaultCTT: 2
  54. *switch: Orientation
  55. {
  56.     *case: PORTRAIT
  57.     {
  58.         *DeviceFonts: LIST(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
  59. +                   17,18,19,20,21,22,23,24,25,26,27,28,29,30,51,52,
  60. +                   53,54,55,56,57,58,59,60)
  61.     }
  62.     *case: LANDSCAPE_CC270
  63.     {
  64.         *DeviceFonts: LIST()
  65.     }
  66. }
  67. *Command: CmdBoldOn { *Cmd : "<1B>G" }
  68. *Command: CmdBoldOff { *Cmd : "<1B>H" }
  69. *Command: CmdItalicOn { *Cmd : "<1B>4" }
  70. *Command: CmdItalicOff { *Cmd : "<1B>5" }
  71. *Command: CmdUnderlineOn { *Cmd : "<1B>-<01>" }
  72. *Command: CmdUnderlineOff { *Cmd : "<1B>-<00>" }

  73. ..... continue to end
复制代码


从这里,可以看得出,printer driver也需要用Escape Sequences来跟printer“对话”。。。
回复

使用道具 举报

发表于 19-7-2006 12:54 PM | 显示全部楼层
dot matrix 印表机是用 Escape Sequence Printer Command 来处理特别的东西,
laser 印表机用 PCL,忘了正确名称,好像是 Postscript Command Language。
这个我就不会弄,所以 Clipper 所写的软件就卡住,不能印。
回复

使用道具 举报

发表于 19-7-2006 01:54 PM | 显示全部楼层
如果说set paper size的话,我倒是有一个好东西,昨晚找到的,programmatically set paper size,用C#写的,那一位高手得空就帮忙convert去vb.net再寄一份给我,感激不尽



我在想。。。。

这样的做法。。。是不是能达到最高效果。。。

类似的“programmatically set paper size”我有研究过。。。
不过,可惜没有做成。。。那时,我想的比这个更加复杂。

原则上,只要调用api就可以了。。。
OpenPrinter,ClosePrinter,AddForm,SetForm,DeleteForm和DocumentProperties。。。

不过。。。。等我成功之后。。。再告诉你吧。。。

PS,把标题改掉吧。。。一直看到你写着“解决了”

[ 本帖最后由 meemee 于 19-7-2006 01:56 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 19-7-2006 08:03 PM | 显示全部楼层
我想我应该做一些声明,我只懂vb.net,而我的printing方法只是用command prompt里面的 "print" command

print c:\abc.txt

就这样简单,老实说你们所给的建议已大大超出我的知识范围,无论如何,非常感激你们的建议

我曾经试过另一种方法,好像 >prn 之类的,写在batch file里,完整的command忘记了,也找不回了(Internet找到的),我依照记忆,在batch file写:

copy c:\abc.txt>prn

结果那烂PANASONIC printer print出

1 file copied

差一点忍不住要把它给砸了


PS,把标题改掉吧。。。一直看到你写着“解决了”


ok
回复

使用道具 举报

发表于 20-7-2006 10:03 AM | 显示全部楼层

回复 #12 Choy_2l 的帖子

就这样简单,老实说你们所给的建议已大大超出我的知识范围,无论如何,非常感激你们的建议


呵呵,不是很会。。。但是竟然懂prn这个老古董的东西。。。
有没有玩过copy con prn

emm.....不需要 〉这个符号。。。

以下几个都可以试试:
copy c:\abc.txt prn
copy c:\abc.txt prn /b
copy c:\abc.txt lpt1
copy c:\abc.txt lpt1 /b

其实,如果只是单单需要把text sent去printer可以直接写batch档。。。

echo off
copy c:\startDoc.dat prn /b
copy c:\abc.txt prn /b
copy c:\endDoc.dat prn /b
echo on

startDoc.dat和endDoc.dat用来收藏start和end signal的Escape Sequences
page format,margin,长度的Escape Sequences也可以放在startDoc.dat里。。。

如果你会上面的东西可以自己先试试。。。

帮你convert成vb.net的code需要一些时间。。。
回复

使用道具 举报

发表于 20-7-2006 12:37 PM | 显示全部楼层
DOS 指令

把印表机当档案用 prn 和 lpt1 都可以

如果是就没有 >
copy filename.ext prn

copy filename.ext lpt1

type filename.ext >prn

type filename.ext >lpt1
回复

使用道具 举报

 楼主| 发表于 20-7-2006 07:53 PM | 显示全部楼层
不好意思这么迟才回帖,因为office没得上网,暂时当作是解决了吧!连续两天开夜车,快晕倒了,我需要好好休息一番

这东西只是做来好玩的,成功的话就免费送给老板,顺便看看有谁要买(到底是什么program不能说,因为有点非法性质)


有没有玩过copy con prn


明天回office试试,你可别害我。。。:@


帮你convert成vb.net的code需要一些时间。。。


拿你的时间(take your time),我已经把那C# class打包成dll来用了

DOS 指令

把印表机当档案用 prn 和 lpt1 都可以

如果是就没有 >
copy filename.ext prn

copy filename.ext lpt1

type filename.ext >prn

type filename.ext >lpt1


不愧是版主,心地太好了,谢谢
回复

使用道具 举报

发表于 21-7-2006 10:19 AM | 显示全部楼层
原帖由 Choy_2l 于 20-7-2006 07:53 PM 发表
不好意思这么迟才回帖,因为office没得上网,暂时当作是解决了吧!连续两天开夜车,快晕倒了,我需要好好休息一番

这东西只是做来好玩的,成功的话就免费送给老板,顺便看看有谁要买(到底是什么program不能说,因为有点非法性质)

明天回office试试,你可别害我。。。
...


哈哈。。。copy con prn 这个指令,据我所知应该没办法伤害电脑。。。
它只是从keyboard直接跟printer对话。。。con就是console。。。
如果,你不懂用的话,那个command就是停住在那里。。。因为,它等着你输入东西去printer

N个月之前,我还有玩更加够力的。。。
那时候,为了装linux。。。我直接用debug指令,写assembly code。。。把linux loader写入mbr里。。。不过,那时候我写错资料。。。造成我的硬碟“不见”。。。
window也不能boot了。。。因为它变成unknow partition。。。
回复

使用道具 举报


ADVERTISEMENT

发表于 21-7-2006 10:51 AM | 显示全部楼层
嘻嘻。。。终于成功了。。。在vb.net里直接用Escape Sequences跟printer“对话”

我相信你的方法,应该不是最快的。。。因为spooler会制作emf的spool file。
另一个坏处是只可以用在winXP和2k。。。好像也不support remote printer。。。
好处是machine independent。。。别的牌子printer也没问题。。。

我用的方法,直接call spooler把data和Escape Sequences送去printer driver。。。可以support win98和winXP。。。
坏处是machine dependent

[size=-1]
  1. Imports System.Runtime.InteropServices

  2. Module winapi

  3.     Private Const PRINTER_ENUM_CONNECTIONS As Int32 = &H4
  4.     Private Const PRINTER_ENUM_LOCAL As Int32 = &H2

  5.     'Find a printer with drivername "Panasonic KX"
  6.     Private Const myPrinter As String = "Panasonic KX"


  7.     Private Structure DOC_INFO_1
  8.         <MarshalAs(UnmanagedType.LPStr)> Dim pDocName As String
  9.         <MarshalAs(UnmanagedType.LPStr)> Dim ppOutputFile As String
  10.         <MarshalAs(UnmanagedType.LPStr)> Dim pDataType As String
  11.     End Structure

  12.     Private Structure PRINTER_INFO_2
  13.         'Must use <MarshalAs(UnmanagedType.LPStr)>
  14.         'Using LPStr (not LPTStr), cause LPTStr will
  15.         'interpret unicode
  16.         <MarshalAs(UnmanagedType.LPStr)> Dim pServerName As String
  17.         <MarshalAs(UnmanagedType.LPStr)> Dim pPrinterName As String
  18.         <MarshalAs(UnmanagedType.LPStr)> Dim pShareName As String
  19.         <MarshalAs(UnmanagedType.LPStr)> Dim pPortName As String
  20.         <MarshalAs(UnmanagedType.LPStr)> Dim pDriverName As String
  21.         <MarshalAs(UnmanagedType.LPStr)> Dim pComment As String
  22.         <MarshalAs(UnmanagedType.LPStr)> Dim pLocation As String
  23.         Dim pDevMode As IntPtr
  24.         <MarshalAs(UnmanagedType.LPStr)> Dim pSepFile As String
  25.         <MarshalAs(UnmanagedType.LPStr)> Dim pPrintProcessor As String
  26.         <MarshalAs(UnmanagedType.LPStr)> Dim pDataType As String
  27.         <MarshalAs(UnmanagedType.LPStr)> Dim pParameters As String
  28.         Dim pSecurityDescriptor As IntPtr
  29.         Dim Attributes As Int32
  30.         Dim Priority As Int32
  31.         Dim DefaultPriority As Int32
  32.         Dim StartTime As Int32
  33.         Dim UntilTime As Int32
  34.         Dim Status As Int32
  35.         Dim cJobs As Int32
  36.         Dim AveragePPM As Int32
  37.     End Structure

  38.     Private Declare Function EnumPrinters Lib "winspool.drv" Alias "EnumPrintersA" _
  39.     (ByVal flags As Int32, ByVal name As String, ByVal Level As Int32, ByVal pPrinterEnum As IntPtr, ByVal cdBuf As Int32, ByRef pcbNeeded As Int32, ByRef pcReturned As Int32) As Int32


  40.     'The last parameter should be PRINTER_DEFAULTS type
  41.     'but I use intPtr, cause I don't need it... (also can use int32)
  42.     Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, ByRef phPrinter As Int32, ByVal pDefault As IntPtr) As Int32

  43.     Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Integer) As Integer

  44.     'I use string for 2nd parameter...
  45.     Private Declare Function WritePrinter Lib "winspool.drv" (ByVal hPrinter As Integer, ByVal pBuf As String, ByVal cdBuf As Int32, ByRef pcWritten As Int32) As Int32

  46.     Private Declare Function StartDocPrinter Lib "winspool.drv" Alias "StartDocPrinterA" (ByVal hPrinter As Int32, ByVal Level As Int32, ByRef pDocInfo As DOC_INFO_1) As Integer

  47.     'Private Declare Function StartPagePrinter Lib "winspool.drv" (ByVal hPrinter As Int32) As Int32

  48.     'Private Declare Function EndPagePrinter Lib "winspool.drv" (ByVal hPrinter As Int32) As Int32

  49.     Private Declare Function EndDocPrinter Lib "winspool.drv" (ByVal hPrinter As Int32) As Int32

  50.     Function GetMyPrinter() As String

  51.         Dim byteNeeded As Int32
  52.         Dim numOfPrinter As Int32
  53.         Dim i As Int32, StructSize As Int32

  54.         Dim buffer, ptTmp As IntPtr
  55.         Dim PrinterInfo As PRINTER_INFO_2
  56.         Dim foundName As String

  57.         EnumPrinters(PRINTER_ENUM_CONNECTIONS Or PRINTER_ENUM_LOCAL, _
  58.         vbNullString, 2, IntPtr.Zero, 0, byteNeeded, numOfPrinter)

  59.         buffer = Marshal.AllocHGlobal(byteNeeded)
  60.         ptTmp = buffer

  61.         EnumPrinters(PRINTER_ENUM_CONNECTIONS Or PRINTER_ENUM_LOCAL, _
  62.         vbNullString, 2, buffer, byteNeeded, byteNeeded, numOfPrinter)

  63.         StructSize = Marshal.SizeOf(PrinterInfo)

  64.         For i = 1 To numOfPrinter
  65.             PrinterInfo = Marshal.PtrToStructure(ptTmp, PrinterInfo.GetType)
  66.             If PrinterInfo.pDriverName.IndexOf(myPrinter, 0) = 0 Then
  67.                 foundName = PrinterInfo.pPrinterName
  68.                 Exit For
  69.             End If
  70.             ptTmp = IntPtr.op_Explicit(ptTmp.ToInt32 + StructSize)
  71.         Next

  72.         Marshal.FreeHGlobal(buffer)
  73.         Return foundName
  74.     End Function

  75.     Sub PrintTestPage()

  76.         Dim foundPrinter As String
  77.         foundPrinter = GetMyPrinter()
  78.         Dim HPrinter As Int32
  79.         Dim iResult As Int32

  80.         If OpenPrinter(foundPrinter, HPrinter, IntPtr.Zero) = 0 Then
  81.             MessageBox.Show("Cann't open printer")
  82.             End
  83.         End If

  84.         StartPrintJob(HPrinter)

  85.         'Create 2 pages of test page (with 3.5" long)
  86.         CreateTestData(3.5, HPrinter)

  87.         iResult = EndDocPrinter(HPrinter)

  88.         ClosePrinter(HPrinter)
  89.     End Sub

  90.     'PageLen specify the length of page in inch
  91.     Sub CreateTestData(ByVal PageLen As Single, ByRef hPrinter As Int32)

  92.         Dim PageLenESC As String
  93.         Dim TestData As String
  94.         Dim TestStr1 As String, TestStr2 As String
  95.         Dim FormFeed As String
  96.         Dim NewPage As String
  97.         Dim NewJob As String, EndJob As String

  98.         Dim BytePrint As Int32
  99.         Dim iResult As Int32

  100.         'Use to feed next page
  101.         FormFeed = Chr(12)

  102.         'Use to signal new page
  103.         NewPage = Chr(13)

  104.         'Start new job
  105.         NewJob = Chr(27) & "@" & Chr(27) & "t" & Chr(1) & Chr(27) & "6"

  106.         'End job
  107.         EndJob = Chr(27) & "@" & Chr(27) & "t" & Chr(0)

  108.         'Create escape sequence for custom length
  109.         PageLenESC = Chr(27) & "2"
  110.         PageLenESC = PageLenESC & Chr(27) & "C" & Chr(CInt(PageLen * 6))

  111.         'String to be print
  112.         TestStr1 = "     Test Page 1 ~~ 3.5"""
  113.         TestStr2 = "     Test Page 2 ~~ 3.5"""

  114.         TestStr1 = PageLenESC & TestStr1 & FormFeed
  115.         TestStr2 = PageLenESC & TestStr2 & FormFeed

  116.         TestData = NewJob & TestStr1 & TestStr2 & EndJob

  117.         iResult = WritePrinter(hPrinter, TestData, Len(TestData), BytePrint)
  118.     End Sub

  119.     Private Sub StartPrintJob(ByRef HPrinter As Int32)
  120.         Dim JobBuffer As DOC_INFO_1

  121.         Dim iResult As Int32
  122.         JobBuffer.pDocName = "Vb.net Test Page"
  123.         JobBuffer.ppOutputFile = vbNullString
  124.         JobBuffer.pDataType = "RAW"

  125.         iResult = StartDocPrinter(HPrinter, 1, JobBuffer)
  126.         'iResult = StartPagePrinter(HPrinter)
  127.     End Sub

  128.     Sub main()
  129.         PrintTestPage()
  130.     End Sub

  131. End Module
复制代码


[ 本帖最后由 meemee 于 21-7-2006 10:53 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 21-7-2006 09:05 PM | 显示全部楼层
walau。。。我看不懂,还以为转去vb.net会好一点。。。

其实用copy @ type function已经可以print了,为了避免print不完整,我用了一个很苯却又实际的方法

上面enter三下,下面也enter三下,人头担保内容正正print在中间。

但现在又来一个新问题,要怎样set font size啊。。。?

坏处是machine dependent


只能用在panasonic机?


不管怎样,还是要谢谢你
回复

使用道具 举报

 楼主| 发表于 21-7-2006 11:29 PM | 显示全部楼层
刚才又想到,是否可以套用dos的font,然后用printdocument给print出来,问题是不是很肯定dos用什么font

那些嫌疑font是隐藏(hidden)在windows\fonts里头,试过

Me.Font = New Font("MS-Dos CP 437", 10, FontStyle.Regular, GraphicsUnit.Point)

不行咧。。。而且也不肯定printing速度是不是一样快

meemee兄你说machine dependence真的是说只能用panasonic?老板现在用的是universal的吧。。。那条水来帮我们装这个program前怎可能知道我们用的是什么机啊。。

臭水来的,一个烂dos program(大概900KB)竟然bill我们RM1700 !但它可以卷上卷下,我工作方便不少。。。

谁有panasonic manual吗?我找不到,我也要batch tutorial
(可能我search的方式不对,只找到要钱的control或shareware,还是Internet变得越来越商业化了?)

对了meemee兄,明天才能够test你的program,我家没有printer,开始觉得vb.net有点麻烦,要install framework才可以跑

[ 本帖最后由 Choy_2l 于 21-7-2006 11:30 PM 编辑 ]
回复

使用道具 举报

发表于 22-7-2006 06:08 PM | 显示全部楼层
Machine dependent。。。就像。。。laser printer就不可以用了。。。因为,laser printer用的是PCL和portscript。。。

一些老古董的inkjet可以用。。。像epson stylus pro。。。新款的就不知道了。。。

不过,我只用一些简单的指令。。。所以多数的dot matrix都可以compatible。。。

这样的设定font法是不可以的。。。因为,你用的是dos interface (vb.net call dos的print command)。。。然而,me.font。。。是window interface。。。

要设定font。。。也是通过escape sequences。。。

这是我新改的,我加入了其他的font。。。你把CreateTestData这个procedure换新的:
[size=-1]
  1.     'PageLen specify the length of page in inch
  2.     Sub CreateTestData(ByVal PageLen As Single, ByRef hPrinter As Int32)

  3.         Dim PageLenESC As String
  4.         Dim TestData As String
  5.         Dim TestStr1 As String, TestStr2 As String
  6.         Dim FormFeed As String
  7.         Dim Feed_6_LF As String
  8.         Dim NewJob As String, EndJob As String

  9.         Dim BytePrint As Int32
  10.         Dim iResult As Int32

  11.         'Use to feed next page
  12.         FormFeed = Chr(12)

  13.         '6 Line feed
  14.         Feed_6_LF = vbLf & vbLf & vbLf & vbLf & vbLf & vbLf

  15.         'Start new job
  16.         NewJob = Chr(27) & "@" & Chr(27) & "t" & Chr(1) & Chr(27) & "6"

  17.         'End job
  18.         EndJob = Chr(27) & "@" & Chr(27) & "t" & Chr(0)

  19.         'Create escape sequence for custom length
  20.         PageLenESC = Chr(27) & "2"
  21.         PageLenESC = PageLenESC & Chr(27) & "C" & Chr(CInt(PageLen * 6))

  22.         'String to be print
  23.         TestStr1 = "     Test Page 1 ~~ 3.5"""

  24.         'Scroll 6 line
  25.         TestStr1 = TestStr1 & Feed_6_LF
  26.         TestStr1 = TestStr1 & "  After 6 LF = 1""" & vbLf & vbLf

  27.         'Bold Printing
  28.         TestStr1 = TestStr1 & Chr(27) & "G"
  29.         TestStr1 = TestStr1 & "  Bold print" & vbLf & vbLf
  30.         TestStr1 = TestStr1 & Chr(27) & "H" 'Release bold

  31.         'Underline Printing
  32.         TestStr1 = TestStr1 & Chr(27) & "-" & Chr(1)
  33.         TestStr1 = TestStr1 & "  underline" & vbLf & vbLf
  34.         TestStr1 = TestStr1 & Chr(27) & "-" & Chr(0) 'Release underline

  35.         'Italic Printing
  36.         TestStr1 = TestStr1 & Chr(27) & "4"
  37.         TestStr1 = TestStr1 & "  Italic print" & vbLf & vbLf
  38.         TestStr1 = TestStr1 & Chr(27) & "5"  'Release italic

  39.         'Double High Printing
  40.         TestStr1 = TestStr1 & Chr(27) & "w" & Chr(1) 'Set
  41.         TestStr1 = TestStr1 & "  Double High" & vbLf & vbLf
  42.         TestStr1 = TestStr1 & Chr(27) & "w" & Chr(0) 'Release

  43.         TestStr2 = "     Test Page 2 ~~ 3.5""" & vbLf & vbLf

  44.         'Double Wide Printing
  45.         TestStr2 = TestStr2 & Chr(14)
  46.         TestStr2 = TestStr2 & "  Double wide" & vbLf & vbLf
  47.         TestStr2 = TestStr2 & Chr(20)  'Release

  48.         'PS font
  49.         TestStr2 = TestStr2 & Chr(27) & "x" & Chr(1) 'LQ font
  50.         TestStr2 = TestStr2 & Chr(27) & "k" & Chr(6) 'PS font
  51.         TestStr2 = TestStr2 & "  PS font" & vbLf & vbLf
  52.         TestStr2 = TestStr2 & Chr(27) & "k" & Chr(2) 'courier font
  53.         TestStr2 = TestStr2 & Chr(27) & "x" & Chr(2) 'Draft font

  54.         'Last test
  55.         TestStr2 = TestStr2 & "  Last test -- End"

  56.         TestStr1 = PageLenESC & TestStr1 & FormFeed
  57.         TestStr2 = PageLenESC & TestStr2 & FormFeed

  58.         TestData = NewJob & TestStr1 & TestStr2 & EndJob

  59.         iResult = WritePrinter(hPrinter, TestData, Len(TestData), BytePrint)
  60.     End Sub
复制代码


据我所知,这个coding可以用在,panasonic kx-1121或以上,epson LQ-850或以上的printer。。。

卷上,卷下的指令也可以放进去。。。

Epson LQ-850的manual可以从:
这里下载
(没有scanner)不能帮你scan。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 23-9-2024 07:24 AM , Processed in 0.114078 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表