直接打印RAW文件到打印机(一)

http://support.microsoft.com/kb/322091/zh-cn?spid=548&sid=348#top
好像是微软官方的支持给出了VC#的解决办法,可以运行,也不报错,就是没啥反应啊!


基本调用函数过程是:二进制文件,

OpenPrinter-->StartDocPrinter-->StartPagePrinter-->WritePrinter-->EndPagePrinter-->EndDocPrinter-->ClosePrinter


各函数的解释:

OpenPrinter:
  OpenPrinter函数获取一个句柄到指定的打印机或打印服务器或打印子系统中其他类型的句柄。
BOOL OpenPrinter(
  LPTSTR pPrinterName,         // printer or server name
  LPHANDLE phPrinter,          // printer or server handle
  LPPRINTER_DEFAULTS pDefault  // printer defaults
);
参数:
  pPrinterName:[输入参数]非空字符串,表示打印机名称;
  phPrinter:[输出]接收打开的打印机的句柄;
  pDefault:[输入】PRINTER_DEFAULTS结构的指针。此值可以为NULL。
返回值:
  如果函数成功,返回值是一个非零值;如果函数失败,返回值是零。调用GetLastError获得更多错误信息。
备注:
  不要在DllMain中调用此方法;非线程安全的,多线程操作要做同步。




StartDocPrinter
  StartDocPrinter函数通知spooler一个文件已经spooled for printing。
DWORD StartDocPrinter(
  HANDLE hPrinter,  // handle to printer object
  DWORD Level,      // information level
  LPBYTE pDocInfo   // information buffer
);
参数
  hPrinter:打印机句柄;
  Level:指定版本的结构,pDocInfo指向的这个结构;在Windows NT/2000/XP中此值必须是1,在Windows 95/98/Me中,这个值可以是1或2;
  pDocInfo:一个结构的指针,描述要打印的文件。Windows NT/2000/XP中pDocInfo是到DOC_INFO_1结构的指针;在Windows 95/98/Me,pDocInfo是一个DOC_INFO_1或DOC_INFO_2结构的指针。
  DOC_INFO_1结构为:
typedef struct _DOC_INFO_1 { 
  LPTSTR pDocName; 
  LPTSTR pOutputFile; 
  LPTSTR pDatatype; 
} DOC_INFO_1; 


StartPagePrinter:通知spooler一个页面将在指定的打印机上打印。

WritePrinter:
  WritePrinter函数通知splooer数据应该被写入到指定的打印机。
BOOL WritePrinter(
  HANDLE hPrinter,   // handle to printer object
  LPVOID pBuf,       // array of printer data
  DWORD cbBuf,       // size of array
  LPDWORD pcWritten  // bytes written to printer
);
参数:
  hPrinter:[输入]打印机句柄;
  PBUF:[输入]一个字节数组的指针,其中包含应写入到打印机的数据。
  cbBuf:[输入]数组的大小,以字节为单位。
  pcWritten:[输出]值的指针,存放写入打印机的数组长度。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要连接打印机并从Python中打印文件,你需要使用Python的第三方库 - `win32print`。以下是一个例子: ```python import win32print import os # 打印机名称,这里使用默认打印机 printer_name = win32print.GetDefaultPrinter() # 要打印文件路径 file_path = 'C:\\Users\\User\\Documents\\example.txt' # 打印文件 with open(file_path, 'rb') as f: data = f.read() hPrinter = win32print.OpenPrinter(printer_name) try: hJob = win32print.StartDocPrinter(hPrinter, 1, ("example.txt", None, "RAW")) try: win32print.StartPagePrinter(hPrinter) win32print.WritePrinter(hPrinter, data) win32print.EndPagePrinter(hPrinter) finally: win32print.EndDocPrinter(hPrinter) finally: win32print.ClosePrinter(hPrinter) ``` 在这个例子中,我们首先使用 `win32print.GetDefaultPrinter()` 获取默认打印机的名称,并将其保存在变量 `printer_name` 中。然后,我们指定要打印文件的路径,将其读取为二进制数据,并将其保存在变量 `data` 中。接下来,我们使用 `win32print.OpenPrinter()` 打开打印机,并将其句柄保存在变量 `hPrinter` 中。然后,我们使用 `win32print.StartDocPrinter()` 开始打印作业,并使用 `win32print.StartPagePrinter()` 开始打印页面。我们使用 `win32print.WritePrinter()` 将数据写入打印机,然后使用 `win32print.EndPagePrinter()` 结束打印页面。最后,我们使用 `win32print.EndDocPrinter()` 结束打印作业,并使用 `win32print.ClosePrinter()` 关闭打印机。 请注意,这个例子假定你使用的是Windows操作系统。如果你使用的是Linux或Mac操作系统,则需要使用不同的库和函数来连接打印机打印文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值