[求助]批量打印图纸(n多张),送到打印机后,打印机总是随机顺序打印怎么办?
<p>我在网上找了好久,都仅仅是说打印机怎么设置,怎么调整打印顺序的,但没有一个能够满足我的要求,</p><p>我的要求很简单,就是要:先进先出。</p><p>但是找了好久也没有答案。</p><p>希望高手帮帮我。用VB,vba都成</p> <strong>打印机就是按发图先后打印的,如果要调整顺序,就要在发送前完成该操作</strong> <p>我这里不是阿,</p><p>我的打印机设置是:使用后台打印,当我的所有图纸送到后台后(形成了打印列表),真正送到打印机的顺序不是我需要的先进先出顺序,而是随机从打印列表中的东西送给打印机。</p><p>我使用的是Legend LJ7500 PCL5,XP PRO+ SP2系统。</p> 这应该是程序的问题 <p>不可能是程序的问题吧,我采用如下方法调试:</p><p>先将打印机设置成脱机使用,</p><p>然后在将所有打印的东西送到打印机(脱机)中,(可以看到打印列表和我送打印的顺序一致)</p><p>然后再将脱机打印去掉,让系统自动打印,但是这样的后果是:系统不是按照打印列表中的顺序将打印任务送给打印机,而是随机的)</p><p>忘了一点:我的所有打印任务的优先级都是一样,采用默认设置。</p><p>我有几百张图纸,如果系统不按照我的循序打印的话,那么批量处理的意义不大了,因为后期整理图纸将是相当困难的事情。</p> 还没遇到过,这是我的设置 <p>我明白了,我没有选择"首先打印后台文档"</p><p>谢谢版主的帮助。</p> <p>还想问一下:能不能通过程序直接控制选中"首先打印后台文档"</p><p>而不是通过手动修改的方式。毕竟默认打印机设置中都不选中该选项。</p> <p></p><p><font color="#f70997"><strong>关于打印的API函数参考:</strong></font></p>GetPrintProcessorDirectory <br/><br/>VB声明 <br/>Declare Function GetPrintProcessorDirectory Lib "winspool.drv" Alias "GetPrintProcessorDirectoryA" (ByVal pName As String, ByVal pEnvironment As String, ByVal Level As Long, ByVal pPrintProcessorInfo As String, ByVal cdBuf As Long, pcbNeeded As Long) As Long <br/>说明 <br/>判断指定系统中包含了打印机处理器驱动程序及文件的目录 <br/>返回值 <br/>Long,非零表示成功,零表示失败。会设置GetLastError <br/>参数表 <br/>参数 类型及说明 <br/>pName String,指定服务器的名字。设置成vbNullString则表示使用本地系统 <br/>pEnvironment String,欲在其中获取目录的一个环境(如:Windows NT x86)。用vbNullString表示使用当前(本地)系统环境 <br/>Level Long,设为1 <br/>pPrintProcessorInfo String,指定一个缓冲区,其中载入打印机处理器目录的完整路径。可定义成ByVal As String,以便将字节数组分配给一个字串,从而取消进行ANSI到Unicode转换的必要 <br/>cbBuf Long,pPrintProcessorInfo缓冲区中的字符数量 <br/>pcbNeeded Long,指向一个Long型变量的指针,该变量用于保存请求的缓冲区长度,或者实际读入的字节数量 <br/><br/><br/>OpenPrinter <br/><br/>VB声明 <br/>Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long <br/>说明 <br/>打开指定的打印机,并获取打印机的句柄 <br/>返回值 <br/>Long,非零表示成功,零表示失败。会设置GetLastError <br/>参数表 <br/>参数 类型及说明 <br/>pPrinterName String,要打开的打印机的名字 <br/>phPrinter Long,用于装载打印机的句柄 <br/>pDefault PRINTER_DEFAULTS,这个结构保存要载入的打印机信息 <br/><br/><br/>PrinterMessageBox <br/><br/>VB声明 <br/>Declare Function PrinterMessageBox Lib "winspool.drv" Alias "PrinterMessageBoxA" (ByVal hPrinter As Long, ByVal error As Long, ByVal hwnd As Long, ByVal pText As String, ByVal pCaption As String, ByVal dwType As Long) As Long <br/>说明 <br/>在拥有指定打印作业的系统上显示一个打印机出错消息框。如一名用户在远程登录,这种做法便相当有用 <br/>返回值 <br/>Long,IDOK, IDRETRY 或 IDCANCEL;由用户的输入决定(如消息框在远程系统显示,则肯定是IDOK) <br/>参数表 <br/>参数 类型及说明 <br/>hPrinter Long,出现错误的打印机的句柄 <br/>error Long,ERROR_OUT_OF_PAPER(缺纸)或ERROR_NOT_READY(未就绪) <br/>hwnd Long,指定消息框的父窗口。可以为NULL <br/>pText Long,欲显示的消息正文 <br/>pCaption Long,消息框的标题 <br/>dwType Long,指定任何一个标准的MessageBox标志。建议使用MB_ICONSTOP 或 MB_RETRYCANCEL 或 MB_SETFOREGROUND <br/>适用平台 <br/>Windows NT <br/> <br/><br/>PrinterProperties <br/><br/>VB声明 <br/>Declare Function PrinterProperties Lib "winspool.drv" Alias "PrinterProperties" (ByVal hwnd As Long, ByVal hPrinter As Long) As Long <br/>说明 <br/>启动打印机属性对话框,以便对打印机进行配置 <br/>返回值 <br/>Long,非零表示成功,零表示失败。会设置GetLastError <br/>参数表 <br/>参数 类型及说明 <br/>hwnd Long,对话框的父窗口 <br/>hPrinter Long,一个已打开的打印机的句柄 <br/>注解 <br/>如打印机打开的时候没有使用足够的访问权限,对话框的有些功能也许会禁止使用 <br/> <br/><br/>ReadPrinter <br/><br/>VB声明 <br/>Declare Function ReadPrinter Lib "winspool.drv" Alias "ReadPrinter" (ByVal hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, pNoBytesRead As Long) As Long <br/>说明 <br/>从打印机读入数据 <br/>返回值 <br/>Long,非零表示成功,零表示失败。会设置GetLastError <br/>参数表 <br/>参数 类型及说明 <br/>hPrinter Long,一个已打开的打印机的句柄(用OpenPrinter获得) <br/>pBuf Any,指定一个缓冲区或结构,用于装载来自打印机的数据 <br/>cdBuf Long,欲读入的缓冲区大小或字节数 <br/>pNoBytesRead Long,用于装载实际读取字节数的一个变量 <br/>注解 <br/>为使这个函数正常使用,端口必须是双向的 <br/> <br/><br/>ResetDC <br/><br/>VB声明 <br/>Declare Function ResetDC Lib "gdi32" Alias "ResetDCA" (ByVal hdc As Long, lpInitData As DEVMODE) As Long <br/>说明 <br/>根据提供的DEVMODE结构,对一个设备场景进行重设。这样便允许我们在打印期间改变打印机的配置。利用这个函数,可将文档中的某个页改为横向打印。可试着用DocumentProperties函数取得一个设备的默认DEVMODE结构 <br/>返回值 <br/>Long,执行成功则返回设备场景的句柄,零表示失败 <br/>参数表 <br/>参数 类型及说明 <br/>hdc Long,设备场景的句柄 <br/>lpInitData DEVMODE,指定一个缓冲区的第一个字节。该缓冲区包含了用于那个设备的一个有效DEVMODE结构。记住在这个缓冲区中包括设备专用的数据区 <br/>注解 <br/>这个函数可成功用于由VB的Printer对象的hDC属性返回的设备场景上 <br/>注意一定要正确设置lpdm的dmFields字段 <br/>这个函数在StartPage 和 EndPage之间会被禁用——即只能在页与页之间调用这个函数,不能在页内调用 <br/>驱动程序、设备和输出端口不可以用这个函数更改 <br/> <br/><br/>ResetPrinter <br/><br/>VB声明 <br/>Declare Function ResetPrinter Lib "winspool.drv" Alias "ResetPrinterA" (ByVal hPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long <br/>说明 <br/>改变指定打印机的默认数据类型及文档设置 <br/>返回值 <br/>Long,非零表示成功,零表示失败。会设置GetLastError <br/>参数表 <br/>参数 类型及说明 <br/>hPrinter Long,欲修改的一台打印机的句柄 <br/>pDefault PRINTER_DEFAULTS,定义了打印机新设置的一个结构。参考OpenPrinter函数的说明,了解这个结构进一步的细节。结构中的DesiredAccess字段会被忽略 <br/>适用平台 <br/>Windows NT <br/> <br/><br/>ScheduleJob <br/><br/>VB声明 <br/>Declare Function ScheduleJob Lib "winspool.drv" Alias "ScheduleJob" (ByVal hPrinter As Long, ByVal JobId As Long) As Long <br/>说明 <br/>提交一个要打印的作业 <br/>返回值 <br/>Long,非零表示成功,零表示失败。会设置GetLastError <br/>参数表 <br/>参数 类型及说明 <br/>hPrinter Long,一台已打开的打印机句柄 <br/>JobId Long,以前用AddJob函数获得的作业编号 <br/>注解 <br/>参考AddJob函数以获得进一步的信息 <br/> <br/><br/>Setabortproc <br/><br/>VB声明 <br/>Declare Function SetAbortProc Lib "gdi32" Alias "SetAbortProc" (ByVal hDC As Long, ByVal lpAbortProc As Long) As Long <br/> <br/>说明 <br/> 该函数叫“取消函数”。它告诉windows是继续打印,还是立即取消。该函数的作用是为windows指定取消函数的地址。由于vb不支持函数的地址概念,所以要使用dwcbk32.ocx通用回调定制控件,否则就不能使用这个函数。 <br/>返回值 <br/>Long,非零表示成功,SP_ERROR表示失败。会设置GetLastError <br/>参数表 <br/>参数 类型及说明 <br/>lpAbortProc Long,一个取消函数的地址。可用dwcbk32d.ocx定制控件的Procaddress属性或取。 <br/>hDC Long ,一个设备场景的句柄。 <br/><br/><br/>SetForm <br/><br/>VB声明 <br/>Declare Function SetForm& Lib "spoolss.dll" Alias "SetFormA" (ByVal hPrinter As_ <br/>Long, ByVal pFormName As String, ByVal Level As Long, pForm As Byte) <br/>说明 <br/> 为指定表单设置信息。 <br/>返回值 <br/>Long,非零表示成功,零表示失败。会设置GetLastError <br/>参数表 <br/>参数 类型及说明 <br/>Level Long,设为1 <br/>pForm Byte,包含一个有效FORM_INFO_1结构的缓冲区。 <br/>pFormName String,欲设置表单的名字。 <br/>hPrinter Long,指定一个打开打印机的句柄(用openprinter取得) <br/>适用平台 <br/>windows NT <br/>注解 <br/> 请参考AddForm函数。 <br/> <br/><br/>SetJob <br/><br/>VB声明 <br/>Declare Function SetJob Lib "winspool.drv" Alias "SetJobA" (ByVal hPrinter As Long, ByVal JobId As Long, ByVal Level As Long, pJob As Byte, ByVal Command As Long) As Long <br/> <br/>说明 <br/> 对一个打印作业的状态进行控制。 <br/>返回值 <br/>Long,非零表示成功,零表示失败。会设置GetLastError <br/>参数表 <br/>参数 类型及说明 <br/>hPrint Long,指定一个打开打印机的句柄(用openprinter取得) <br/>JobId Long,要修改的作业的编号 <br/>Level Long,0,1或2 <br/>pJob Byte,指定一个缓冲区。如级别(Level)设为1或2,那该缓冲区就包含了一个JOB_INFO_1或JOB_INFO_2结构。如级别为0,缓冲区为NULL(变成ByVal As Long,以便传递零值)。如指定了一个结构,则来自那个结构的信息会用于改变打印作业的设置(除JobId,pPrinterName,pMachineName,pDriverName,Size,Submitte以及Time字段外) <br/>Command Long,下述常数之一: <br/>JOB_CONTROL_CANCEL:取消作业 <br/>JOB_CONTROL_PAUSE :暂停作业 <br/>JOB_CONTROL_RESTART:重新启动一个已开始打印的作业 <br/>JOB_CONTROL_RESUME:恢复一个暂停的作业 <br/><br/><br/>SetPrinter <br/><br/>VB声明 <br/>Declare Function SetPrinter Lib "winspool.drv" Alias "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Byte, ByVal Command As Long) As Long <br/> <br/>说明 <br/>对一台打印机的状态进行控制。 <br/>返回值 <br/>Long,非零表示成功,零表示失败。会设置GetLastError <br/>参数表 <br/>参数 类型及说明 <br/>Level Long,0,2或3(4或5用于windows95,5或6用于NT4.0)。 <br/>pPrinter Byte,包含一个PRINTER_INFO_x的结构的缓冲区,其中的x代表级别的设定(Level)。假如级别为零,并且Command设为PRINTER_CONTROL_SET_STATUS,那缓冲区就包含了一个PRINTER_CONTROL_STATUS结构。否则,如级别为零,就设为NULL(要把声明变成ByVal As Long,以便传递零值) <br/>Command Long,下述值之一: <br/>零,根据PRINTER_INFO_x结构改变打印机 <br/>PRINTER_CONTROL_CANCEL:取消作业 <br/>PRINTER_CONTROL_PURGE:删除打印机的所有作业 <br/>PRINTER_CONTROL_RESUME:惠复一台暂停的打印机 <br/>PRINTER_CONTROL_SET_STATUS:载入打印机的PRINTER_CONTROL_STATUS结构(不可NT3.51下使用) <br/>hPrinter Long,指定一个已打开的打印机的句柄(用openprinter取得) <br/>注解 <br/> 在PRINTER_INFO_2结构的基础上设置打印机状态时,pServerName,AveragePPM,Status和cJobs字段都会被忽略。 <br/> <br/><br/>SetPrinterData <br/><br/>VB声明 <br/>Declare Function SetPrinterData Lib "winspool.drv" Alias "SetPrinterDataA" (ByVal hPrinter As Long, ByVal pValueName As String, ByVal dwType As Long, pData As Byte, ByVal cbData As Long) As Long <br/> <br/>说明 <br/> 设置打印机的注册表配置信息。 <br/>返回值 <br/>Long,ERROR_SUCCESS表示成功,一个错误值表示失败。 <br/>参数表 <br/>参数 类型及说明 <br/>hPrinter Long,指定一个已打开的打印机的句柄(用openprinter取得) <br/>pValueName String,欲设置的注册表值名 <br/>dwType Long,定义数据的类型,使用来自API32. txt文件的,以REG_起头的一个常数。 <br/>pData Byte,指定一个缓冲区的第一个条目,缓冲区中包含了要设置的适当的数据类型 <br/>cbData Long,缓冲区pData的长度 <br/><br/><br/>StartDoc <br/><br/>VB声明 <br/>Declare Function StartDoc Lib "gdi32" Alias "StartDocA" (ByVal hdc As Long, lpdi As DOCINFO) As Long <br/> <br/>说明 <br/> 开始一个打印作业。 <br/>返回值 <br/>Long,如执行成功,返回文档的作业编号,常数SP_ERROR失败。会设置GetLastError <br/>参数表 <br/>参数 类型及说明 <br/>ipdi DOCINFO,对文档定义的一个结构 <br/>hdc Long,设备场景的句柄 <br/>cbSize Long,结构的大小,目前是12个字节 <br/>lpszDocName String,指向一个字串的指针,该字串包含了文档名。这个文档名会在打印管理程序中显示出来 <br/>lpszOutput String,指向一个字串的指针,该字串包含了输出文件的名字。可设为vbNullString。表示将输出结果传送到设备 <br/>注解 <br/> 对DOCINFO结构的定义如下: <br/><br/> Type DOCINFO <br/> cbSize As Long <br/> lpszDocName As String <br/> lpszOutput As String <br/> End Type <br/> <br/> <br/><br/>StartDocPrinter <br/><br/>VB声明 <br/>Declare Function StartDocPrinter Lib "winspool.drv" Alias "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pDocInfo As Byte) As Long <br/> <br/>说明 <br/> 在后台打印的级别启动一个新文档。 <br/>返回值 <br/>Long,非零表示成功,零表示失败。 <br/>参数表 <br/>参数 类型及说明 <br/>hPrinter Long,指定一个已打开的打印机的句柄(用openprinter取得) <br/>Level Long,1或2(仅用于win95) <br/>pDocInfo Byte,包含一个DOC_INFO_1或DOC_INFO_2结构得缓冲区 <br/>注解 <br/> 在应用程序的级别并非有用。后台打印程序用它标识一个文档的开始 <br/> <br/><br/>StartPage <br/><br/>VB声明 <br/>Declare Function StartPage Lib "gdi32" Alias "StartPage" (ByVal hdc As Long) As Long <br/> <br/>说明 <br/> 打印一个新页前要先调用这个函数。 <br/>返回值 <br/>Long,非零表示成功,零表示失败。 <br/>参数表 <br/>参数 类型及说明 <br/>hdc Long,一个设备场景的句柄 <br/>注解 <br/> 参考EndPage函数的“移植问题” <br/> 学习一下
页:
[1]